小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
摘要
ES6 是 ECMAScript 6.0 的简称,是 JavaScript 语言的下一代标准。ECMAScript 和 JavaScript 的关系是,前者是后者的规格,后者是前者的一种实现。
对象的新增方法
Object.is()
解决的问题:ES5 比较两个值是否相等时只有两个运算符:== 和 ===。
== 会自动转换数据类型
let a = '1' + 1
console.log(a) // "11"
=== 的 NaN 不等于自身,+0 等于 -0
用法:
Object.is(+0, -0)
object.is(NaN, NaN)
object.assign()
Object.assign(target, source1, source2...) 方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target);
const target = { a: 1 }
const source1 = { b: 2 }
const source2 = { c: 3 }
Object.assign(target, source1, source2)
// { a:1, b:2, c:3 }
注意:
- 参数不是对象,会先转换成对象
- 首参数如果是
null和undefined,会报错
// 报错
Object.assign(null)
Object.assign(undefined)
// 不报错
Object.assign(a: 1, null)
Object.assign(a: 1, undefined)
Object.assign()是浅拷贝,源对象某个属性值是对象的话,目标对象拷贝得到的是这个对象的引用;- 同名属性会替换
const target = { a: { b: 'c', d: 'e' } }
const source = { a: { b: 'hello' } }
Object.assign(target, source)
// { a: { b: 'hello' } }
Object.getOwnPropertyDescriptors()
__proto__属性,Object.setPrototypeOf(),Object.getPrototypeOf()
Object.keys()
返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键名。
let obj = { foo: 'bar', baz: 42 }
Object.keys(obj)
// ["foo", "baz"]
Object.values()
返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值。
let obj = { foo: 'bar', baz: 42 }
Object.values(obj)
// ["bar", 42]
Object.entries()
返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值对数组。
let obj = { foo: 'bar', baz: 42 }
Object.entries(obj)
// [["foo", "bar"], ["baz", 42]]
Object.fromEntries()
Object.entries() 的逆操作,用于将一个键值对数组转为对象。
Object.fromEntries([
["foo", "bar"],
["baz", 42]
])
// { foo: "bar", baz: 42 }