Skip to content

JS中的对象

531字约2分钟

对象

2024-06-06

对象是一个复合值,它汇聚多个值(原始值和其他对象)并允许我们按名字存储和获取这些值。对象是一个属性的无序集合,每个属性都有名字和值。

在 javascript 中,任何不是字符串、数值、符号或 truenullundefinefalse的值都是对象。即使字符串、数值、布尔值不是对象,他们的行为也类似不可修改的对象。

除了名字和值之外,每个属性还有三个特性:

writeable(可写)特性指定是否可以修改设置属性的值。 enumerable(可枚举)特性指定是否可以在 for/in 循环中返回属性的名字 configurable(可配置)特性指定是否可以删除属性,以及是否可修改其特性

创建对象

1.字面量

const obj = {}

2.new

const = new Object()

3.create

const obj = Object.create({ a: 1 }) // 第一个参数作为新对象的原型

没有原型的对象

const obj = Object.create(null) // 没有原型的对象

测试属性

in 操作符,要求左边是一个属性名,右边是一个对象。如果对象有包含响应名字的自有属性或继承属性,将返回 true

const obj = { a: 1 }
"a" in obj // true
"b" in obj // false
"toString" in obj // obj继承了toString方法

对象的hasOwnProperty方法用于测试对象是否给定名字的属性,对继承的属性,它返回 false

const obj = { a: 1 }
o.hasOwnProperty("a") // true
o.hasOwnProperty("toString") // false, toString是继承来的

propertyIsEnumerable() 如果传入的属性名是自由属性且这个属性是 enumerable 的

const obj = { a: 1 }
obj.propertyIsEnumerable("a") // true
obj.propertyIsEnumerable("toString") // false, 不是自有的
Object.prototype.propertyIsEnumerable("toString") // false, 不可枚举的

Object.keys 返回对象可枚举自由属性的数组,不包含符号 Object.getOwnPropertyNames,与 Object.keys 类似,但也会返回不可枚举自有属性名的数组,只要它们的名字是字符串 Object.getOwnPropertySymbols,返回名字是符号的自有属性,无论是否可枚举 Reflect.ownKeys,返回所有属性名