JavaScript逗号和变量评估

A B*_*gus 6 javascript

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

"i=0, j=1, k=2; evaluates to 2"
Run Code Online (Sandbox Code Playgroud)

但当我显示这样的价值 -

var x = i=0, j=1, k=2; alert(x); 
Run Code Online (Sandbox Code Playgroud)

要么

alert(i=0, j=1, k=2);
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢!

Esa*_*ija 6

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

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

alert( ( i = 0, j = 1, k = 2 ) );
Run Code Online (Sandbox Code Playgroud)

请注意,所有的书都说是表达式"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
   }
Run Code Online (Sandbox Code Playgroud)