对象是一种离散的数据类型,
原语是一种数据类型,有一个关键值
不同之处:与基元不同,对象是可变的。对象可以包含数据
与标识符(如变量)相关联,但它会保留自己的 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 }
null
和 undefined
值会生成空对象,对象在功能上完全相同
调用 new Object()
,而无需提供参数。
将对象字面量作为参数传递给 new Object()
会传递该对象
字面量,而不对其进行更改:
let myObject = new Object( { myValue : 10 } );
myObject;
> Object { myValue: 10 }
就像为基元值使用构造函数一样,为对象使用构造函数一样 与使用对象字面量表示法相比几乎没有什么好处。即使是在创建 空对象,以便稍后填充值,因此开发者倾向于使用 为简单起见,使用文字符号。
检查您的理解情况
您可以使用哪些类型的表示法来设置对象的属性?
以下哪一项是获取值的正确语法
共 myProp
myObj["myProp"];
myObj("myProp");
myObj{"myProp"};