在 JavaScript 中,`Object`是一个内置的构造函数,用于创建对象。 `Object`构造函数会根据给定的参数创建对象,具体规则如下: - 如果给定值是`null`或`undefined`,将会创建并返回一个空对象。 - 如果传进去的是一个基本类型的值,则会构造其对应的包装类型的对象。例如,传入数值会创建一个`Number`对象,传入字符串会创建一个`String`对象等。 - 如果传进去的是引用类型的值,仍然会返回这个值,并且复制后的变量保有和源对象相同的引用地址。 当以非构造函数形式被调用时,即不使用`new`关键字时,`Object`的行为等同于`new Object()`。 `Object`构造函数具有一些属性和方法,以下是部分常见的属性和方法: **属性**: - `length`:其值为 1。 - `prototype`:所有的对象都继承自`Object.prototype`的属性和方法。 - 该属性的三个特性均为`false`,即`writable: false`、`enumerable: false`、`configurable: false`。 - enumerable可枚举的 **方法**: - `Object.assign()`:用于将所有可枚举属性的值从一个或多个源对象复制到目标对象,并返回目标对象。如果目标对象中的属性具有相同的键,则属性将被源对象中的属性覆盖。后面的源对象的属性将类似地覆盖前面的源对象的属性。 - `Object.create()`:使用指定的原型对象和属性创建一个新对象。 - `Object.defineProperty()`:在对象上定义或修改一个自有属性,并返回这个对象。通过其属性值控制新定义的属性并且可以修改对象上原有的属性值。 - `Object.defineProperties()`:直接在一个对象上定义新的属性或修改多个现有属性,并返回该对象。 - `Object.getOwnPropertyDescriptor()`:获取指定对象指定的自有属性的属性描述符。 - `Object.getOwnPropertyNames()`:返回一个数组,包含对象所有自有的属性和方法(但不包括以`Symbol`值作为名称的属性)的字符串名。 - `Object.getOwnPropertySymbols()`:返回一个数组,包含给定对象所有自有的`Symbol`值的属性(包括不可枚举的`Symbol`值属性)。 - `Object.getPrototypeOf()`:用于获取指定对象的原型对象。 - `Object.setPrototypeOf()`:用于将指定对象的原型对象设置到一个新的对象或`null`。 - `Object.keys()`:返回一个数组,包含对象所有自有的可枚举的属性名。数组中属性名的排列顺序和使用`for...in`循环遍历该对象时返回的顺序一致,属性名不包括`Symbol`值的属性名。 - `Object.values()`:返回一个数组,包含了给定对象所有可枚举属性的值,但不包括`Symbol`值属性的值。 - `Object.entries()`:返回一个数组,数组的每一个元素是对象的自有的可枚举属性的键值对,但不包括`Symbol`值的属性。形如`[(key1, value1), (key2, value2),... (keyn, valuen)]`。 - `Object.preventExtensions()`:用于将一个对象设置为不可扩展,也就是不能再为其添加新的属性。 - `Object.isExtensible()`:用于判断一个对象是否是可扩展的。 - `Object.seal()`:用于密封一个对象,即将对象设置为不可扩展,同时将对象的所有自有属性都设置为不可配置(包括`Symbol`值的属性)。密封后不能给对象添加新的属性和方法,也不能删除现有的属性和方法、不能修改现有属性和方法的配置,但如果对象的属性和方法是可写的,那该属性和方法仍然可以修改。 - `Object.isSealed()`:用于判断一个对象是否是已密封的状态。密封状态是指一个对象是不可扩展的,且所有自有属性和方法都是不可配置的。 - `Object.freeze()`:用于冻结一个对象。冻结后的对象设置为不可扩展、其所有自有的属性和方法(包括`Symbol`值的属性和方法)配置为不可配置、不可写。 - `Object.isFrozen()`:用于判断一个对象是否已冻结。 以下是使用`Object`构造函数创建对象并使用其方法的示例代码: ```javascript let person = new Object(); person.name = 'John'; person.age = 30; // 使用 Object.assign() 复制属性 let newPerson = Object.assign({}, person); // 使用 Object.defineProperty() 定义新属性或修改现有属性 Object.defineProperty(person, 'isAdult', { value: person.age >= 18, enumerable: true }); // 使用其他方法... ```
JavaScript中的Object
最新推荐文章于 2024-08-02 14:21:03 发布