es6对象的扩展

对象(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对象的扩展的理解  若有不足之处但愿批评指正

相关文章
相关标签/搜索