JS知识点随笔

148 阅读1分钟

1.为什么 0.1 + 0.2 != 0.3?

因为 JS 采用 IEEE 754 双精度版本(64位),并且只要采用 IEEE 754 的语言都有该问题。

我们都知道计算机是通过二进制来存储东西的,那么 0.1 在二进制中会表示为

// (0011) 表示循环
0.1 = 2^-4 * 1.10011(0011)

我们可以发现,0.1 在二进制中是无限循环的一些数字,其实不只是 0.1,其实很多十进制小数用二进制表示都是无限循环的。 这样其实没什么问题,但是 JS 采用的浮点数标准却会裁剪掉我们的数字

EPSILON 属性的值接近于 2.2204460492503130808472633361816E-16,或者 2-52。

2.这个输出什么?

首先需要考虑的是优先级.的优先级高于=,所以先执行a.x

堆内存中的{n: 1}就会变成{n: 1, x: undefined}

改变之后相应的b.x也变化了,因为指向的是同一个对象。

赋值操作是从右到左,所以先执行a={n:2},a的引用就被改变了,然后这个返回值又赋值给了a.x,需要注意的是这时候a.x是第一步中的{n: 1, x: undefined}那个对象,其实就是b.x,相当于b.x={n:2}

blog.csdn.net/mx185191428…