Object

序列化和反序列化

  • JSON.parse()JSON.stringify() 分别为对象的序列化和反序列化
  • 可以重写对象的 toJSON() 方法以覆盖覆盖该对象默认的反序列化行为
var obj = {
  foo: 'foo',
  toJSON: function () {
    return 'bar';
  }
}
JSON.stringify(obj) //'"bar"'
JSON.stringify({x:obj}) //'{"x":"bar"}'

对象的属性描述符

一个属性描述符是一个记录,由下面属性当中的某些组成的:

  • value 该属性的值(仅针对数据属性描述符有效)
  • writable 当且仅当属性的值可以被改变时为true。(仅针对数据属性描述有效)
  • get 获取该属性的访问器函数(getter)。如果没有访问器, 该值为undefined。(仅针对包含访问器或设置器的属性描述有效)
  • set 获取该属性的设置器函数(setter)。 如果没有设置器, 该值为undefined。(仅针对包含访问器或设置器的属性描述有效)
  • configurable 当且仅当指定对象的属性描述可以被改变或者属性可被删除时,为true。
  • enumerable 当且仅当指定对象的属性可以被枚举出时,为 true。

Object 与其他类型的数据之间的转换

根据键值数组对创建对象

使用 Array.reduce() 来创建和组合键值对。

const objectFromPairs = arr => arr.reduce((a, v) => (a[v[0]] = v[1], a), {});
objectFromPairs([['a',1],['b',2]]) // {a: 1, b: 2}

对象转化为键值对

使用 Object.keys() 和 Array.map() 遍历对象的键并生成一个包含键值对的数组。

const objectToPairs = obj => Object.keys(obj).map(k => [k, obj[k]]);
objectToPairs({a: 1, b: 2}) // [['a',1],['b',2]])

或者

const objectToPairs = obj => Object.entries(obj).map((k, v) => [k, v]);
objectToPairs({a: 1, b: 2}) // [['a',1],['b',2]])

深入理解 Object

对象的属性操作:

参考资料

MIT Licensed | Copyright © 2018-present 滇ICP备16006294号

Design by Quanzaiyu | Power by VuePress