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

javascript中的对象文字是如何工作的?,javascript,Javascript,在考虑来自Mozilla开发人员站点的以下代码示例时,我在理解javascript中对象文本的语法方面遇到了一些困难: var car = { manyCars: {a: "Saab", "b": "Jeep"}, 7: "Mazda" }; console.log(car.manyCars.b); // Jeep console.log(car[7]); // Mazda 我目前对javascript对象文本的理解是这样的:如果您给出一个键、值对,并且该键是数据类型,它的工作原理类似于py

在考虑来自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


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

在JavaScript中,对象文字表示法中的键被视为字符串,不管它们是否在引号中。因此,在这种情况下:

var car = { manyCars : {a: "Saab", "b": "Jeep"}, 7: "Mazda" };
如果您这样做:

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

键:7类型:字符串 关键字:manyCars类型:string

请注意,显然是数字键7也是一个字符串。您甚至可以使用JavaScript关键字作为对象文本中的键


请注意,当通过键访问值时,规则更加严格。例如,当键是保留字时,必须使用下标符号和引号。此外,如果对象文字中的裸键不是数字文字,则它必须是有效的JavaScript标识符名称,因此它不能包含空格、逗号或JavaScript运算符+、=,等等。在JavaScript中,对象文字符号中的键无论是否在引号中,都被视为字符串。因此,在这种情况下:

var car = { manyCars : {a: "Saab", "b": "Jeep"}, 7: "Mazda" };
如果您这样做:

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

键:7类型:字符串 关键字:manyCars类型:string

请注意,显然是数字键7也是一个字符串。您甚至可以使用JavaScript关键字作为对象文本中的键


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

本质上,JavaScript中的对象文本的操作非常类似于字典,但也具有Java或PHP中对象的功能。对象可以具有在或属性中定义的函数,或两者都有。根据要访问的键,可以使用引号或点语法。有些可能有特殊字符,那么您可能希望使用引号,如果没有特殊字符,请使用点。两者都是正确的

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

这里还有一个更深入地介绍对象文字的使用


本质上,javascript中的对象文字的操作非常类似于字典,但也具有Java或PHP中对象的功能。对象可以具有在或属性中定义的函数,或两者都有。根据要访问的键,可以使用引号或点语法。有些可能有特殊字符,那么您可能希望使用引号,如果没有特殊字符,请使用点。两者都是正确的

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

这里还有一个更深入地介绍对象文字的使用


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

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

{ x: 0 }   // example 1
{ "x": 0 } // example 2
然而,这种语法糖只适用于没有任何空格的标识符,如空格、制表符、换行符等。例如,以下内容在JavaScript中无效:

{ a property: 0 } // whitespace not allowed in identifiers
但是,您可以通过引用标识符来解决此限制:

{ "a property": 0 } // valid
您还可以使用布尔值true或false、数字文字以及未定义和null作为键。但是请记住,它们是被强制为字符串的。因此,您可以:

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

这就是您需要了解的所有对象文本。

在JavaScript对象中,文本由键值对组成。JavaScript中的键总是字符串,而值可能是 ny数据类型

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

{ x: 0 }   // example 1
{ "x": 0 } // example 2
然而,这种语法糖只适用于没有任何空格的标识符,如空格、制表符、换行符等。例如,以下内容在JavaScript中无效:

{ a property: 0 } // whitespace not allowed in identifiers
但是,您可以通过引用标识符来解决此限制:

{ "a property": 0 } // valid
您还可以使用布尔值true或false、数字文字以及未定义和null作为键。但是请记住,它们是被强制为字符串的。因此,您可以:

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

关于对象文字,您只需要知道这些。

如果有人能推荐一个除了mozilla的开发页面之外的javascript资源,而且它的页面长度也不超过1000页,我将不胜感激。面向对象的javascript-Book如果有人能推荐一个除了mozilla的开发页面之外的javascript资源,而且它的页面长度也不超过1000页,我将不胜感激。面向对象的javascript—事实上,对象文字中的BookKey可以是javascript保留字。请参阅EcmaScript规范的章节,然后进行尝试。此外,不能出现在对象文字键中的字符列表不仅仅是空格字符。@TedHopp哦,好的。我会纠正的。我从来没有说过只有空格字符不能出现在键中。我说过任何空格字符都不能出现在键中。这包括空格、换行符、制表符等。我指的不仅仅是其他空白字符。根据规范,裸密钥必须是有效的标识符名称,但不一定是有效的标识符、StringLiteral或NumberTerral。因此,除了空白之外,对象文字中的裸键不能包含逗号、冒号、运算符,例如+、=,等等。但是,数字文字可能包含句点,甚至+符号:{7.3e+4:big}是有效的对象文字。事实上,对象文字中的键可以是JavaScript保留字。请参阅EcmaScript规范的章节,然后进行尝试。此外,不能出现在对象文字键中的字符列表不仅仅是空格字符。@TedHopp哦,好的。我会纠正的。我从来没有说过只有空格字符不能出现在键中。我说过任何空格字符都不能出现在键中。这包括空格、换行符、制表符等。我指的不仅仅是其他空白字符。根据规范,裸密钥必须是有效的标识符名称,但不一定是有效的标识符、StringLiteral或NumberTerral。因此,除了空白之外,对象文字中的裸键不能包含逗号、冒号、运算符,例如+、=,等等。但是,数字文字可能包含句点,甚至+符号:{7.3e+4:big}是有效的对象文字。