JS中Object方法大全

本文介绍了JavaScript中Object对象的一系列核心方法,如keys、values、entries用于获取属性名、值和键值对,hasOwnProperty检查对象是否包含特定属性,assign实现对象属性拷贝,freeze冻结对象,is进行值的严格比较,getOwnPropertyDescriptor获取属性描述符,setPrototypeOf改变对象的原型,create创建新对象并指定原型,fromEntries构建对象,defineProperties和defineProperty定义对象属性,getOwnPropertyNames和getOwnPropertySymbols获取非Symbol属性名和Symbol属性名,以及isExtensible、preventExtensions、isSealed和seal控制对象扩展和密封状态。

Object.keys(obj)

Object.keys(obj) :返回一个对象所有可枚举的属性的名称组成的数组

const obj = { a: 1, b: 2, c: 3 };
const keys = Object.keys(obj);
console.log(keys); // ['a', 'b', 'c']

Object.values(obj) es8

Object.values(obj):返回一个对象所有可枚举的属性的组成的数组。

const obj = { a: 1, b: 2, c: 3 };
const values = Object.values(obj);
console.log(values); // [1, 2, 3]

Object.entries(obj) es8

Object.entries(obj):返回一个对象所有可枚举的属性的键值对组成的数组

const obj = { a: 1, b: 2, c: 3 };
const entries = Object.entries(obj);
console.log(entries); // [['a', 1], ['b', 2], ['c', 3]]

Object.hasOwnProperty(prop)

Object.hasOwnProperty(prop):判断一个对象是否有指定的属性。

const obj = { a: 1, b: 2, c: 3 };
const hasProp = obj.hasOwnProperty('a');
console.log(hasProp); // true

Object.assign(target, source1, [source2, …])

Object.assign(target, source1, [source2, …]):将一个或多个对象的属性拷贝到目标对象。

const obj1 = { a: 1 };
const obj2 = { b: 2 };
const obj3 = { c: 3 };
const result = Object.assign(obj1, obj2, obj3);
console.log(result); // { a: 1, b: 2, c: 3 }

Object.freeze(obj)

Object.freeze(obj):冻结一个对象,使其无法添加、删除、修改属性。

const obj = { a: 1, b: 2 };
Object.freeze(obj);
obj.c = 3; // 添加属性无效
obj.a = 100; // 修改属性无效
delete obj.b; // 删除属性无效
console.log(obj); // { a: 1, b: 2 }

Object.is(obj1, obj2)

Object.is(obj1, obj2):判断两个值是否严格相等

console.log(Object.is(1, 1)); // true
console.log(Object.is('foo', 'foo')); // true
console.log(Object.is({}, {})); // false
console.log(Object.is(+0, -0)); // false
console.log(Object.is(NaN, NaN)); // true

Object.getOwnPropertyDescriptor(obj, prop) es8

Object.getOwnPropertyDescriptor(obj, prop):获取指定属性的属性描述符

const obj = { value: 123 };
const descriptor = Object.getOwnPropertyDescriptor(obj, 'value');
console.log(descriptor); // { value: 123, writable: true, enumerable: true, configurable: true }

Object.setPrototypeOf(obj, prototype)

Object.setPrototypeOf(obj, prototype):设置对象的原型(即设置其继承关系)。

const obj1 = {};
const obj2 = { value: 123 };
Object.setPrototypeOf(obj1, obj2);
console.log(obj1.__proto__ === obj2); // true

Object.create(proto, [propertiesObject])

Object.create(proto, [propertiesObject]):使用指定的原型创建一个新的对象。

const obj1 = { a: 1 };
const obj2 = Object.create(obj1, { b: { value: 2 }});
console.log(obj2.a); // 1
console.log(obj2.b); // 2

Object.fromEntries(iterable) es10

Object.fromEntries(iterable):从一个可迭代对象创建一个新的对象。

const entries = [['a', 1], ['b', 2]];
const obj = Object.fromEntries(entries);
console.log(obj); // { a: 1, b: 2 }

Object.defineProperties(obj, props)

Object.defineProperties(obj, props):定义一个或多个属性的描述符

const obj = {};
Object.defineProperties(obj, {
  a: { value: 1 },
  b: { value: 'hello' }
});
console.log(obj.a); // 1
console.log(obj.b); // 'hello'

Object.defineProperty(obj, prop, descriptor)

Object.defineProperty(obj, prop, descriptor):定义一个属性的描述符

const obj = {};
Object.defineProperty(obj, 'a', {
  value: 123,
  writable: false,
  enumerable: true,
  configurable: false
});
console.log(obj.a); // 123
obj.a = 456; // 不可写,赋值无效
console.log(obj.a); // 123
for (let key in obj) { console.log(key); } // 可枚举
delete obj.a; // 不可配置,删除无效
console.log(obj.a); // 123

Object.getOwnPropertyNames(obj)

