温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

es6中object新增了什么方法

发布时间:2022-10-24 16:57:30 来源:亿速云 阅读:157 作者:iii 栏目:web开发

ES6中Object新增了什么方法

ES6(ECMAScript 2015)是JavaScript语言的一次重大更新,引入了许多新特性,极大地提升了开发效率和代码的可读性。在ES6中,Object对象也新增了一些实用的方法,这些方法使得开发者能够更方便地操作对象。本文将详细介绍ES6中Object新增的方法,并通过示例代码帮助读者更好地理解这些方法的使用场景。

1. Object.assign()

Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象,并返回目标对象。

语法

Object.assign(target, ...sources)
  • target: 目标对象。
  • sources: 源对象(可以是一个或多个)。

示例

const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };

const result = Object.assign(target, source);

console.log(result); // { a: 1, b: 4, c: 5 }
console.log(target); // { a: 1, b: 4, c: 5 }

注意事项

  • Object.assign() 是浅拷贝,如果源对象的属性值是对象,那么拷贝的是引用。
  • 如果目标对象和源对象有相同的属性,源对象的属性会覆盖目标对象的属性。

2. Object.is()

Object.is() 方法用于比较两个值是否严格相等,与 === 操作符类似,但在处理 NaN+0-0 时有区别。

语法

Object.is(value1, value2)

示例

console.log(Object.is('foo', 'foo')); // true
console.log(Object.is({}, {})); // false

console.log(Object.is(NaN, NaN)); // true
console.log(NaN === NaN); // false

console.log(Object.is(+0, -0)); // false
console.log(+0 === -0); // true

注意事项

  • Object.is() 在处理 NaN+0-0 时与 === 不同,因此在某些特殊情况下更为准确。

3. Object.setPrototypeOf()

Object.setPrototypeOf() 方法用于设置一个对象的原型(即内部 [[Prototype]] 属性)到另一个对象或 null

语法

Object.setPrototypeOf(obj, prototype)
  • obj: 要设置原型的对象。
  • prototype: 该对象的新原型(一个对象或 null)。

示例

const obj = {};
const proto = { foo: 'bar' };

Object.setPrototypeOf(obj, proto);

console.log(obj.foo); // 'bar'

注意事项

  • 修改对象的原型可能会影响性能,因此应谨慎使用。
  • 在大多数情况下,使用 Object.create() 创建对象并设置原型是更好的选择。

4. Object.getPrototypeOf()

Object.getPrototypeOf() 方法用于获取指定对象的原型(即内部 [[Prototype]] 属性)。

语法

Object.getPrototypeOf(obj)

示例

const obj = {};
const proto = { foo: 'bar' };

Object.setPrototypeOf(obj, proto);

console.log(Object.getPrototypeOf(obj) === proto); // true

注意事项

  • Object.getPrototypeOf() 返回的是对象的原型,而不是 __proto__ 属性。

5. Object.keys()

Object.keys() 方法返回一个由给定对象的自身可枚举属性组成的数组。

语法

Object.keys(obj)

示例

const obj = { a: 1, b: 2, c: 3 };

console.log(Object.keys(obj)); // ['a', 'b', 'c']

注意事项

  • Object.keys() 只返回对象自身的可枚举属性,不包括继承的属性。

6. Object.values()

Object.values() 方法返回一个由给定对象的自身可枚举属性值组成的数组。

语法

Object.values(obj)

示例

const obj = { a: 1, b: 2, c: 3 };

console.log(Object.values(obj)); // [1, 2, 3]

注意事项

  • Object.values() 只返回对象自身的可枚举属性值,不包括继承的属性值。

7. Object.entries()

Object.entries() 方法返回一个由给定对象的自身可枚举属性的键值对组成的数组。

语法

Object.entries(obj)

示例

const obj = { a: 1, b: 2, c: 3 };

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

注意事项

  • Object.entries() 只返回对象自身的可枚举属性的键值对,不包括继承的属性。

8. Object.fromEntries()

Object.fromEntries() 方法将一个键值对列表转换为一个对象。

语法

Object.fromEntries(iterable)

示例

const entries = [['a', 1], ['b', 2], ['c', 3]];

const obj = Object.fromEntries(entries);

console.log(obj); // { a: 1, b: 2, c: 3 }

注意事项

  • Object.fromEntries()Object.entries() 的逆操作。

9. Object.getOwnPropertySymbols()

Object.getOwnPropertySymbols() 方法返回一个由给定对象自身的所有 Symbol 属性组成的数组。

语法

Object.getOwnPropertySymbols(obj)

示例

const obj = {};
const sym = Symbol('foo');

obj[sym] = 'bar';

console.log(Object.getOwnPropertySymbols(obj)); // [Symbol(foo)]

注意事项

  • Object.getOwnPropertySymbols() 只返回对象自身的 Symbol 属性,不包括字符串属性。

10. Object.getOwnPropertyDescriptors()

Object.getOwnPropertyDescriptors() 方法返回一个对象的所有自身属性的描述符。

语法

Object.getOwnPropertyDescriptors(obj)

示例

const obj = {
  a: 1,
  get b() {
    return 2;
  }
};

console.log(Object.getOwnPropertyDescriptors(obj));
/*
{
  a: {
    value: 1,
    writable: true,
    enumerable: true,
    configurable: true
  },
  b: {
    get: [Function: get b],
    set: undefined,
    enumerable: true,
    configurable: true
  }
}
*/

注意事项

  • Object.getOwnPropertyDescriptors() 返回的对象包含所有自身属性的描述符,包括数据属性和访问器属性。

总结

ES6 为 Object 对象新增了许多实用的方法,这些方法使得开发者能够更方便地操作对象。本文详细介绍了 Object.assign()Object.is()Object.setPrototypeOf()Object.getPrototypeOf()Object.keys()Object.values()Object.entries()Object.fromEntries()Object.getOwnPropertySymbols()Object.getOwnPropertyDescriptors() 等方法的使用场景和注意事项。掌握这些方法将有助于提高代码的可读性和开发效率。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI