JavaScript对象扩展(Object.is(), assign(), 对象遍历keys, es6原型介绍)
来源:互联网 发布:网络管理 委托代理 编辑:程序博客网 时间:2024/06/05 06:20
对象创建新方法
ES6允许直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。
上面代码表明,ES6允许在对象之中,只写属性名,不写属性值。这时,属性值等于属性名所代表的变量。
//例1: var foo = 'bar'; var baz1 = {foo}; console.log(baz1);// Object {foo: "bar"}; var baz2 = {foo:'bar2'}; console.log(baz2)// Object {foo: "bar2"}//例2: function f1(x,y) { return {x,y} ; } function f2(x,y) { return {x:x,y:y}; } console.log(f1(1,2));// Object {x: 1, y: 2} console.log(f2(1,2));// Object {x: 1, y: 2}//例3: //下面这两个对象是相同的 var o1 = { method() {//ES6可以这样直接写一个函数 return 'hello!'; } } var o2 = { method: function () { return 'hello!' } } console.log(o1.method());//hello console.log(o2.method());//hello
Object.is()
ES5比较两个值是否相等,只有两个运算符:相等运算符(==)和严格相等运算符(===)。它们都有缺点,前者会自动转换数据类型,后者的NaN不等于自身,以及+0等于-0。
JavaScript缺乏一种运算,在所有环境中,只要两个值是一样的,它们就应该相等。
ES6提出“Same-value equality”(同值相等)算法,用来解决这个问题。Object.is就是部署这个算法的新方法。它用来比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致。
//例: console.log(+0 === -0);//true console.log(NaN === NaN);//false console.log(Object.is(+0, -0));//false console.log(Object.is(NaN,NaN));//true
Object.assign(); 对象拷贝(浅拷贝)
//例 var target = {a:1}; var source1 = {b:2}; var source2 = {c:3}; Object.assign(target,source1,source2); console.log(target);//Object {a: 1, b: 2, c: 3}
注意: 对于这种嵌套的对象,一旦遇到同名属性,Object.assign的处理方法是替换,而不是添加。
//例 var target = { a: { b: 'c', d: 'e' } }; var source = { a: { b: 'hello' } }; Object.assign(target, source); console.log(target);// { a: { b: 'hello' } };
对象遍历 Object.keys Object.values Object.entries
//ES5引入了Object.keys方法,返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键名。 //Object.values方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值。 //Object.entries方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值对数组。 var obj = { foo: "bar", baz: 42 }; Object.keys(obj) // ["foo", "baz"] var obj = { foo: "bar", baz: 42 }; Object.values(obj) // ["bar", 42] var obj = { foo: 'bar', baz: 42 }; Object.entries(obj) // [ ["foo", "bar"], ["baz", 42] ]二维数组
Object.setPrototypeOf(),Object.getPrototypeOf()
_ _ proto _ _属性(前后各两个下划线),用来读取或设置当前对象的prototype对象
该属性没有写入 ES6 的正文,而是写入了附录,原因是_ _ proto _ _前后的双下划线,说明它本质上是一个内部属性,而不是一个正式的对外的 API,只是由于浏览器广泛支持,才被加入了 ES6。标准明确规定,只有浏览器必须部署这个属性,其他运行环境不一定需要部署,而且新的代码最好认为这个属性是不存在的。因此,无论从语义的角度,还是从兼容性的角度,都不要使用这个属性,而是使用下面的Object.setPrototypeOf()(写操作)、Object.getPrototypeOf()(读操作)、Object.create()(生成操作)代替。
//例:var obj = { a:1}var obj2 = { b:2}obj1.__proto__ = obj2;console.log(obj1.b);// 2等同于下面这种方法.Object.setPrototypeOf(obj1, obj2);console.log(obj1.b);// 2console.log(Object.getPrototypeOf(obj1));//Object b
阅读全文
0 0
- JavaScript对象扩展(Object.is(), assign(), 对象遍历keys, es6原型介绍)
- ES6-对象的扩展-Object.assign()
- ES6-对象的扩展-Object.keys(),Object.values(),Object.entries()
- es6 javascript对象方法Object.assign()
- es6 javascript对象方法Object.assign()
- es6 javascript对象方法Object.assign()
- es6 javascript对象方法Object.assign()
- ES6-对象的扩展-Object.is()
- ES6 Symbol及对象遍历方法for in,Object,keys,JSON.stringify,getOwnPropertyNames,Reflect.ownKeys
- Javascript研究: 遍历对象的方式Object.getOwnPropertyNames vs Object.keys vs for ...in
- es6 javascript对象Object.values() , Object.entries()
- ES6-对象的扩展-Object.getOwnPropertyDescriptors()
- JavaScript 对象拷贝与Object.assign
- deepClone, extend, 深克隆对象和Object.assign(ES6)
- javascript--object 对象介绍
- 23-JavaScript-面向对象-Object类-扩展原型对象-成员函数
- 扩展javascript扩展(类,对象,原型)
- es6 javascript的对象Object.getOwnPropertyDescriptors()
- Lavarel 自定义Artisan Console
- BeanUtils工具类的使用
- CentOS遇到kmod-microsoft-hyper-v-rhel63.3.5-20131212.x86_64 (installed)
- 【Hibernate】——持久化对象的三种状态
- pycharm django 初探
- JavaScript对象扩展(Object.is(), assign(), 对象遍历keys, es6原型介绍)
- 《SSH框架》---Struts2
- JavaWeb项目从零开始(2)--- spring、spring mvc、mybatis整合
- 无法检测到本地java应用程序
- Python-sklearn机器学习的第一个样例(6)
- viewDidLoad在init方法之前调用的坑
- Java多线程中join的用法
- ajax同步和异步
- CF