日期:2014-05-16  浏览次数:20276 次

【原创】Javascript 中的逗号操作符

?今天看到Javascript传说中的逗号操作符,实际上我们平时也很难遇到特殊的用法和语法结构,如果面试的时候遇到就傻眼了的确有点刁钻,适合技术狂人们去深造。

?

运算规则:

逗号运算符,它将先计算左边的参数,再计算右边的参数值。然后返回最右边参数的值。

?

<script>
var a = 10, b = 20;
function foo(){ return a++, b++, 30; }
var c = foo();
alert(a); // 返回11
alert(b); // 返回21
alert(c); // 返回30
</script>

?

优先级:

逗号运算符在JavaScript在的优先级是最低的,比函数调用和赋值运算符还低。(注:函数调用确实是函数调用运算符

<script>
alert(10*2, 10*3); // 输出20
</script>

?

?

根据逗号运算符的原理来解释的话,那应该是输出30才对,但是注意:逗号运算符在JavaScript在的优先级是最低的。按照平时的思维方式也应该返回20。

如果要输出30应该这样写:

<script>
alert( (10*2, 10*3) ); // 输出30
</script>

?

如果需要深入研究大家可以做做下面的题(适合技术狂人):

来自?http://www.easyui.info/archives/1527.html

?

1. var a = (1,5 - 1) * 2;a的值为()    
   
   A、0.999999999  B、1  C、2  D、8  E、0.5    
   
2. var b = 10,c = (    
                20,    
                function (x) { return x + 100},    
                function () { return arguments[0]}    
              );    
   
   var a = b + c({x: 10}).x;    
   a的值为()    
   
   A、30、10  B、20  C、10  D、30、110  E、NaN 、10    
3. function f(x, y) {    
       x = 10;    
       alert(    
         arguments[0],    
         arguments[1]    
       );    
   }    
   
   f();结果为    

   A、null,undefined  B、10  C、undefined  D、0, NaN  E、 "undefined"   
   
4. var f = (function f(){ return "1"; }, function g(){ return 2; })();    
   typeof f;的值为()    
       
   A、"string" B、"number" C、"function" D、"undefined"   
   
5. var x = 10;    
   var foo = {    
       x: 20,    
       bar: function ()    
       {    
           var x = 30;    
           return this.x;    
       }    
   };    
   
   alert(    
     foo.bar(),    
     (foo.bar)(),    
     (foo.bar = foo.bar)(),    
     (foo.bar, foo.bar)()    
   );    
结果为:    
A、15 B、20  C、30 D、10   

?

?

?

?