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

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里面的基本数据类型)