Object.getOwnPropertyNames(obj):返回一个对象上所有的属性名(不包括Symbol)。

const obj = { a: 1, b: 2 };
const keys = Object.getOwnPropertyNames(obj);
console.log(keys); // ['a', 'b']

Object.getOwnPropertySymbols(obj)

Object.getOwnPropertySymbols(obj):返回一个对象上所有的Symbol属性名

const sym = Symbol('key');
const obj = { a: 1, [sym]: 10 };
const symbols = Object.getOwnPropertySymbols(obj);
console.log(symbols); // [Symbol('key')]

Object.isExtensible(obj)

Object.isExtensible(obj):判断一个对象是否可扩展(是否可以添加新属性)。

const obj1 = { a: 1 };
const obj2 = { b: 2 };
console.log(Object.isExtensible(obj1)); // true
Object.preventExtensions(obj1);
console.log(Object.isExtensible(obj1)); // false
console.log(Object.isExtensible(obj2)); // true

Object.preventExtensions(obj)

Object.preventExtensions(obj):防止一个对象被扩展(不能再添加新属性)。

const obj = { a: 1 };
Object.preventExtensions(obj);
obj.b = 2;
console.log(obj); // { a: 1 }

Object.isSealed(obj)

Object.isSealed(obj):判断一个对象是否被封闭(不能再添加、删除属性)。

const obj = Object.freeze({ a: 1 });
console.log(Object.isSealed(obj)); // true

Object.seal(obj)

Object.seal(obj):防止一个对象被封闭(不能再添加、删除属性,但可以修改属性值)。

const obj = { a: 1 };
Object.seal(obj);
obj.b = 2; // 无法添加新属性
delete obj.a; // 无法删除属性
obj.a = 100; // 可以修改属性值
console.log(obj); // { a: 100 }
### JavaScriptObject 对象的方法列表 在 JavaScript 中,`Object` 是一个基础的对象构造函数,提供了许多用于操作对象的静态方法。以下是 `Object` 的常用方法及其功能描述: #### 静态方法 1. **Object.assign(target, ...sources)** 用于将多个源对象的属性复制到目标对象上[^1]。 2. **Object.create(proto[, propertiesObject])** 创建一个新的对象,并指定其原型和可选的属性对象。 3. **Object.defineProperty(obj, prop, descriptor)** 定义或修改对象的一个已有属性,或者添加新属性并返回此对象[^2]。 4. **Object.defineProperties(obj, props)** 使用定义器一次设置多个属性。 5. **Object.entries(obj)** 返回给定对象自身的键值对数组。 6. **Object.freeze(obj)** 冻结一个对象,使其不可被更改。 7. **Object.getOwnPropertyDescriptor(obj, prop)** 获取特定属性的特性描述符。 8. **Object.getOwnPropertyDescriptors(obj)** 获取所有自有属性的特性描述符集合。 9. **Object.getOwnPropertyNames(obj)** 返回由对象自身枚举属性组成的数组,包括不可枚举属性。 10. **Object.keys(obj)** 返回由对象自身可枚举属性名组成的数组。 11. **Object.values(obj)** 返回对象自身的值数组。 12. **Object.getPrototypeOf(obj)** 返回指定对象的原型(内部 [[Prototype]] 属性)。 13. **Object.setPrototypeOf(obj, prototype)** 设置对象的原型为指定值。 14. **Object.is(value1, value2)** 判断两个值是否严格相等,类似于 `===` 运算符,但更精确。 15. **Object.seal(obj)** 密封一个对象,防止新增或删除属性,但仍允许修改现有属性的值。 #### 实例方法 除了上述静态方法外,`Object.prototype` 提供了一些实例方法,这些方法可以通过任何对象调用: 1. **obj.hasOwnProperty(prop)** 检查对象是否有某个自己的属性(而非继承自原型链上的属性)。 2. **obj.propertyIsEnumerable(prop)** 判断某属性是否可以被 `for...in` 循环列举出来。 3. **obj.toLocaleString([reservations])** 调用对象的本地化字符串表示形式。 4. **obj.toString()** 返回对象的字符串表示形式,默认情况下会显示 `[object Object]`。 5. **obj.valueOf()** 返回对象本身的原始值。 --- ### 示例代码展示部分方法的应用场景 以下是一些常见方法的实际应用案例: ```javascript // Object.assign 示例 const target = { a: 1 }; const source = { b: 2 }; Object.assign(target, source); // 结果:{ a: 1, b: 2 } // Object.keys 和 Object.values 示例 const obj = { name: "Alice", age: 25 }; console.log(Object.keys(obj)); // ["name", "age"] console.log(Object.values(obj)); // ["Alice", 25] // Object.freeze 示例 const frozenObj = { key: "value" }; Object.freeze(frozenObj); frozenObj.key = "newValue"; // 不会产生错误,但不会生效 console.log(frozenObj.key); // 输出仍是 "value" ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jet_closer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值