关于es6中对象的扩展
Posted czy960731
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于es6中对象的扩展相关的知识,希望对你有一定的参考价值。
1.Object.is()
es5比较两个值是否相等,只有两个运算符,相等(==) 和 严格相等(===),他们都有缺点,前者会自动转换数据类型,后者的NaN不等于自身,以及+0 等于 -0。es6提出了Object.is()方法,它用来比较两个值是否相等,与严格运算符(===)的行为基本一致
Object.is(‘foo‘, ‘foo‘) //false Object.is({} , {}) //false
不同之处只有两个, Object.is(+0, -0) // true Object.is(NaN , NaN) // true
2.Object.assign()
Object.assign 方法用于将源对象的所有可枚举属性复制到目标对象
var target = { a: 1} var source = { b:2 } var source2 = { c: 3} Object.assign(target , source, source2) target // { a: 1, b: 2, c:3 } // 第一个参数是目标对象,后面的是源对象
注意:如果目标对象和源对象有重名属性, 或多个源对象有同名属性,则后面的属性会覆盖前面的属性
如果只有一个参数,Object.assign会直接返回该参数
var obj = { a: 1} Object.assign(obj) === obj
如果该参数不是对象,则会先转成对象,然后返回
typeof Object.assign(2) // ‘object‘
由于null 和 undefined 无法转成对象,所以如果将他们作为参数,就会报错, 如果他们不再首参数,便不会报错,会跳过他们;其他类型的值不再首参数也不会报错,但是除了,字符串会以数组的形式复制到目标对象,其他值不会产生效果。
var v1 = ‘abc‘ var v2 = true var v3 = 10 var obj = Object.assign({}, v1, v2, v3) obj // { "0": "a", "1": ‘b", "2": "c"}
注意:Object.assign 是浅拷贝
常见用途: 为对象添加属性、克隆对象、为对象添加方法、为属性制定默认值
3.Object.keys()
es5引入了Object.keys方法,返回一个数组,成员是参数对象自身(不含继承)所有可遍历(enumerable)属性的键名。
var obj = { foo: ‘bar‘, baz: 42} Object.keys(obj) // ["foo", "baz"]
4. Object.values()方法返回一个数组,成员是参数对象自身的所有(不含继承)可遍历
var obj = { foo: ‘bar‘, baz: 42} Object.values(obj) // ["bar", 42]
5.Object.entries
Object.entries返回一个数组成员是参数对象自身所有可遍历属性的键值对数组
var obj = { foo: ‘bar‘, baz: 42} Object.entries(obj) // [ ["foo", "bar"], ["baz", 42]]