美文网首页
重学前端(二):JS里面的基本数据类型

重学前端(二):JS里面的基本数据类型

作者: 小陈陈酱 | 来源:发表于2019-02-28 13:36 被阅读1次

    js里面的关于类型:

    1,为什么有的编程规范,要求用void 0 代替undefined呢?

    Undefined其实是js里面的一个基本类型。 这个类型里面,只有一个值,就是undefined。而undefined是一个变量,不是一个保留字,为了防止我们意外篡改这个变量,所以最好不用undefined作为值,而无论void后的表达式是什么,void操作符都会返回undefined,所以一般用void 0来代替undefined

    2, String的最大长度

    String 的最大长度是2的53次方-1 。但是这里的知识点是:
    String 的含义并非我以前理解的“字符串”的含义。而是“字符串的UTF16编码”,我们对字符串操作charAt charCodeAt length 都是对编码的操作。所以他的长度是收到UTF16编码长度的影响,所以有最大值。
    (讲到这里,可能会认为有必要去了解UTF16UTF8,但是我目前对这个还没有兴趣,也没有遇到相关的问题,所以此处略过)

    3, Number

    经典问题: 0.1 + 0.2 == 0.3 为什么是false。

    因为他的浮点数啊。浮点数的精度问题,导致两边并不相等,有微小的差距。对于浮点数的比较方法应该是这样的:
    Math.abs(0.1 + 0.2 - 0.3) < Number.EPSION
    (The Number.EPSILON property represents the difference between 1 and the smallest floating point number greater than 1.)

    NaN !== NaN

    NaN 其实是2的53次方-2个特殊数字的合计。所以他并不是一个精确的数据,而是一群值。所以就能解释为什么NaN !== NaN

    4,装箱转换

    例如:

    'string'.chartAt() // chartAt方法是String对象的内置方法
    

    那为什么'string'可以调用对象的内置方法呢?
    答案是.运算符提供了装箱操作,就是'string'会先转换成String对象,再去执行方法。
    值得注意的是:装箱机制会频繁的产生临时的对象,在对性能要求高的情况下应该尽量避免这样的做法。使用Object函数,可以在js中显性调用装箱能力。

    4,拆箱转换

    Number和String在相互转换的时候,就是先进行了拆箱转换,我的理解是先把value从对象里面取出来,再进行对比。
    所以我们常见的就是先调用了valueOf/toString。再去值进行对比。

    相关文章

      网友评论

          本文标题:重学前端(二):JS里面的基本数据类型

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