2022-09-22 星期四

想起来全是问题,做起来才有答案。

1. || 和 && 操作符的返回值是什么?【JS】

参考答案

  • ||最终返回转换为布尔值为true的那个值,如果都没有true值,返回最后一个。
  • &&最终返回转化为布尔值为false的那个值,如果都是true,返回最后一个。

2. 怎么将一个值转换为二进值,以及如何将一个二进制数转换为十进制 【JS】

参考答案

  • 二进制转十进值:(1010101).toString(2) ‘toString()中转进值’
  • 十进制数转二进制:Number.parseInt(10100,2)

3. 为什么0.1+0.2!==0.3,如何使其相等?【JS】

参考答案

  • 计算机是通过二进制存储数据的,所以在计算0.1 + 0.2的时候,是计算这两个数二进制的和,然而这俩数都是无限循环的数,因此再次转成十进值的时候就会转成一个无限循环的多位数,因此0.1+0.2!==0.3

  • 解决:Number.parseFloat((0.1+0.2).toFixed(10))

  • 另外还有一个Number.EPSILON值,根据规格,它表示 1 与大于 1 的最小浮点数之间的差,Number.EPSILON实际上是 JavaScript 能够表示的最小精度。误差如果小于这个值,就可以认为已经没有意义了,即不存在误差了。

  • 遗留问题:1.1+2.2的和与3.3进行比较,误差大于Number.EPSILON,即0.3000000000000003 > 0.30000000000000022204返回了true。。。

4. 请说出三种方式来判断一个对象是否为数组 【JS】

参考答案

值为value

  • Array.isArray(value) 返回true则是数组,否则不是数组
  • Object.prototype.toString.call(value) 若为'[object Array]'则为数组,都为不是数组
  • value instanceof Array 若返回true则为数组。
  • Array.prototype.isPrototypeOf(value) 若返回true则为数组

5. typeof null 的结果是什么?为什么?【JS】

参考答案

  • 'object',这是JS最初的一个设计错误。

在 JavaScript 第一个版本中,所有值都存储在 32 位的单元中,每个单元包含一个小的 类型标签(1-3 bits) 以及当前要存储值的真实数据。
类型标签存储在每个单元的低位中,共有五种数据类型:

  • 000: object - 当前存储的数据指向一个对象。
  • 1: int - 当前存储的数据是一个 31 位的有符号整数。
  • 010: double - 当前存储的数据指向一个双精度的浮点数。
  • 100: string - 当前存储的数据指向一个字符串。
  • 110: boolean - 当前存储的数据是布尔值。

如果最低位是 1,则类型标签标志位的长度只有一位;
如果最低位是 0,则类型标签标志位的长度占三位,为存储其他四种数据类型提供了额外两个 bit 的长度。
有两种特殊数据类型:

  • undefined的值是 -230 (一个超出整数范围的数字);
  • null 的值是机器码 NULL 指针(null 指针的值全是 0)

那也就是说null的类型标签也是000,和Object的类型标签一样,所以会被判定为Object。