从运行时、文法和执行过程三个角度去剖析 JS 的知识体系
运行时类型表示 代码实际执行时所用的的数据类型,7大类型之一,从变量、参数、返回值、表达式结果,任何代码在运行时产生的数据都叫运行时类型
undefined,null,string,number,symbol,boolean,object
1.为什么有的编程规范要求用 void 0 代替 undefined?
undefined,null
undefined表示未定义 因为undefined实际是个全局变量,但并非一个关键词
所以,避免无意中被篡改,建议使用 void 0 来获取 undefined 值。
var undefined=123
console.log(undefined) //123 undefined被篡改了,void为关键词
null表示定义了但是为空值,null为关键词,所有不存在被篡改的情况
boolean
2.字符串有最大长度吗?
string
- String 用于表示文本数据。String 有最大长度是 2^53 - 1,这在一般开发中都是够用的
- 字符串实际长度的计算,Unicode 的码点表示一个字符
- JavaScript 字符串把每个 UTF16 单元当作一个字符来处理,所以处理非 BMP(超出 U+0000 - U+FFFF 范围)的字符时,你应该格外小心。
- JavaScript 这个设计继承自 Java,最新标准中是这样解释的,这样设计是为了“性能和尽可能实现起来简单”。因为现实中很少用到 BMP 之外的字符。
number
基本符合 IEEE 754-2008 规定的双精度浮点数规则,但是 JavaScript 为了表达几个额外的语言场景(比如不让除以 0 出错,而引入了无穷大的概念)
- NaN,占用了 9007199254740990,这原本是符合 IEEE 规则的数字;
- Infinity,无穷大;
- -Infinity,负无穷大。
检测+0和-0的区别 1/-0(-Infinity) 1/0(Infinity)
计算机计算精度有差别
0.1+0.2=0.30000000000000004
0.1+0.2==0.3 //false
Math.abs() 方法可返回数的绝对值, 属性表示 1 与number可表示的大于 1 的最小的浮点数之间的差值。
1-大于1的最小浮点数=Number.EPSILON
Math.abs(0.1 + 0.2 - 0.3) <= Number.EPSILON
symbol
var o= new Object()
o[Symbol.iterator]=function(){
var v=0;
return{
next:function(){
return {value:v++,done:v>10}
}
}
}
Object
为什么给对象添加的方法能用在基本类型上?
对象的定义:属性的集合,属性分为数据属性和访问器属性,key-value,key可以是字符串和Symbol
class仅仅是运行时对象的一个私有属性
类型转换,隐式类型转换和显示类型转换
装箱机制会频繁产生临时对象,在一些对性能要求较高的场景下,我们应该尽量避免对基本类型做装箱转换。
网友评论