Skip to content

JavaScript 基础类型转换 #5

@ClarenceC

Description

@ClarenceC
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 规范。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions