类型转换

弱类型中,变量没有类型(不涉及存储结构)。好处是文法上很灵活,坏处是让 JavaScript 变量的管理和运行时的类型判断变得复杂。所以要能正确地处理:运行时数据类型的识别 + 类型的正确转换。

“运行时类型识别”是一种独立于语言本身的技术。除了弱类型语言需要之外,强类型语言有时也需要它来处理多态。

表达式和运算符是程序完成计算的基础。类型转换是通过调用对象方法的 valueOf()toString() 来执行的。

  1. 表达式中(对于对象)的转换规则:

    1. 如果是优先转换为字符串,必定先调用 toString() 方法

    2. 如果是优先转化为数值,必定先调用 valueOf()

  2. 强制类型转换

    1. parseInt(), parseFloat()

    2. .toString()

    3. 对象当函数用

  3. typeof (当变量没声明时,不报错)

    • 不足只能区别基本类型(原始值和对象)

    • 对于继承时的类型,需要再配合 instanceof 运算符, constructor 属性

      • eg. obj instanceof Iterator

  4. 其他语言也或多或少地存在着精度的问题,但是 JavaScript 的问题是非常严重

    1. 在进行浮点运算前,可以事先确定好问题的精度范围

      • Math 的 floor, ceil, round(取整数-正负数的区别-厉害了)

      • Number 的 toFixed(保留 n 位小数)

    2. 消除浮点数误差的常见手段,比如进行精度判断

  5. 读框架或者库的源码(比较巧妙和有趣的写法)

Last updated