《JavaScript权威指南第六版》中的第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
的值设置为什么,都会显示。
这本书似乎是错的。有人能解释一下书中所说的评估为2
是什么意思吗?这是错误的吗?
谢谢!
《JavaScript权威指南第六版》中的第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
的值设置为什么,都会显示。
这本书似乎是错的。有人能解释一下书中所说的评估为2
是什么意思吗?这是错误的吗?
谢谢!
alert( i = 0, j = 1, k = 2 );
中的逗号用于分隔函数参数。
在一般表达式中,它的工作原理就像书上所说的:
alert( ( i = 0, j = 1, k = 2 ) );
"i = 0, j = 1, k = 2"
"等于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
}
=
,这里指的是你放置逗号的语句。试着运行代码 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
(最低优先级关键字之一),它可以将变量保留在当前作用域内。在这里,逗号只是意味着您传递了3个参数而不是一个,因此alert gracefully会忽略其他两个参数,它不会评估任何内容。使用
alert((i=0, j=1, k=2));
并且
var x = (i=0, j=1, k=2); alert(x);