JavaScript逗号和变量评估

时间:2013-03-07 09:12:54

标签: javascript

4.13.5节中的“JavaScript:The Definative Guide,第6版”一书指出 -

"i=0, j=1, k=2; evaluates to 2"

但是当我显示这样的值时 -

var x = i=0, j=1, k=2; alert(x); 

alert(i=0, j=1, k=2);

显示值0。我进行了实验,并且显示了i设置的值。

这本书似乎错了。可以通过说出evaluates to 2这句话来解释这本书的意思吗?这是错的吗?

谢谢!

3 个答案:

答案 0 :(得分:6)

alert( i = 0, j = 1, k = 2 );中,逗号分隔了函数参数。

在一般表达式中,它就像书中所说的那样:

alert( ( i = 0, j = 1, k = 2 ) );

请注意,本书的所有内容都是表达式"i = 0, j = 1, k = 2" "evaluates to 2"在许多上下文中,您需要将该表达式放在括号内,以使其成为一个独立的表达式,就像本书所希望的那样

在变量声明中,逗号再次具有特殊行为。它允许您编写较短的声明,因为您不必重复var

var a; var b; var c;var a, b, c;是平等的。 var a = 5; var b = 6; var c = 7;var a = 5, b = 6, c = 7;

也是如此

逗号在数组和对象文字中也有特殊行为:

   var a = [1,2,3] //Creates an array with elements 1, 2 and 3
   var a = [(1,2,3)] //Creates array with one element: 3

   var b = {
       key: value, //Comma is separating the key-value pairs.
       key2: value2
   }

答案 1 :(得分:4)

这是关于javascript语句的优先级,它在评估另一个语句之前完成所有=,这是你所放置的逗号。

尝试var x = (i=0, j=1, k=2);,你会得到你想要的。

修改

使用您的代码行var x = i=0, j=1, k=2;,它实际上将其解释为三个语句:

  1. var x=i=0
  2. var j=1
  3. var k=2
  4. 预计会alert(x);产生0

    请注意,逗号运算符在语句中具有相对较低的执行优先级,因此在大多数情况下它会在关键字之前进行共享,只是有一些例外,例如var(最低优先级关键字之一),它将变量保持在目前的范围。

答案 2 :(得分:1)

这里逗号只是意味着你传递了3个参数而不是一个,所以警告优雅忽略其他两个,它不会评估任何东西。使用

alert((i=0, j=1, k=2));

var x = (i=0, j=1, k=2); alert(x);