ES6中对象新增了哪些扩展?

简介: ES6中,当对象键名与对应值名相等的时候,可以进行简写

一、属性的简写

ES6中,当对象键名与对应值名相等的时候,可以进行简写

const baz = {foo:foo}
// 等同于
const baz = {foo}

方法也能够进行简写

const o = {
  method() {
    return "Hello!";
  }
};
// 等同于
const o = {
  method: function() {
    return "Hello!";
  }
}

二、扩展运算符的应用

解构赋值中,未被读取的可遍历的属性,分配到指定的对象上面

let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 };
x // 1
y // 2
z // { a: 3, b: 4 }

注意:解构赋值必须是最后一个参数,否则会报错


解构赋值是浅拷贝

let obj = { a: { b: 1 } };
let { ...x } = obj;
obj.a.b = 2; // 修改obj里面a属性中键值
x.a.b // 2,影响到了结构出来x的值

三、对象新增的方法

关于对象新增的方法,分别有以下:

Object.is()

Object.assign()

Object.getOwnPropertyDescriptors()

Object.setPrototypeOf(),Object.getPrototypeOf()

Object.keys(),Object.values(),Object.entries()

Object.fromEntries()

Object.is()

严格判断两个值是否相等,与严格比较运算符(===)的行为基本一致,不同之处只有两个:一是+0不等于-0,二是NaN等于自身

+0 === -0 //true
NaN === NaN // false
Object.is(+0, -0) // false
Object.is(NaN, NaN) // true

Object.assign()

Object.assign()方法用于对象的合并,将源对象source的所有可枚举属性,复制到目标对象target

Object.assign()方法的第一个参数是目标对象,后面的参数都是源对象

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

注意:Object.assign()方法是浅拷贝,遇到同名属性会进行替换


Object.getOwnPropertyDescriptors()

返回指定对象所有自身属性(非继承属性)的描述对象

const obj = {
    foo: 123,
    get bar() {
        return 'abc'
    }
};
console.log(Object.getOwnPropertyDescriptors(obj));//{foo: {…}, bar: {…}}

Object.setPrototypeOf(),Object.getPrototypeOf()

Object.setPrototypeOf()


Object.setPrototypeOf方法用来设置一个对象的原型对象

Object.setPrototypeOf(object, prototype)
// 用法
const o = Object.setPrototypeOf({}, null);

Object.getPrototypeOf()


用于读取一个对象的原型对象

Object.getPrototypeOf(obj);

Object.keys(),Object.values(),Object.entries()

Object.keys()

返回自身的(不含继承的)所有可遍历(enumerable)属性的键名的数组

var obj = { foo: 'bar', baz: 42 };
console.log(Object.keys(obj));// ["foo", "baz"]

Object.values()

返回自身的(不含继承的)所有可遍历(enumerable)属性的键对应值的数组

const obj = { foo: 'bar', baz: 42 };
console.log(Object.values(obj));// ["bar", 42]

Object.entries()

返回一个对象自身的(不含继承的)所有可遍历(enumerable)属性的键值对的数组

const obj = { foo: 'bar', baz: 42 };
console.log(Object.entries(obj));// [ ["foo", "bar"], ["baz", 42] ]

Object.fromEntries()

用于将一个键值对数组转为对象

console.log(
Object.fromEntries([
    ['foo', 'bar'],
    ['baz', 42]
]));// { foo: "bar", baz: 42 }


相关文章
|
1月前
|
网络架构
ES6中数组新增了哪些扩展?
ES6中数组新增了哪些扩展?
50 1
|
1月前
|
JSON 前端开发 JavaScript
ES6(2015)-ES13(2022)新增特性大总结
ES6(2015)-ES13(2022)新增特性大总结
56 0
|
1月前
ES6对象新增了哪些扩展?
ES6对象新增了哪些扩展?
41 0
|
1月前
|
网络架构
ES6函数新增了哪些扩展?
ES6函数新增了哪些扩展?
34 0
|
7月前
ES6对象扩展
ES6对象扩展
26 0
|
9月前
|
JavaScript 前端开发
ES6新增特性学习
ES6新增特性学习
|
10月前
|
网络架构
ES6中函数新增了哪些扩展?
ES6允许为函数的参数设置默认值
|
10月前
|
网络架构
ES6中数组新增了哪些扩展?
ES6通过扩展元素符…,好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列
|
10月前
|
存储 前端开发 JavaScript
ES6新特性。对象、数组新增方法
ES6新特性。对象、数组新增方法
143 0