对象(object)是 JavaScript 最重要的数据结构之一。vue
object 在es6中新增了不少便利的方法es6
在es6中容许直接写入变量和方法的名称直接做为对象的属性数组
let x =1 ,y=2 const obj ={x,y} console.log(obj) //{x: 1, y: 2}
这种写法等同于数据结构
let x = 1,y = 2 const obj = { 'x':x, 'y':y }
方法同理spa
const obj2 = { methods() { return { x, y } } } const obj3 = { methods:function() { return { x, y } } } console.log(obj2.methods()) //{x: 1, y: 2} console.log(obj3.methods()) //{x: 1, y: 2}
这种简洁写法在vue中用到的地方不少 好比导出和建立实例时等等code
另外就是es6中容许对象的属性用表达式对象
const item="item" const obj4 ={ "item":"hello" } console.log(obj4.item) // hello console.log(obj4[item]) // hello
可是属性名表达式和简洁表达法不能同时使用blog
会报错Uncaught SyntaxError: Unexpected token }或者干脆直接给你提示token
若是你的key值传进去的是一个对象的话那么他的key会默认转换成一个字符串 “[object Object]”ip
const item2 = { a: 1 }; const item3 = { b: 2 }; const obj5 = { [item2]: 'value', [item3]: 'value' }; console.log(obj5) // {[object Object]: "value"}
对象的方法里边有一个name属性能够点出来 用上边的例子说明
const obj5 = { [item2]: 'value', [item3]: 'value', con(){} }; console.log(obj5) // {[object Object]: "value"} console.log(obj5.con.name) //con
返回的name是一个字符串
这个在con声明的时候也是声明的一个字符串 :function(){ XXX}这样
阮一峰老师的博客里边讲到 对象的每一个属性都有一个描述对象(Descriptor)
用来控制该属性的行为。Object.getOwnPropertyDescriptor
方法能够获取该属性的描述对象。
他在博客里边讲了enumerable这个特性 是指可枚举性 若是这个为false的话 该对象就不可以被遍历
那么另外的三个属性都是什么意思呢
value这个确定都知道就不说了
这个writable 这个特性是指属性的是否只读 若是这个属性被更改成false的时候这个属性的值 是指能被读取而不能被修改的
另一个configurable这个特性是指属性的基础操做 若是这个属性为false的时候 他会告诉js引擎 不能够删除delete这个属性和修改update这个属性
Object.keys(obj)
这个方法能够返回全部的可枚举的属性的key值,比较实用
super关键字
这个关键字只能够在对象的方法里边使用 他会指向对象的原型对象的属性,若是不是用在对象的方法里边就会报错
对象的扩展运算符 ...(三个点)
这个运算符和数组的的差很少 不一样的是 他的右边赋值对象必须是一个对象 不能是undefind或者null 不然就会报错
let { x, y, ...z } = null; // 运行时错误 let { x, y, ...z } = undefined; // 运行时错误
可是他能够直接 ...undefind
{...undefined} // {}
会返回一个空对象
另外 对象的扩展运算符不必定要放在最后,能够放在前边,可是同名属性会被覆盖掉
这个在平时项目中的赋值里边应该会很遍历 不用再很冗余的写一大堆的赋值
最后 扩展运算符里边也是支持三元运算符的 粘贴一个例子
const obj = { ...(x > 1 ? {a: 1} : {}), b: 2, };
以上是对es6对象的扩展的理解 若有不足之处但愿批评指正