博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript--Object操作
阅读量:6124 次
发布时间:2019-06-21

本文共 1447 字,大约阅读时间需要 4 分钟。

hot3.png

Object.is()

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

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

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

ES5 可以通过下面的代码,部署Object.is

Object.defineProperty(Object, 'is', {  value: function(x, y) {    if (x === y) {      // 针对+0 不等于 -0的情况      return x !== 0 || 1 / x === 1 / y;    }    // 针对NaN的情况    return x !== x && y !== y;  },  configurable: true,  enumerable: false,  writable: true});

 

Object.assign()

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

Object.assign(target, source1, source2, ...);

Object.assign方法的第一个参数是目标对象,后面的参数都是源对象。

如果非对象参数出现在源对象的位置(即非首参数),那么处理规则有所不同。首先,这些参数都会转成对象,如果无法转成对象,就会跳过。

非对象类型的值,除了字符串会以数组形式,拷贝入目标对象,其他值都不会产生效果。

{ "0": "h", "1": "i", "2": "!" }
Object.assign({b: 'c'},  Object.defineProperty({}, 'invisible', {    enumerable: false,    value: 'hello'  }))

Object.defineProperty用于定义对象属性具体情况get set value enumerable等属性描述符。

(1)浅拷贝

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

(2)同名属性的替换

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

(3)数组的处理

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

Object.assign把数组视为属性名为 0、1、2 的对象,后边加上的数组会进行覆盖。

(4)取值函数的处理

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

 

一些函数库提供Object.assign的定制版本(比如 Lodash 的_.defaultsDeep方法),可以得到深拷贝的合并。

转载于:https://my.oschina.net/u/3412211/blog/1605293

你可能感兴趣的文章
如约而至:微信自用的移动端IM网络层跨平台组件库Mars已正式开源
查看>>
ADO.NET对象模型
查看>>
hadoop集群之HDFS和YARN启动和停止命令
查看>>
重温web服务器--细说Tomcat服务器
查看>>
常用键盘快捷键
查看>>
shell不排序去重
查看>>
【 Android Manifest 权限描述大全 】
查看>>
springmvc-servlet.xml中use-default-filters的作用
查看>>
浏览器数据库IndexedDB介绍
查看>>
CSS简介
查看>>
Robots.txt 不让搜索引擎收录网站的方法
查看>>
[转]在ASP.NET Core使用Middleware模拟Custom Error Page功能
查看>>
ubuntu 配置L2tp出现的问题解决
查看>>
【Java】初始化过程
查看>>
协议森林08 不放弃 (TCP协议与流通信)
查看>>
其他常用命令
查看>>
画像分析(2-1)-云计算资源注册
查看>>
为Jenkins增加ssl(https)的访问支持(Windows/Linux)
查看>>
MySQL MySql连接数与线程池
查看>>
Mac巧用AirDrop实现大文件传输
查看>>