发表于: 2017-07-20 21:17:48

1 785


    • 今天完成的事情:

      • 1、学习ES6中关于对象的扩展和Symbol



明天计划的事情:

  • 1、后面接口应该陆陆续续要出来了,调试第九肌肉。


遇到的问题:

    • 1、暂无。



收获:

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

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

不同之处只有两个:一是+0不等于-0,二是NaN等于自身。

+0 === -0 //true

NaN === NaN // false

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

Object.is(NaN, NaN) // true

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

可以将对象进行合并,如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性。如果该参数不是对象,则会先转成对象,然后返回。undefinednull无法转成对象,所以如果它们作为参数,就会报错。

需要注意的是,Object.assign方法实行的是浅拷贝,而不是深拷贝。

3、ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值。它是 JavaScript 语言的第七种数据类型,前六种是:undefinednull、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)。

Symbol 值通过Symbol函数生成。这就是说,对象的属性名现在可以有两种类型,一种是原来就有的字符串,另一种就是新增的 Symbol 类型。凡是属性名属于 Symbol 类型,就都是独一无二的,可以保证不会与其他属性名产生冲突。

let s = Symbol();      typeof s// "symbol"




返回列表 返回列表
评论

    分享到