# 对象

# 1、创建对象

对象可以通过对象字面量、new 关键字和 Object.create() 函数来创建。

# 2、原型

使用 new Object() 创建的对象继承自 Object.prototype,通过 new Array()创建的对象以 Array.prototype 为原型,

# 3、删除属性

用于从对象中移除属性。

delete 操作符只删除自有属性,不删除继承属性(要删除继承属性,必须从定义属性的原型对象上删除。

如果 delete 操作成功或没有影响(如删除不存在的属性),则 delete 表达式求值为 true。对非属性访问表达式(无意义地)使用 delete,同样也会求值为 true

delete 不会删除 configurable 特性为 false 的属性。

# 4、测试属性

使用 in 操作符,或者 hasOwnProperty()、propertyIsEnumerable()方法,或者直接查询相应属性。

const obj = { x: 1 };
'x' in obj; // true
'y' in obj; // false
'toString' in obj; // true

// 对象的 hasOwnProperty() 方法用于测试对象是否有给定名字的属性。对继承的属性,它返回false
obj.hasOwnProperty('x'); // true
obj.hasOwnProperty('y'); // false
obj.hasOwnProperty('toString'); // false 自有属性返回 false

// propertyIsEnumerable() 方法细化了 hasOwnProperty() 测试。
// 如果传入的命名属性是自有属性且这个属性的 enumerable 特性为 true,这个方法会返回 true。
obj.propertyIsEnumerable('x'); // true
obj.propertyIsEnumerable('toString'); // false

// 直接判断
obj.x !== undefined; // true
obj.y !== undefined; // false
obj.toString !== undefined; // true

// in 可以区分不存在的属性和存在但被设置为 undefined 的属性
let o = { x: undefined }; // 把属性显式设置为 undefined
o.x !== undefined // => false
o.y !== undefined // => false
"x" in o // => true
"y" in o // => false
delete o.x; // 删除属性 x
"x" in o // => false
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
上次更新: 2/21/2023, 9:39:49 PM