前端Object 用法总结

162 阅读2分钟

前端Object 用法总结

Object是Javascript的重要数据结构,ES6中有进行扩展。

对象(Object)扩展

属性的简介表示法: 即属性名就是变量名,属性值就是变量值

const foo = 'bar';
const baz = {foo};
baz // {foo: "bar"}

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

属性名表达式: 定义对象属性的两种方法

  • obj.foo = true; —— 使用标识符作为属性名
  • obj['a' + 'bc'] = 123; —— 使用表达式作为属性名,将表达式放在方括号内时,如下:
    let obj = {
     [propKey]: true,
     ['a' + 'bc']: 123
   }

定义方法时也是如此

方法的name属性: 函数的name属性,返回函数名。方法也是函数,因此有name属性。

属性的可枚举性和遍历

对象的每一个属性都有一个描述属性(Descriptor),用来控制属性的行为。Object.getOwnPropertyDescriptor方法可以获取该属性的描述对象。

let obj = { foo: 123 };
Object.getOwnPropertyDescriptor(obj, 'foo')
//  {
//    value: 123,
//    writable: true,
//    enumerable: true,
//    configurable: true
//  }

描述对象的enumerable属性,称为可枚举性,如果为false,表示某些操作忽略当前属性。

目前,有四个操作会忽略enumerablefalse的属性

  • for...in循环:只遍历对象自身的和继承的可枚举属性
  • Object.keys():返回对象自身的所有可枚举属性的键名
  • JSON.stringIfy():只串行化对象自身的可枚举属性
  • Object.assign():忽略enumerable为false的属性,只拷贝对象自身的可枚举属性

实际操作中尽量不要用for...in循环,而用Object.keys()代替。

属性的遍历

5中遍历对象属性的方法

  • for...infor...in循环遍历对象自身的和继承的可枚举属性(不含 Symbol 属性)
  • Object.keys(obj)Object.keys返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含 Symbol 属性)的键名。 —— 推荐使用

image.png

  • Object.getOwnPropertyNames(obj)Object.getOwnPropertyNames返回一个数组,包含对象自身的所有属性(不含 Symbol 属性,但是包括不可枚举属性)的键名。 image.png

  • Object.getOwnPropertySymbols(obj)Object.getOwnPropertySymbols返回一个数组,包含对象自身的所有 Symbol 属性的键名 —— 不常用 image.png

  • Reflect.ownKeys(obj)Reflect.ownKeys返回一个数组,包含对象自身的(不含继承的)所有键名,不管键名是 Symbol 或字符串,也不管是否可枚举。 —— 不常用

image.png

  • Object.setPrototypeOf(obj1,obj2):为对象设置原型链 将obj2设置为obj1的原型链。

image.png