在 Javascript 中:为什么 var a, b = 3 return 未定义而 b = 3 没有?
In Javascript: why does var a, b = 3 return undefined while b = 3 does not?
在MDN中描述了逗号运算符:
The comma operator evaluates each of its operands (from left to right) and returns the value of the last operand.
但是为什么
var a, b = 3
return undefined
,而表达式
b = 3
会return3,不是吗?
var a, b = 3;
同下:
var a;
var b = 3;
变量声明(var
关键字)不是表达式。变量声明中的逗号更类似于函数参数列表中的逗号。他们什么都不return。
逗号运算符 return 确实是最后一项,但我不确定它是否有任何实际用例(在 for
循环初始化之外)。
> 1, 2, 3
< 3
The page you linked to其实解释得很好
这个:
var a, b = 3;
是一个VariableStatement。 VariableStatement
"normal completion" 至 empty
中的评估:
- Let next be the result of evaluating VariableDeclarationList.
- ReturnIfAbrupt(next).
- Return NormalCompletion(empty).
这个:
b = 3;
是一个 ExpressionStatement。 ExpressionStatement
求值为求值表达式的结果:
- Let exprRef be the result of evaluating Expression.
- Return ? GetValue(exprRef).
在MDN中描述了逗号运算符:
The comma operator evaluates each of its operands (from left to right) and returns the value of the last operand.
但是为什么
var a, b = 3
return undefined
,而表达式
b = 3
会return3,不是吗?
var a, b = 3;
同下:
var a;
var b = 3;
变量声明(var
关键字)不是表达式。变量声明中的逗号更类似于函数参数列表中的逗号。他们什么都不return。
逗号运算符 return 确实是最后一项,但我不确定它是否有任何实际用例(在 for
循环初始化之外)。
> 1, 2, 3
< 3
The page you linked to其实解释得很好
这个:
var a, b = 3;
是一个VariableStatement。 VariableStatement
"normal completion" 至 empty
中的评估:
- Let next be the result of evaluating VariableDeclarationList.
- ReturnIfAbrupt(next).
- Return NormalCompletion(empty).
这个:
b = 3;
是一个 ExpressionStatement。 ExpressionStatement
求值为求值表达式的结果:
- Let exprRef be the result of evaluating Expression.
- Return ? GetValue(exprRef).