据我所知,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
有人可以解释一下最后两个示例的结果原因吗?
答案 0 :(得分:2)
大括号用于JavaScript中的两件事。
var y= {"a":1,"b":2,"c":3}
if (y) { x = 1; z = 2; }
如果{
在语句的开头,则将其视为第二种类型,因此将其解析为语句块。这就是您的示例2。该语句是表达式"a","b","c"
。该语句使用comma operator,因此它的值是最后一个表达式,即"c"
。在函数中,您需要使用return
来返回该值,但是当您在JavaScript控制台中键入一条语句时,该语句将自动求值并打印出该值。
示例2是类型1,但是对象内容的语法无效,因此会出现错误。
答案 1 :(得分:0)
仅在不分配变量的情况下使用{}
时,只是对表达式求值,正如其他人在上面的注释中所述。这就是为什么它将记录最后评估的表达式的原因。在第二种情况下,这是不正确的对象初始化。可能的情况是:
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.