对象
2020-09-26 本文已影响0人
懂会悟
1、属性的简洁表示法
ES6 允许直接写入变量和函数,作为对象的属性和方法。此时,属性名为变量名, 属性值为变量的值。
// 对象
const foo = 'bar'
const baz = {foo}
baz // {foo: "bar"}
// 等同于
const baz = {foo: foo}
function f(x, y) {
return {x, y}
}
// 等同于
function f(x, y) {
return {x: x, y: y}
}
const o = {
method() {
return "Hello!"
}
}
// 等同于
const o = {
method: function() {
return "Hello!"
}
}
2、属性的可枚举性与遍历
属性的可枚举性
对象的每个属性都有一个描述对象(Descriptor),用来控制该属性的行为。Object.getOwnPropertyDescriptor方法可以获取该属性的描述对象。描述对象的enumerable属性,称为”可枚举性“,如果该属性为false,就表示'不可枚举'某些操作会忽略当前属性
有四个操作会忽略enumerable为false的属性
- for...in循环:只遍历对象自身的和继承的可枚举的属性
- Object.keys():返回对象自身的所有可枚举的属性的键名
- JSON.stringify():只串行化对象自身的可枚举的属性
- Object.assign(): 忽略enumerable为false的属性,只拷贝对象自身的可枚举的属性
属性的遍历
ES6 一共有5种方法可以遍历对象的属性
- for...in循环遍历对象自身的和继承的可枚举属性(不含 Symbol 属性)
- Object.keys返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含 Symbol 属性)的键名
- Object.getOwnPropertyNames返回一个数组,包含对象自身的所有属性(不含 Symbol 属性,但是包括不可枚举属性)的键名
- Object.getOwnPropertySymbols返回一个数组,包含对象自身的所有 Symbol 属性的键名
- Reflect.ownKeys返回一个数组,包含对象自身的所有键名,不管键名是 Symbol 或字符串,也不管是否可枚举
const obj = {name: 'tom', age: 18
Reflect.ownKeys(obj)
// ["name", "age"]
3、对象的新增方法
1、Object.assign()
Object.assign():用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。返回目标对象。
let target = { name: 'Tom', age: 20 }
let source = { work: 'engineer' }
let result = Object.assign(target, source)
console.log(target)
// { name: 'Tom', age: 20, work: 'engineer' }
console.log(source)
// { work: 'engineer' }
console.log(result)
// { name: 'Tom', age: 20, work: 'engineer' }
2、Object.is()
Object.is():用于判断两个值是否相等,包含number、string、Object.返回布尔值
let target = { name: 'Tom', age: 20 }
let source = { work: 'engineer' }
let result = Object.assign(target, source)
console.log(Object.is(target, result))
// true-
3、Object.keys()、Object.values()、Object.entries()
- Object.keys():返回一个给定对象的自身可枚举属性key组成的数组
- Object.values():返回一个给定对象自身所有可枚举属性value的数组
- Object.entries():返回一个给定对象自身可枚举属性的键值对数组
let info = { name: 'Tom', age: 18 }
console.log(Object.keys(info))
// [ 'name', 'age' ]
console.log(Object.values(info))
// [ 'Tom', 18 ]
console.log(Object.entries(info))
// [ [ 'name', 'Tom' ], [ 'age', 18 ] ]