在Javascript中:为什么var a,b = 3返回undefined而b = 3不?

时间:2016-11-22 13:18:24

标签: javascript expression operator-keyword var comma

MDN中描述了逗号运算符:

  

逗号运算符计算每个操作数(从左到右)并返回最后一个操作数的值。

但为什么

var a, b = 3

返回undefined,而表达式

b = 3

将返回3,不是吗?

2 个答案:

答案 0 :(得分:2)

var a, b = 3;

与以下内容相同:

var a;
var b = 3;

变量声明(var关键字)不是表达式。变量声明中的逗号更类似于函数参数列表中的逗号。他们不会退货。

逗号运算符确实返回最后一项,但我不确定它是否有任何实际用例(在for循环初始化之外)。

> 1, 2, 3
< 3

The page you linked to实际上解释得非常好。

答案 1 :(得分:1)

此:

Attaching to process ID 23054, please wait...
sun.jvm.hotspot.debugger.NoSuchSymbolException: Could not find symbol "gHotSpotVMTypeEntryTypeNameOffset" in any of the known library names (libjvm.so, libjvm_g.so, gamma_g)
        at sun.jvm.hotspot.HotSpotTypeDataBase.lookupInProcess(HotSpotTypeDataBase.java:400)
        at sun.jvm.hotspot.HotSpotTypeDataBase.getLongValueFromProcess(HotSpotTypeDataBase.java:381)
        at sun.jvm.hotspot.HotSpotTypeDataBase.readVMTypes(HotSpotTypeDataBase.java:86)
        at sun.jvm.hotspot.HotSpotTypeDataBase.<init>(HotSpotTypeDataBase.java:68)
        at sun.jvm.hotspot.bugspot.BugSpotAgent.setupVM(BugSpotAgent.java:550)
        at sun.jvm.hotspot.bugspot.BugSpotAgent.go(BugSpotAgent.java:476)
        at sun.jvm.hotspot.bugspot.BugSpotAgent.attach(BugSpotAgent.java:314)
        at sun.jvm.hotspot.tools.Tool.start(Tool.java:146)
        at sun.jvm.hotspot.tools.JMap.main(JMap.java:126)
Debugger attached successfully.
jmap requires a java VM process/core!

VariableStatement。 “正常完成”var a, b = 3; 评估VariableStatement

  
      
  1. 接下来是评估VariableDeclarationList的结果。
  2.   
  3. ReturnIfAbrupt(下一个)。
  4.   
  5. 返回NormalCompletion(空)。
  6.   

此:

empty

ExpressionStatementb = 3; 计算评估表达式的结果:

  
      
  1. 让exprRef成为评估Expression的结果。
  2.   
  3. 回来?的GetValue(exprRef)。
  4.