查漏补缺(一)关于类型

在 JS 中,存在着 6 种原始值,分别是:

boolean
null
undefined
number
string
symbol

原始类型存储的都是值,是没有函数可以调用的,比如 undefined.toString()

但是’1’.toString() 是可以使用的。其实在这种情况下,‘1’ 已经不是原始类型了,而是被强制转换成了 String 类型也就是对象类型,所以可以调用 toString 函数。
其中 JS 的 number 类型是浮点类型的,在使用中会遇到某些 Bug,比如 0.1 + 0.2 !== 0.3

typeof null 会输出 object
这只是 JS 存在的一个悠久 Bug。在 JS 的最初版本中使用的是 32 位系统,为了性能考虑使用低位存储变量的类型信息,000 开头代表是对象,然而 null 表示为全零,所以将它错误的判断为 object 。虽然现在的内部类型判断代码已经改变了,但是对于这个 Bug 却是一直流传下来。

转Boolean
在条件判断时,除了 undefined, null, false, NaN, ‘’, 0, -0,其他所有值都转为 true,包括所有对象。

对象转原始类型
对象在转换类型的时候,会调用内置的 [[ToPrimitive]] 函数。
我们可以重写 Symbol.toPrimitive ,该方法在转原始类型时调用优先级最高。
例如:

let a = {
  valueOf() {
    return 0
  },
  toString() {
    return '1'
  },
  [Symbol.toPrimitive]() {
    return 2
  }
}
1 + a // => 3

加法运算符
加法运算符不同于其他几个运算符,它有以下几个特点:
1.运算中其中一方为字符串,那么就会把另一方也转换为字符串
2.如果一方不是字符串或者数字,那么会将它转换为数字或者字符串

猜你喜欢

转载自blog.csdn.net/weixin_43953753/article/details/86241438
今日推荐