物体

对象是一种离散的数据类型, 原语是一种数据类型,有一个关键值 不同之处:与基元不同,对象是可变的。对象可以包含数据 与标识符(如变量)相关联,但它会保留自己的 object 数据 而不管其中包含什么数据。

除了基元之外,所有 JavaScript 值都是对象,但由于即使是 由于原始字面量的存在, 原型继承,但实际上 常说,JavaScript 实际上是由对象构成的

对象字面量是一对大括号,括在零个或多个键值对之间 这些键值对称为“属性”该字段可以包含任何 JavaScript 值。

{
   
"myProperty" : true
}

属性 key 可以是任何符号或 字符串。与为代码分配标识符时一样, 变量,那么用作属性键的字符串应该是可预测的, 描述性:

let carAttributes = {
   
"color" : "red"
};

carAttributes
> Object { color: "red" }

属性键需要使用单引号 (') 或双引号 (") 字符串字面量,而不是 模板字面量

let carAttributes = {
   
`keyString` : false
};
> Uncaught SyntaxError: expected property name, got template literal

属性值可以是任何数据类型。对象的属性本身可以 包含具有自己属性的对象:

let myObject = {
   
'key' : {
       
'subkey' : true,
       
'othersubkey' : false
   
}
};

myObject
;
> Object { key: Object { subkey: true, othersubkey: false } }

当属性的值是函数时,该属性称为“方法”。

const myObject = {
   
"myProperty" : true,
    myMethod
() {
        console
.log( "This is a method." );
   
}
}

myObject
.myProperty;
> true

myObject
.myMethod();
> "This is a method."

您还可以使用 new 关键字创建对象:

let myObject = new Object();

在前面的示例中,为新创建的对象字面量分配了 变量。这不是必需的,因为与任何其他数据类型一样,您可以使用 可以在预期对象的位置使用没有标识符的对象。不过, 在可能造成混淆的任何上下文中,对象字面量都需要使用括号 (假设两个大括号语法相同 ({}))。 初始化变量绝不需要执行此操作。

{ "value" : 2 }
> Uncaught SyntaxError: unexpected token: ':'

({ "value" : 2 })
> Object { value: 2 }

let valObj
= { "value" : 2 };

valObj
;
> Object { value: 2 }

与基元不同,创建 一个使用 new Object() 并创建一个对象字面量的对象,因为 结果,无论是哪种情况,都将是具有继承自 Object 原型设计而成。但两者之间存在一个实际区别 语法。

new 关键字必须定义一个稍后填充数据的空对象:

let myObject = new Object();

myObject
.booleanValue = true;
myObject
.stringValue = "My string.";

对象字面量可以在创建后填充数据:

let myObject = {
   
'booleanValue' : true,
   
'stringValue' : "My string."
};

虽然 new Object() 几乎没有什么实际用途,但可用于转变基元 数据值转换成各自类型的对象,例如使用 new 关键字及其构造函数 函数。例如,以下代码在功能上等同于 new Number( 10 ):

let myObject = new Object( 10 );

myObject
;
> Number { 10 }

nullundefined 值会生成空对象,对象在功能上完全相同 调用 new Object(),而无需提供参数。

将对象字面量作为参数传递给 new Object() 会传递该对象 字面量,而不对其进行更改:

let myObject = new Object( { myValue : 10 } );

myObject
;
> Object { myValue: 10 }

就像为基元值使用构造函数一样,为对象使用构造函数一样 与使用对象字面量表示法相比几乎没有什么好处。即使是在创建 空对象,以便稍后填充值,因此开发者倾向于使用 为简单起见,使用文字符号。

检查您的理解情况

您可以使用哪些类型的表示法来设置对象的属性?

点表示法
线条符号
句点表示法
括号表示法

以下哪一项是获取值的正确语法 共 myProp

myObj("myProp");
myObj["myProp"];
myObj{"myProp"};