ES6 对象的新增方法
2024-01-22 02:28:45
ES6 对象的新增方法
ES6 为 JavaScript 引入了一些新增的 对象方法 和 集合类型 ,这些新增内容可以让你在处理对象和数据结构时,拥有更加丰富、灵活和强大的工具。本文将一一介绍这些新特性。
1. Object.assign() 方法
Object.assign() 方法用于将一个或多个源对象的可枚举属性拷贝到目标对象,最后返回目标对象。它类似于 jQuery.extend()
方法,但比后者更加强大和灵活。
用法:
var obj1 = {name: 'John', age: 30};
var obj2 = {city: 'New York', country: 'USA'};
Object.assign(obj1, obj2);
console.log(obj1); // { name: 'John', age: 30, city: 'New York', country: 'USA' }
2. Object.is() 方法
Object.is() 方法用于比较两个值是否严格相等(===),包括 NaN 和 +0
-0
的比较 ,而 ===
运算符对这两种情况会返回 false
。
用法:
console.log(Object.is(1, 1)); // true
console.log(Object.is('a', 'a')); // true
console.log(Object.is(true, true)); // true
console.log(Object.is(false, false)); // true
console.log(Object.is(NaN, NaN)); // true
console.log(Object.is(+0, -0)); // true
console.log(Object.is([], [])); // false
console.log(Object.is({}, {})); // false
3. Object.getOwnPropertySymbols() 方法
Object.getOwnPropertySymbols() 方法用于返回一个数组,其中包含了对象的所有 Symbol 属性键名 。Symbol 是 ES6 中引入的新数据类型,它可以被用来作为对象的属性键名,Symbol 值是唯一的,并且不能被覆盖或枚举。
用法:
var obj = {};
var sym = Symbol('foo');
obj[sym] = 'bar';
console.log(Object.getOwnPropertySymbols(obj)); // [Symbol(foo)]
4. Object.values() 方法
Object.values() 方法用于返回一个数组,其中包含了对象的所有 可枚举属性值 。
用法:
var obj = {name: 'John', age: 30, city: 'New York'};
console.log(Object.values(obj)); // ['John', 30, 'New York']
5. Object.entries() 方法
Object.entries() 方法用于返回一个数组,其中包含了对象的所有 可枚举属性键值对 。
用法:
var obj = {name: 'John', age: 30, city: 'New York'};
console.log(Object.entries(obj)); // [['name', 'John'], ['age', 30], ['city', 'New York']]
ES6 集合类型
ES6 还引入了四种新的集合类型:
- Set
- WeakSet
- Map
- WeakMap
这些集合类型在特性和用途上都有所不同,下面分别介绍。
1. Set
Set 是一个无序、唯一元素集合。它和 Array 的主要区别在于:
- Set 中的元素是唯一的,不会出现重复的元素。
- Set 没有索引,无法使用下标来访问元素。
- Set 可以存储任何类型的值,包括对象和函数。
用法:
var set = new Set();
set.add(1);
set.add(2);
set.add(3);
set.add('foo');
set.add({});
console.log(set); // Set { 1, 2, 3, 'foo', {} }
2. WeakSet
WeakSet 是一个无序、唯一元素集合,但只允许存储对象 。和 Set 的区别在于:
- WeakSet 中的元素是弱引用,这意味着当对象被垃圾回收时,WeakSet 中对该对象的引用也会被自动删除。
- WeakSet 没有索引,无法使用下标来访问元素。
用法:
var weakSet = new WeakSet();
var obj = {};
weakSet.add(obj);
console.log(weakSet.has(obj)); // true
obj = null;
console.log(weakSet.has(obj)); // false
3. Map
Map 是一个键值对集合。它和 Object 的主要区别在于:
- Map 的键可以是任何类型的值,包括对象和函数。
- Map 的值可以是任何类型的值,包括对象和函数。
- Map 中的键值对是有序的,可以迭代。
用法:
var map = new Map();
map.set('name', 'John');
map.set(1, 'One');
map.set(true, 'True');
console.log(map); // Map { 'name' => 'John', 1 => 'One', true => 'True' }
4. WeakMap
WeakMap 是一个键值对集合,但只允许存储对象作为键 。和 Map 的区别在于:
- WeakMap 中的键是弱引用,这意味着当对象被垃圾回收时,WeakMap 中对该对象的引用也会被自动删除。
- WeakMap 中的值可以是任何类型的值,包括对象和函数。
用法:
var weakMap = new WeakMap();
var obj = {};
weakMap.set(obj, 'foo');
console.log(weakMap.get(obj)); // 'foo'
obj = null;
console.log(weakMap.get(obj)); // undefined
总结
ES6 中新增的对象方法和集合类型为 JavaScript 带来了更加强大的数据结构处理能力,这些特性在实际开发中可以帮助我们编写出更加健壮、灵活的代码。