如果你訂閱了Airbnb 的 JAVAScript 風格指南,就會知道最好的方法是使用 "String()"
我用他是因為它是最明確的——容易讓其他人明白你代碼的意圖
請記住,最好的代碼并不需要多聰明的方式,而是能將你的代碼理解傳達給他人
const value = 12345; // Concat Empty String value + ''; // Template Strings `${value}`; // JSON.stringify JSON.stringify(value); // toString() value.toString(); // String() String(value); // RESULT // '12345'
對比這 5 個方法
讓我們用不同的值測試這 5 個方法,下面是我們打算測試的值:
const string = "hello"; const number = 123; const boolean = true; const array = [1, "2", 3]; const object = {one: 1 }; const symbolValue = Symbol('123'); const undefinedValue = undefined; const nullValue = null;
拼接空字符串
string + ''; // 'hello' number + ''; // '123' boolean + ''; // 'true' array + ''; // '1,2,3' object + ''; // '[object Object]' undefinedValue + ''; // 'undefined' nullValue + ''; // 'null' symbolValue + ''; //TypeError
從這里可以看出如果值是 symbol 這個方法會拋出一個 TypeError 錯誤,除此之外,其他都輸出正確的值
模板字符串
`${string}`; // 'hello' `${number}`; // '123' `${boolean}`; // 'true' `${array}`; // '1,2,3' `${object}`; // '[object Object]' `${undefinedValue}`; // 'undefined' `${nullValue}`; // 'null' `${symbolValue}`; // ? TypeError
實際上使用模板字符串和拼接字符串是輸出相同的結果,再者,當處理 Symbol 這也不是最理想的方式因為它會拋出一個 TypeError
TypeError: Cannot convert a Symbol value to a string
類型錯誤: 不能把 Symbol 類型的值轉換為 string
JSON.stringify()
JSON.stringify(string); // '"hello"' JSON.stringify(number); // '123' JSON.stringify(boolean); // 'true' JSON.stringify(array); // '[1,"2",3]' JSON.stringify(object); // '{"one":1}' JSON.stringify(nullValue); // 'null' JSON.stringify(symbolValue); // undefined JSON.stringify(undefinedValue); // undefined 復制代碼
你一般也不會使用 JSON.stringify 去把一個值轉成字符串,而且這里真的沒有強制發生,我主要包括這種方式來完整讓你了解可用的所有工具,然后你根據具體情況來挑選使用哪種方式
有個點我要指出來因為你可能沒注意,當你使用一個純字符串格式的值轉換出來就會包裹引號
擴展閱讀 Kyle Simpson 的 “You Don’t Know JS”: JSON Stringification
關于了解基本原理的重要性
你可能注意到我的代碼筆記經常引用 Kyle 的書,我在上面學到了很多東西,我不是來自計算機科學背景,缺乏很多基本概念,他的書讓我意識到明白基本原來是多么重要,對于那些想要成為高級工程師的人,真正了解基本原理是提升水平的好方法,否則很難提高。你最終知道了問題在那里,但是如果你知道了基本原理,就會知道為什么從而知道如何去解決,總之,強烈推薦這個系列給那些想成為高級程序員的人!
toString()
string.toString(); // 'hello' number.toString(); // '123' boolean.toString(); // 'true' array.toString(); // '1,2,3' object.toString(); // '[object Object]' symbolValue.toString(); // 'Symbol(123)' undefinedValue.toString(); // ? TypeError nullValue.toString(); // ? TypeError
因此對比就留給了 toString 和 String, toString 也執行的不錯,一定要注意的一點就是在 undefined 和 null 下面會拋出異常。
String()
String(string); // 'hello' String(number); // '123' String(boolean); // 'true' String(array); // '1,2,3' String(object); // '[object Object]' String(symbolValue); // 'Symbol(123)' String(undefinedValue); // 'undefined' String(nullValue); // 'null'
最后,我們找到了冠軍
可以看到 String() 處理 undefined 和 null 非常的好 ,不會拋出任何異常。記住我經常說的,你最了解你的程序,因此你應該選擇最適合你的方式。
總結
在展示了所有不同的方法如何處理不同類型的值之后,希望你能意識到這些差異并且知道下次處理代碼時如何使用,如果你不確認,String()是最好的選擇