对象名字和属性的名字是大小写敏感的
对象中未赋值的属性的值为undefined
JavaScript中的对象只能使用String
类型作为键类型,所以注意将 Object
类型作为键添加到对象上时,会调用 obj.toString()
方法
例如当我们使用数字 0
作为属性 key
时,它将被转化为字符串 "0"
:
let obj = {
0: "test" // 和 "0": "test" 相同
};
// 两个 alert 访问的是同一个属性(数字 `0` 被转化为了字符串 "0")
alert( obj["0"] ); // test
alert( obj[0] ); // test(同一个属性)
保留字段可以被用作属性名。
正如我们所知道的,像 “for”、“let” 和 “return” 等保留字段不能用作变量名。
但是对于对象的属性,没有这些限制。任何名字都可以:
let obj = {
for: 1,
let: 2,
return: 3
}
alert( obj.for + obj.let + obj.return ); // 6
我们可以将任意字符串作为属性键(key),只有一个特殊的:__proto__
因为历史原因要特别对待。
比如,我们不能把它设置为非对象的值:
let obj = {};
obj.__proto__ = 5; // 分配一个数字
alert(obj.__proto__); // [object Object] — 值为对象,与预期结果不同
我们从代码中可以看出来,把它赋值为 5
的操作被忽略了。
关于 __proto__
的详细信息将在稍后的 原型继承 一章中详细介绍。
到目前为止,重要的是要知道,如果我们打算将用户提供的密钥存储在对象中,则 __proto__
的这种行为可能会成为错误甚至漏洞的来源。