Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

对象的新增方法(es6) #13

Open
YoursJoker opened this issue Aug 8, 2020 · 0 comments
Open

对象的新增方法(es6) #13

YoursJoker opened this issue Aug 8, 2020 · 0 comments

Comments

@YoursJoker
Copy link
Owner

ES6总结系列之 对象的新增方法 篇


1. Object.is() --比较两个值是否相等

Same-value equality(同值相等)
Object.is()与严格相等(===)的不同只有两处:

  1. +0不等于-0
Object.is(+0, -0)    //false
+0 === -0         //true
  1. NaN等于自身
Object.is(NaN, NaN)   //true
NaN === NaN        //false

2. Object.assign() --合并对象

①Object.assign(target, source1, source2)
②将源对象合并到目标对象,并返回目标对象

const target = { a: 1 };

const source1 = { b: 2 };
const source2 = { c: 3 };

Object.assign(target, source1, source2);
target // {a:1, b:2, c:3}

③注意事项:
1)浅拷贝,且只拷贝自身属性不拷贝继承的,symbol值也会被拷贝
2)只拷贝可枚举对象属性,当非首参数是(数值,字符串,布尔值)时,只有字符串会以数组的形式生效,因为只有字符串的包装对象,会产生可枚举属性

Object(true) // {[[PrimitiveValue]]: true}
Object(10)  //  {[[PrimitiveValue]]: 10}
Object('abc') // {0: "a", 1: "b", 2: "c", length: 3, [[PrimitiveValue]]: "abc"}

3)同名属性后面会覆盖前面
4)参数如果不是对象,就先转化为对象

typeof Object.assign(2) // "object"

5)首参数不能为null和undefined,因为无法转化为对象,会报错

Object.assign(undefined) // 报错
Object.assign(null) // 报错

6)非首参数如果是null和undefined,就会跳过,不会报错

3.Object.getOwnPropertyDescriptors() --返回自身属性的描述 对象

ES5 的Object.getOwnPropertyDescriptor(obj, key)方法会返回某个对象属性的描述对象
ES2017引入了 Object.getOwnPropertyDescriptors(obj) 返回自身属性的描述 对象

const obj = {
  foo: 123,
  get bar() { return 'abc' }
};

Object.getOwnPropertyDescriptors(obj)
// { foo:
//    { value: 123,
//      writable: true,
//      enumerable: true,
//      configurable: true },
//   bar:
//    { get: [Function: get bar],
//      set: undefined,
//      enumerable: true,
//      configurable: true } 
// }

4.__proto__属性,Object.setPrototypeOf(),Object.getPrototypeOf()

Object.setPrototypeOf(object, prototype)

①用来设置一个对象的原型对象(prototype),返回对象本身
②第一个参数如果不是对象,会转化为对象,由于返回的是第一个参数本身,所以数值,字符串,布尔值这个操作不会产生任何效果

Object.setPrototypeOf(1, {}) === 1 // true
Object.setPrototypeOf('foo', {}) === 'foo' // true
Object.setPrototypeOf(true, {}) === true // true

④undefined和null无法转为对象,所以如果第一个参数是undefined或null,就会报错。

Object.getPrototypeOf()

①Object.getPrototypeOf(obj),读取一个对象的原型对象

5.对象的遍历

Object.keys(obj)

①返回一个数组,由键名组成(自身,可枚举属性键名)

Object.values(obj)

①返回一个数组,由键值组成(自身,可枚举属性键值)

Object.entries(obj)

①返回一个数组,由键值对组成(自身,可枚举属性)

Object.fromEntries(arr)

Object.entries(o)的逆操作,将键值对数组转化为对象

Object.fromEntries([
  ['foo', 'bar'],
  ['baz', 42]
])
// { foo: "bar", baz: 42 }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant