对象(object)是 JavaScript 最重要的数据结构之一。

object 在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
}

方法同理

        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中用到的地方很多 比如导出和创建实例时等等

另外就是es6中允许对象的属性用表达式

        const item="item"
const obj4 ={
"item":"hello"
} console.log(obj4.item)
// hello
console.log(obj4[item])
// hello

但是属性名表达式和简洁表达法不能同时使用

会报错Uncaught SyntaxError: Unexpected token }或者干脆直接给你提示

如果你的key值传进去的是一个对象的话那么他的key会默认转换成一个字符串  “[object Object]”

        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对象的扩展的理解  如有不足之处希望批评指正

es6对象的扩展的更多相关文章

  1. Es6对象的扩展和Class类的基础知识笔记

    /*---------------------对象的扩展---------------------*/ //属性简写 ,属性名为变量名, 属性值为变量的值 export default functio ...

  2. ES6对象的扩展及新增方法

    1.属性的简洁表示法 ES6允许直接写入变量和函数,作为对象的属性和方法.这样的书写更加简洁. const foo = 'bar'; const baz = {foo}; baz//{foo:'bar ...

  3. web前端之es6对象的扩展

    1.属性的简洁表示法 2.属性名表达式 表达式作为对象的属性名 3.方法的 name 属性 例如:函数的name 属性,返回函数名. 4.Object.is() ES 比较两个值是否相等,只有两个运算 ...

  4. ES6 对象的扩展(下)

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

  5. ES6 对象的扩展(上)

    属性的简介表示法 允许直接写入变量和函数作为对象的属性和方法,这样的书写更简洁. function f( x, y ) { return { x, y }; } // 等同于 function f( ...

  6. es6 对象的扩展

    一.现在还有很多浏览器不能直接使用es6语法.特别是手机端的一些低版本的浏览器.都需要用bale转换一下. 但是目前流行的框架中(vue,react,angular).都有自己的脚手架,都能用webp ...

  7. ES6 对象的扩展 Object.assign()

    Object.assign方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target). const target = { a: 1 }; const source1 ...

  8. ES6 对象的扩展 Object.is()

    ES5 比较两个值是否相等,只有两个运算符:相等运算符(==)和严格相等运算符(===).它们都有缺点,前者会自动转换数据类型,后者的NaN不等于自身,以及+0等于-0. ES6 提出“Same-va ...

  9. ES6对象扩展

    前面的话 随着JS应用复杂度的不断增加,开发者在程序中使用对象的数量也在持续增长,因此对象使用效率的提升就变得至关重要.ES6通过多种方式来加强对象的使用,通过简单的语法扩展,提供更多操作对象及与对象 ...

随机推荐

  1. 【01】团饱和图:(一)EHM定理

    团饱和图:(一)EHM定理 据A. Hajnal考证,术语"饱和性",即saturation,最早由前苏联数学家A. A. Zykov在1949年引入,用于研究线性复形,但是他的工 ...

  2. WinForm-简单21点纸牌小游戏

    纸牌游戏有很多种玩法,C#代码写的纸牌游戏,网上也能找到不少,从中也能学习到不少知识,自己动手也写一个,算是记录下学习过程吧. 纸牌21点的玩法也比较简单,就是看谁手中的所有牌相加是21点,或是离21 ...

  3. numpy linalg

    线性代数 np.mat("0 1 0;1 0 0;0 0 1") np.linalg.inv(A)

  4. vue双向绑定的简单实现(原创)

    简单模拟一下vue的双向绑定实现,代码比较粗糙,菜鸟一枚,欢迎各位大佬斧正 1.实验环境: 利用a.b两个input,a代表页面中的数据,b代表data中的数据 2.原理: 利用Object.defi ...

  5. 关于No qualifying bean of type [XXX.XXX] found for dependency 的一次记录

    异常开始于spring+springmvc+mybatis 注解配置,启动tomcat服务器出现No qualifying bean of type [com.***.service] found f ...

  6. springboot之拦截器

    拦截器: package com.example.demo; import org.springframework.context.annotation.Bean; import org.spring ...

  7. mysql创建用户并分配权限

    添加新用户 允许本地 IP 访问 localhost, 127.0.0.1 create user 'test'@'localhost' identified by '123456'; 允许外网 IP ...

  8. 关于c# Debug和Release的区别 (转)

    关于Debug和Release的区别之讨论本文主要包含如下内容: 1. Debug 和 Release 编译方式的本质区别2. 哪些情况下 Release 版会出错2. 怎样“调试” Release ...

  9. centos7,zabbix3.2通过zabbix_java_gateway监控jmx[java/tomcat]

    网络上很多教程也比较多和全了,但是自己做时候多多少少的坑备注下吧. 1,监控原理简单说一下,就是zabbix_server通过代理(zabbix_java_gateway)来获取agent端(tomc ...

  10. python中的全局变量和局部变量

    python中,对于变量作用域的规定有些不一样. 在诸如C/C++.java等编程语言中,默认在函数的内部是能够直接訪问在函数外定义的全局变量的,可是这一点在python中就会有问题.以下是一个样例. ...