“JavaScript:权威指南,第 6 版”一书在第 4.13.5 节中指出 -
"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
?这是错的吗?
谢谢!
“JavaScript:权威指南,第 6 版”一书在第 4.13.5 节中指出 -
"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
?这是错的吗?
谢谢!
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
}
这是关于 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);
产生 a 0
。
请注意,逗号运算符在语句中的执行优先级相对较低,因此在大多数情况下它确实共享前面的关键字,只有少数例外(例如var
(最低优先级关键字之一))将变量保持在当前范围内。
这里的逗号仅仅意味着你传递了 3 个参数而不是一个,所以 alert 优雅地忽略了其他两个,它不会评估任何东西。采用
alert((i=0, j=1, k=2));
和
var x = (i=0, j=1, k=2); alert(x);