1

在考虑以下代码示例(来自 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] 返回你设置给键的值。如果您将键仅作为文本给出,它会在“汽车”中定义一个变量,设置为您与键关联的值。但是,在上面,"b"是一个字符串,但car.manyCars.b可以像设置为 的变量一样调用它"Jeep",并且 ALSOcar.manyCars["b"]是有效的语法,返回"Jeep".

我想知道是否有人可以清楚地解释当您声明对象文字时实际发生的情况,因为显然我目前的理解并不完整。

4

3 回答 3

7

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

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

如果你这样做:

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

输出将是:

键:7(类型:字符串)
键:manyCars(类型:字符串)

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

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

于 2013-07-15T04:34:00.747 回答
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

您还可以使用布尔值 ( trueor false)、数字文字和undefinedandnull作为键。但是请记住,它们被强制转换为字符串。因此你可以这样做:

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

这就是你需要知道的关于对象字面量的全部内容。

于 2013-07-15T04:58:57.047 回答
0

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

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

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

这是另一个更深入地使用对象字面量的文章

http://javascript.info/tutorial/objects

于 2013-07-15T04:36:08.010 回答