类型转换

  • 21.1 在语句开始时执行类型转换。
  • 21.2 字符串:

    1. // => this.reviewScore = 9;
    2. // bad
    3. const totalScore = this.reviewScore + '';
    4. // good
    5. const totalScore = String(this.reviewScore);
  • 21.3 对数字使用 parseInt 转换,并带上类型转换的基数。

    1. const inputValue = '4';
    2. // bad
    3. const val = new Number(inputValue);
    4. // bad
    5. const val = +inputValue;
    6. // bad
    7. const val = inputValue >> 0;
    8. // bad
    9. const val = parseInt(inputValue);
    10. // good
    11. const val = Number(inputValue);
    12. // good
    13. const val = parseInt(inputValue, 10);
  • 21.4 如果因为某些原因 parseInt 成为你所做的事的瓶颈而需要使用位操作解决性能问题时,留个注释说清楚原因和你的目的。

    1. // good
    2. /**
    3. * 使用 parseInt 导致我的程序变慢,
    4. * 改成使用位操作转换数字快多了。
    5. */
    6. const val = inputValue >> 0;
  • 21.5 注: 小心使用位操作运算符。数字会被当成 64 位值,但是位操作运算符总是返回 32 位的整数(参考)。位操作处理大于 32 位的整数值时还会导致意料之外的行为。关于这个问题的讨论。最大的 32 位整数是 2,147,483,647:

    1. 2147483647 >> 0 //=> 2147483647
    2. 2147483648 >> 0 //=> -2147483648
    3. 2147483649 >> 0 //=> -2147483647
  • 21.6 布尔:

    1. const age = 0;
    2. // bad
    3. const hasAge = new Boolean(age);
    4. // good
    5. const hasAge = Boolean(age);
    6. // good
    7. const hasAge = !!age;