浅谈ES6 对象新增方法 Object.is()、Object.assign()以及注意事项分析

本文介绍了ES6中的Object.is()方法,用于严格比较值的相等性,以及Object.assign()方法,实现对象合并。文章通过实例解析了两者如何解决ES5中比较运算的问题,并讨论了其使用场景和注意事项。
摘要由CSDN通过智能技术生成


前言

大家好我是前端新手小猿同学,这篇文章主要给大家简单介绍一下ES6关于对象新增的Object.is()和Object.assign()方法的使用以及原理的简单分析,希望对大家的学习进步有所帮助,当然文章中可能存在理解不正确的地方希望大家可在评论区相互讨教,共同进步。


一、Object.is()

ES5 比较两个值是否相等,只有两个运算符:相等运算符()和严格相等运算符(=)。它们都有缺点,前者会自动转换数据类型,后者的NaN不等于自身,以及+0等于-0。JavaScript 缺乏一种运算,在所有环境中,只要两个值是一样的,它们就应该相等。
ES6 提出“Same-value equality”(同值相等)算法,用来解决这个问题。Object.is就是部署这个算法的新方法。它用来比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致。

相等运算和严格等运算的缺点分析:

  1. 自动转换数据类型
  2. NaN不等于自身
  3. +0, -0 相等
console.log(1==true)
console.log(NaN===NaN)
console.log(+0===-0)

在这里插入图片描述

Object.is()就是为了解决相等运算和严格等运算的缺点诞生的:

console.log(Object.is(NaN,NaN))
console.log(Object.is(+0, -0))

在这里插入图片描述


二、Object.assign()

Object.assign()方法用于对象的合并,将源对象的所有可枚举属性,复制到目标对象,简单来说就是可以将两个对象中不同的属性进行合并,比如:
const obj1 = {a:1}
const obj2 = {b:2}
const obj3 = {}
Object.assign(obj3,obj1,obj2)
console.log(obj3);
输出:

在这里插入图片描述

但是如果目标对象中有和源对象同名的属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性:

const obj = { a: 1, b: 1 };
const obj1 = { b: 2, c: 2 };
const obj2 = { c: 3 };
Object.assign(obj, obj1, obj2);
console.log(obj);
输出:

在这里插入图片描述
如果源对象中只有一个参数那么assign()会直接返回这个参数,如果遇到这个参数不是对象,assign()会先将这个参数转换成为对象,然后返回。

注意:由于undefined和null无法转成对象,所以如果它们作为目标对象参数,就会报错。所以我们在选择目标对象的时候要尽量避开undefined和null。

 const obj1 = {a:1}
// 报错
 const obj2 = Object.assign(undefined,obj1)
 console.log(obj2)
 // 不报错
 const obj3 = Object.assign(obj1,null)
 console.log(obj3)
 // 不报错
 const obj3 = Object.assign(obj1,undefined)
console.log(obj3)
输出:

在这里插入图片描述

原因分析:

Object.assign()
默认第一个参数,是做为目标对象,会将后面的参数和并到第一个目标对象中,所以第一个参数的类型必须是Object类型,如果不是Object类型assgin()可以自动转换,但是null和undefind无法转换成为Object类型所以会报错,但是当null和undefind做第二个参数的时候,如果类型转换失败就会跳过,只是不会和目标对象合并,所以不会报错。


说明: 关于Object.assgin()浅拷贝相关的知识点本片文章暂时不涉猎,后面会专门写一篇js深拷贝和浅拷贝相关的文章,关注博主不迷路,定期更新前端学习文章,共同进步。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值