美文网首页
2019-03-01 对象的新增方法

2019-03-01 对象的新增方法

作者: kathyever | 来源:发表于2019-03-02 16:39 被阅读0次

对象的新增方法

1、Object.is( )

ES5比较两个值是否相等,只有两个运算符:相等运算符(==)和严格相等运算符(===)。
它们都有缺点,前者会自动转换数据类型,后者的NaN不等于自身,以及+0等于-0。Javascript缺乏一种运算,在所有环境中,只有两个值是一样的,它们就应该相等。

ES6提出“Same-value equality”(同值相等)算法,用来解决这个问题。Object.is就是部署这个算法的新方法。它用来比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致。

Object.is('foo','foo')  //true

Object.is({},{})  //false

不同之处只有两个:
1、+0不等于-0
2、NaN等于自身

+0 === -0  //true
NaN === NaN  //false

Object.is(+0,-0)  //false
Object.is(NaN,NaN)   //true

2、Object.assign( )

基本用法

Object.assign方法用于对象的合并,将源对象的所有可枚举属性,复制到目标对象。

const target = {a:1};
const source1 = {b:2};
const source2 = {c:3};

Object.assign(target,source1.source2);
target //{a:1;b:2;c:3}
//Object.assign方法的第一个参数是目标对象,后面的参数都是源对象

`注意!~如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性`
const target = { a: 1, b: 1 };

const source1 = { b: 2, c: 2 };
const source2 = { c: 3 };

Object.assign(target, source1, source2);
target // {a:1, b:2, c:3}
//如果只有一个参数,Object.assign会直接返回该参数
const obj = {a:1};
Object.assign(obj) === obj  //true

//如果该参数不是对象,则会先转成对象,然后返回
typeof Object.assign(2) //"object"

//由于undefined和null无法转成对象,所以如果他们作为参数会报错
Object.assign(undefined)  //报错
Object.assign(null)  //报错

//但是如果费对象参数参数出现在源对象的位置,那么出力规则就不同。
//这些参数会转成对象,无法转对象的就会跳过。
//这意味着如果undefined和null不在首参数,就不会报错。

注意点

1)浅拷贝

Object.assign方法实行的是浅拷贝,而不是深拷贝。也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用

const obj1={a:{b:1}};
const obj2=Object.assign({},obj1);

obj1.a.b = 2;  //2

2)同名属性的替换

对于这种嵌套的对象,一旦遇到同名属性,Object.assign的处理方法是替换,而不是添加。

const target = {a:{b:'c',d:'e'}}
const source = {a:{b:'hello'}}
Object.assign(target,source)
//{ a: { b: 'hello' } }

3、数组的处理

Object.assign可以用来处理数组,但是会把数组视为对象

Object.assign([1,2,3],[4,5])
//[4,5,3]

4、取值函数的处理

Object.assign只能进行值的赋值,如果要复制的值是一个取值函数,那么将求值后再复制

const source = {
    get foo(){return 1}
};
const target = {};

Object.assign(target,source)
// { foo: 1 }

相关文章

  • 2019-03-01 对象的新增方法

    对象的新增方法 1、Object.is( ) ES5比较两个值是否相等,只有两个运算符:相等运算符(==)和严格相...

  • 对象的扩展

    对象的改变分为对象的扩展和对象的新增方法。 对象的扩展和新增的方法都有哪些? 1:属性的简洁表示法 2:属性名表达...

  • js对象新增的方法

    1.object.js() 类似与相等运算符== 和严格运算符===,不过==和===都有缺点,==会自动转...

  • es6-数值扩展

    数值处理新增特性 新增方法,如数学处理 方法调整,全局方法移植到 Number 对象上 多进制表示方法 是否有穷 ...

  • JavaScript 模式之内置对象的原型 前端早读课第28期

    软件和教堂非常相似——建成之后我们就在祈祷。 不在内置对象的原型上新增方法 写法 内置对象的原型上新增方法会降低代...

  • ECMAScript6 - 学习笔记 整理 - 3

    对象新增方法 数组去重 ES6 新构造函数方法

  • 对象的新增方法(笔记)

    Object.assign() 1.Object.assign方法用于对象的合并,将源对象的所有可枚举属性,复制到...

  • ES6学习 第四章 字符串的新增方法

    前言 本章介绍字符串对象的新增方法。不常用的方法不做重点笔记。本章原文链接:字符串的新增方法[https://es...

  • ES6中数组新增扩展

    一、构造函数新增的方法 二、实例对象新增的方法 五、排序稳定性将sort()默认设置为稳定的排序算法

  • ES6常用总结

    新增的常用特性: 1、Let 和Const2、模板字符串 3、对象属性缩写 4、箭头函数5、新增的对象操作方法 6...

网友评论

      本文标题:2019-03-01 对象的新增方法

      本文链接:https://www.haomeiwen.com/subject/shbruqtx.html