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
这句话来解释这本书的意思吗?这是错的吗?
谢谢!
答案 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;
,它实际上将其解释为三个语句:
var x=i=0
var j=1
var k=2
预计会alert(x);
产生0
。
请注意,逗号运算符在语句中具有相对较低的执行优先级,因此在大多数情况下它会在关键字之前进行共享,只是有一些例外,例如var
(最低优先级关键字之一),它将变量保持在目前的范围。
答案 2 :(得分:1)
这里逗号只是意味着你传递了3个参数而不是一个,所以警告优雅忽略其他两个,它不会评估任何东西。使用
alert((i=0, j=1, k=2));
和
var x = (i=0, j=1, k=2); alert(x);