Open ArthurWangCN opened 2 years ago
Q:为什么给对象添加的方法能用在基本类型上?
A:
new Number(3)
是完全不同的值,它们一个是 Number 类型, 一个是对象类型。.
运算符提供了装箱操作,它会根据基础类型构造一个临时对象,使得我们能在基础类型上调用对应对象的方法。Q:0.1 + 0.2 为什么不等于 0.3? A:计算机中的数字都是以二进制存储的,如果要计算 0.1 + 0.2 的结果,计算机会先把 0.1 和 0.2 分别转化成二进制,然后相加,最后再把相加得到的结果转为十进制 。0.1 和 0.2 在转换为二进制时就发生了一次精度丢失,而对于计算后的二进制又有一次精度丢失 。
总结:非整数的Number类型无法用==(===也不行) 来比较,因为有可能会发生精度丢失。
精度丢失解决:正确的比较浮点数的方法是,检查等式左右两边差的绝对值是否小于最小精度。
Math.abs(0.1 + 0.2 - 0.3) <= Number.EPSILON; // true
JavaScript 语言规定了 7 种语言类型。语言类型广泛用于变量、函数参数、表达式、函数返回值等场合。根据最新的语言标准,这 7 种语言类型是:Undefined、Null、Boolean、String、Number、Symbol、Object。