0%

JS String vs toString

此篇主要探討 String()、toString() 兩種轉換字串方法的差異,以及使用情境。

String()

MDN:屬於建構函式,會將對象轉換為字串

優點:所有型別都能轉換為字串。
缺點:不支援轉進位制轉換。

1
2
String(null); // 'null'
String(undefined); // 'undefined'

toString()

MDN:屬於方法,會回傳指定對象的字串樣子。

優點:支援進位制轉換。
缺點:無法轉換 nullundefined(會報 Error)。

進位制轉換
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 括號中填寫進位對應數值

let num = 10;

// 二進位制
num.toString(2); // '1010'

// 八進位制
num.toString(8); // '12'

// 十進位制
num.toString(10); // '10'

// 十六進位制
num.toString(16); // 'a'

解法:可以使用 try catch短路求值 來預防 Error。

1
2
3
4
5
6
7
8
9
10
11
12
let toNum = null;

// 解法一
try {
toNum.toString();
} catch (exception) {
// TypeError: Cannot read properties of null (reading 'toString')
console.log(`${exception.name}: ${exception}`)
}

// 解法二
toNum && toNum.toString();

different point

null、undefined

toString:無法轉為字串(會噴 Error)
String:可以正確轉為字串

1
2
3
4
let num = null;

console.log(num.toString()); // TypeError: Cannot read properties of null (reading 'toString')
console.log(String(num)); // 'null'

進位制

toString:可以正確轉換
String:無法正確轉換

1
2
3
let num = 10;
console.log(num.toString(2)); // '1010'
console.log(String(num)); // '10'

conclusion

需要做進位制轉換就使用 toString,否則就使用 String
使用 String 時預防噴 Error。