Serials Javascript Style Guide – Type Casting & Coercion
Type Casting & Coercion
Explicit
Thực hiện ép kiểu ở đầu của câu lệnh.
Strings
Strings: eslint: no-new-wrappers
// => 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(); // isn’t guaranteed to return a string
// good
const totalScore = String(this.reviewScore);
Numbers
Numbers: Sử dụng Number
để ép kiểu và parseInt
thì luôn đi kèm với hệ cơ số khi parse chuỗi. eslint: radix
no-new-wrappers
const inputValue = '4';
// bad
const val = new Number(inputValue);
// bad
const val = +inputValue;
// bad
const val = inputValue >> 0;
// bad
const val = parseInt(inputValue);
// good
const val = Number(inputValue);
// good
const val = parseInt(inputValue, 10);
Comment deviations
Vì bất kỳ lý do nào bạn đang làm 1 cái gì đó tùy tiện và parseInt
là thành phần gấy ra bottleneck thì bạn cần sử dụng Bitshift vì lý do hiệu suất, hãy để lại comment giải thích sao bạn lại làm vậy.
// good
/**
* parseInt was the reason my code was slow.
* Bitshifting the String to coerce it to a
* Number made it a lot faster.
*/
const val = inputValue >> 0;
Bitwise
Chú ý: Hãy cẩn thận khi sử dụng toán tử. Các kiểu số được miêu tả giống giá trị 64-bit, nhưng toán tử bitshift luôn trả về kiểu số nguyên 32-bit (nguồn). Bitshift có thể dẫn tới trạng thái không mong muốn với giá trị số nguyên lớn hơn 32-bit. Discussion. Số nguyên 32-bit có dấu lớn nhất là 2,147,483,647:
2147483647 >> 0; // => 2147483647
2147483648 >> 0; // => -2147483648
2147483649 >> 0; // => -2147483647
Booleans
Booleans: eslint: no-new-wrappers
const age = 0;
// bad
const hasAge = new Boolean(age);
// good
const hasAge = Boolean(age);
// best
const hasAge = !!age;
Tổng hợp Serial Javascript Style Guide