繁体   English   中英

为什么“花括号”在JavaScript中的行为有所不同?

[英]Why Curly Brackets behave differently in JavaScript?

据我所知,JavaScript遵循ECMA规范,因此,

var x=[2,3,4] // represents array

var y= {"a":1,"b":2,"c":3} // represents object with key/value pair

但由于以下两个示例,我感到困惑:

范例1:

{"a","b","c"} // Is valid with return type --> "c"

范例2:

var x={"a","b","c"} // Is Invalid

有人可以解释一下最后两个示例的结果原因吗?

大括号用于JavaScript中的两件事。

  1. 对象文字周围的分隔符,如var y= {"a":1,"b":2,"c":3}
  2. 语句块周围的定界符,如if (y) { x = 1; z = 2; } if (y) { x = 1; z = 2; }

如果{在语句的开头,则将其视为第二种类型,因此将其解析为语句块。 这就是您的示例2。 该语句是表达式"a","b","c" 该语句使用逗号运算符 ,因此其值是最后一个表达式,即"c" 在一个函数中,您需要使用return来返回该值,但是当您在JavaScript控制台中键入一条语句时,该语句将自动求值并打印该值。

示例2是类型1,但是对象内容的语法无效,因此会出现错误。

如上面注释中其他人所述,仅在使用{}而不分配变量时才使用表达式。 这就是为什么它将记录最后评估的表达式的原因。 在第二种情况下,这是不正确的对象初始化。 可能的方案是:

var x = {"a","b","c"}; //Invalid as object properties incorrectly defined.
var y = ["a","b","c"]; // Correct if you want an array with these elements.
var z = {
   a: "some value",
   b: "some value",
   c: "some value"
};  // Also correct if you want a,b,c as properties of an object.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM