ES6学习7章:对象的扩展
2017-12-15 14:09
351 查看
对象属性和方法的简洁表示法
在ES6中允许只写属性名,不写属性值,此时的属性值就是属性名对应的变量的值var birth = '2000/01/01' var person = { name:'张三', birth,//等同于 birth : birth hello(){console.log('hello world')} // 等同于 hello:function(){...} }
新的对象API
Object.is()
判断两个值是否严格相等场景:在ES5中NaN是不等于自身的,可以通过Object.is()来判断
Object.is(+0,-0) //false 在ES5中两者相等 Object.is(NaN,NaN) //true
Object.assign(target,source1,source2)
用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)如果只有一个参数,则返回该参数
undefined和null不能做为参数,因为它们不能转成对象(作为首参数报错,做为source参数无值)
Object.assign()是浅拷贝,而不是深拷贝。(即:如果源对象某个属性的值是对象,那目标对象拷贝得到的是这个对象的引用)
当target和source有同名属性时,会替换,而不是添加
var obj1 ={ name:'haha', age:18 } var obj2={} Object.assign(obj2,obj1) // Object.assign(target,source1,source2,...) # 浅拷贝 var obj1 ={a:{b:1}} var obj2 = Object.assign({},obj1) obj1.a.b=2; obj2.a.b // 2 # 合并多外对象 var merge = (...sources)=>Object.assign({},...sources) # 为类对象属性赋值 class Point{ constructor(x,y){ Object.assign(this,{x,y}) } } # 设置初始值 let options = Object.assign({},DEFAULTS,options)
Object.assign的作用
1. 浅拷贝对象的属性和方法
2. 为类对象赋值
3. 设置对象属性指定默认值
4. 合并多个对象
5. 克隆对象
对象的遍历方法
for…infor…in 循环遍历对象自身的和继承的可枚举属性(不含Symbol属性)
Object.keys(obj)
Object.keys返回一个数组,包括对象自身的(不含继承的)所有可枚举属性
Object.getOwnPropertyName(obj)
返回一个数组,饮食对象所有属性
Object.getOwnPropertySymbols(obj)
返回数组,饮食对象自身的所有Symbol属性
Reflect.ownKeys(obj)
返回数组,饮食对象自身的所有属性(饮食Symbol属性和可枚举及不可枚举的)
对象属性获取API
Object.keys()返回key数组,获取对象的所有可遍历属性的键名,
Object.values()
返回value数组,获取对象所有可遍历属性的值
Object.entries()
返回[key,value]为元素的数组,获取对象所有可遍历属性的键值数组
Rest解构赋值
…运算符用于解构。对象的Rest解构赋值用于从一个对象取值,相当于将所有可遍历的、但尚未被读取的属性,分配到指定的对象上面。注意点:
- Rest解构赋值必须是最后一个参数,否则会报错
- 解构赋值是浅拷贝
- 不会拷贝继承自原型对象的属性
相关文章推荐
- es6学习之对象的扩展
- ES6学习——新的语法:对象字面量扩展(Object Literal Extensions)
- ES6学习——新的语法:对象字面量扩展(Object Literal Extensions)
- ES6学习教程之对象的扩展详解
- Web端 es6(基础七) 对象扩展
- ES6 Promise对象学习笔记
- ES6 对象扩展
- [js高手之路] es6系列教程 - 对象功能扩展详解
- Es6对象的扩展和Class类的基础知识笔记
- Ext JS学习第十天 Ext基础之 扩展原生的javascript对象(二)
- ECMAScript 6 学习系列课程 (ES6 Promise对象的使用)
- es6字符串,数组,对象学习总结
- ES6学习笔记--promise对象
- ES6 关于对象的扩展
- C#编译器优化那点事 c# 如果一个对象的值为null,那么它调用扩展方法时为甚么不报错 webAPI 控制器(Controller)太多怎么办? .NET MVC项目设置包含Areas中的页面为默认启动页 (五)Net Core使用静态文件 学习ASP.NET Core Razor 编程系列八——并发处理
- jQuery源代码学习-jQuery对象扩展
- ES6学习13章:Promise对象
- ES6学习教程之对象字面量详解
- ES6-对象的扩展-方法name属性
- 面向对象与扩展学习的总结