# 类型转换
22.1 在语句开始执行强制类型转换。
22.2 Strings: eslint:
no-new-wrappers
(opens new window)// => this.reviewScore = 9; // bad const totalScore = new String(this.reviewScore); // typeof totalScore is "object" not "string" // bad const totalScore = this.reviewScore + ''; // invokes this.reviewScore.valueOf() // bad const totalScore = this.reviewScore.toString(); // 不保证返回string // good const totalScore = String(this.reviewScore);
22.3 Numbers: 用
Number
做类型转换。 eslint:radix
(opens new window)const inputValue = '4'; // bad const val = new Number(inputValue); // bad const val = +inputValue; // bad const val = inputValue >> 0; // good const val = Number(inputValue);
22.4 请在注释中解释为什么要用移位运算和你在做什么。无论你做什么狂野的事,比如由于
parseInt
是你的性能瓶颈导致你一定要用移位运算。 请说明这个是因为性能原因 (opens new window),// good /** * parseInt是代码运行慢的原因 * 用Bitshifting将字符串转成数字使代码运行效率大幅增长 */ const val = inputValue >> 0;
22.5 注意: 用移位运算要小心. 数字使用64-位 (opens new window)表示的,但移位运算常常返回的是32为整形source (opens new window))。移位运算对大于32位的整数会导致意外行为。Discussion (opens new window). 最大的32位整数是 2,147,483,647:
2147483647 >> 0 //=> 2147483647 2147483648 >> 0 //=> -2147483648 2147483649 >> 0 //=> -2147483647
22.6 布尔:
const age = 0; // bad const hasAge = new Boolean(age); // good const hasAge = Boolean(age); // best const hasAge = !!age;