javascript中的对象文字如何工作?

时间:2013-07-15 04:27:42

标签: javascript

在考虑以下代码示例(来自Mozilla的开发人员网站)时,我在javascript中理解对象文字的语法时遇到了一些麻烦:

var car = { manyCars: {a: "Saab", "b": "Jeep"}, 7: "Mazda" };

console.log(car.manyCars.b); // Jeep
console.log(car[7]); // Mazda

我目前对javascript对象文字的理解是这样的:如果你给一个键,值对和键是一个数据类型,它就像python字典一样,使car [key]返回你设置的值键。如果您将密钥仅作为文本提供,它会将“car”中的变量定义为与密钥关联的值。但是,在上面,"b"是一个字符串,但可以调用car.manyCars.b,就好像它是一个设置为"Jeep"的变量,并且car.manyCars["b"]是有效的语法,返回"Jeep"

我想知道是否有人可以给我一个明确的解释,当你声明一个对象文字时实际发生了什么,因为很明显我目前的理解并不完整。

3 个答案:

答案 0 :(得分:7)

在JavaScript中,对象文字表示法中的键被视为字符串,无论它们是否在引号中。因此,有了这个:

var car = { manyCars : {a: "Saab", "b": "Jeep"}, 7: "Mazda" };

如果你这样做:

for (var k in car) { console.log("key: " + k + " (type: " + typeof(k) + ")"); }

输出将是:

  

键:7(类型:字符串)
  key:manyCars(type:string)

请注意,(显然)数字键7也是string。您甚至可以将JavaScript关键字用作对象文字中的键。

请注意,按键访问值时,规则更严格。例如,当密钥是保留字时,必须使用下标符号和引号。此外,对象文字中的裸键必须(如果它不是数字文字)是有效的JavaScript标识符名称,因此它不能包含空格,逗号或JavaScript运算符(+=等等。)。

答案 1 :(得分:2)

在JavaScript对象中,文字由键值对组成。 JavaScript中的键始终是字符串,而值可以是任何数据类型。

JavaScript为定义键提供了语法糖。例如,与字符串文字不同,您不需要引用键。因此,以下两个例子是等效的:

{ x: 0 }   // example 1
{ "x": 0 } // example 2

然而,这种语法糖仅适用于它们之间没有任何空格(即空格,制表符,换行符等)的标识符。例如,以下内容在JavaScript中无效:

{ a property: 0 } // whitespace not allowed in identifiers

但是,您可以通过引用标识符来解决此限制:

{ "a property": 0 } // valid

您也可以使用布尔值(truefalse),数字文字以及undefinednull作为键。但请记住,他们被强制为字符串。因此你可以这样做:

var o = {
    undefined: 1,
    null: 2,
    true: 3,
    false: 4,
    0: 5
};

然后您可以访问它们:

alert(o.undefined); // 1
alert(o.null);      // 2
alert(o.true);      // 3
alert(o.false);     // 4
alert(o[0]);        // 5

最后一句话很重要。数字文字本身不会被分类为有效标识符。因此,您需要使用数组括号表示法([])而不是点符号(.)来访问它。

由于JavaScript中的所有键都是字符串,您甚至可以这样做:

alert(o["undefined"]); // 1
alert(o["null"]);      // 2
alert(o["true"]);      // 3
alert(o["false"]);     // 4
alert(o["0"]);         // 5

但是,您不能将对象,数组或函数用作键。例如,以下内容无效:

{ {1: 2}: 3 }            // objects can't be used as keys
{ [1]: 2 }               // arrays can't be used as keys
{ function () {}: true } // functions can't be used as keys

这就是你需要了解的关于对象文字的所有内容。

答案 2 :(得分:0)

本质上,javascript中的对象文字与字典非常相似,但也具有Java或PHP中对象的功能。对象可以具有在其中定义的功能或属性,或两者。您可以使用引号或点语法,具体取决于您尝试访问的键。有些可能有特殊字符,那么你想要使用引号,如果没有特殊字符,请使用点。两者都是正确的。

这是一个有用的资源,可以比较和对比创建对象文字和通过构造函数创建对象之间的区别。

http://net.tutsplus.com/tutorials/javascript-ajax/the-basics-of-object-oriented-javascript/

这是另一个更深入地讨论对象文字的使用

http://javascript.info/tutorial/objects