JavaScript逗号和变量求值

6

《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是什么意思吗?这是错误的吗?

谢谢!

3个回答

6

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

在一般表达式中,它的工作原理就像书上所说的:

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

请注意,这本书所说的只是表达式"i = 0, j = 1, k = 2""等于2"在很多情况下,您需要将该表达式放在括号中,以便像书中所想的那样成为单独独立的表达式。
在变量声明中,逗号具有特殊行为。它允许您编写更短的声明,因为您不必重复varvar 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
   }

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
因此,alert(x); 得到的是 0
需要注意的是,在语句中,逗号操作符具有相对较低的执行优先级,因此在大多数情况下与其前面的关键字共享,只有少数情况除外,如 var(最低优先级关键字之一),它可以将变量保留在当前作用域内。

1

在这里,逗号只是意味着您传递了3个参数而不是一个,因此alert gracefully会忽略其他两个参数,它不会评估任何内容。使用

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

并且

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接