对象

作者: 懂会悟 | 来源:发表于2020-09-26 08:55 被阅读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 ] ]

相关文章

网友评论

      本文标题:对象

      本文链接:https://www.haomeiwen.com/subject/kbxosktx.html