ClarenceC/JavaScript-Knowledge

JavaScript 基础类型转换

Opened this issue · 0 comments

Null Undefined Boolean(true) Boolean(false) Number String Symbol Object "" 0
Boolean False False - - true 1
false 0
true true true False False
Number 0 NaN 1 0 - StringToNumber TypeError 拆箱转换 0 0
String "null" "undefined" "true" "false" NumberToString - "Symbol(***)" 拆箱转换 "" "0"
Object {} {} 装箱转换 装箱转换 装箱转换 装箱转换 装箱转换 - 装箱转换

StringToNumber

  1. 字符串到数字的类型转换,存在一个语法结构,支持十进制、二进制、八进制和十六进制比如:
"30"  "0b111"  "0o13" "0xFF"
  1. 判断是否 NaN ,如果不是 NaN.
  2. 判断是否有科学计数法.
"1e3" "-1e-2"
  1. 判断是否有正负号.

在字符串转换数字的过程中最好使用 parseInt,parseFloat 来转换其它进制。

NumberToString

  1. 判断是否十进制、二进制、八进制和十六进制.
    2.判断符号.
    3.判断科学质法.
    4.参照日常理解.

装箱转换 和 拆箱转换

装箱转换

如果在基础类型直接执行方法时,因为每一种基本类型 Number、String、Boolean、Symbol 对有对应的类,所以装箱时会把基本类型转换为对应的对象类型,再进行方法执行,称为装箱转换。

拆箱转换

  1. 拆箱转换即把对象类型转换为基本类型转换。

在 JavaScript 标准中,规定了 ToPrimitive 函数,它是对象类型到基本类型转换的实现者(即,拆箱转换);但这是一个内部算法,是编程语言在内部执行时遵循的一套规则。

对象到 String 和 Number 的转换都遵循“先拆箱再转换”的规则。通过拆箱转换,把对象变成基本类型,再从基本类型转换为对应的 String 或者 Number。

  1. 在拆箱转换的过程中,在ES6后会检查对象中是否有显式定义的[Symbol.toPrimitive] 方法,如果有直接调用。
  2. 如果没有 ToPrimitive 则判断调用对象的 toStringvalueOf 方法,来转化为 Primitive Value
  3. 由于不同基础类型调用的 toStringvalueOf 顺序不同,具体可以查阅 ECMA 规范。