Serials Javascript Style Guide – Type Casting & Coercion

  Javascript    —  2019, May 28    

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