引言
來到北京已經有4個年頭了,做過一些測試、打雜、前端的工作之後,最後還是選擇了前端的工作。現階段主要還是在寫業務程式碼,程式碼質量,工作效率就顯得尤為重要。【學以致用】這個系列主要記錄一些平時工作、學習遇到的一些問題,方便以後查漏補缺。
value
JavaScript 中原始型別的值,包括字串、數字、布林值、Symbol(ES6新增),以及兩個特殊值:null(空)、undefined(未定義)。
通常我們在工作的時候需要和後臺對接,函式在處理返回值的時候如果做了容錯判斷,把資料轉換成我們想要的型別,在編寫後續業務程式碼的時候就會更加輕鬆 :-D
下圖是 《JavaScript權威指南》中關於型別轉換的總結:
舉個栗子:後臺返回值為一個字串,內容是0 ~ 5的數字,現在使用的時候需要將引數轉化為數字型別。
// wrong
return Number(value)
// '' -> 0
// undefined -> throw TypeError
// 'aaa' -> NaN
// right 前面是剔除掉 '' undefined ,後面可以剔除掉 NaN 的型別
if (value && Number(value) >= 0) {
return Number(value);
} else {
return null;
}複製程式碼
關於值的比較,當我們只關心值是否正常時,還有一個比較靠譜的方法:正規表示式,上面的例子也可以這樣來寫:
if (/[0-5]/.test(value)) {
return Number(value);
} else {
return null;
}複製程式碼
小結:在判斷兩個值是否相等時,最好顯式的轉化,然後用全等運算子 ===
或者 !==
來比較。
js比較表:dorey.github.io/JavaS...
物件轉換為原始值
所有物件會繼承兩個方法toString()
和valueOf()
。
物件轉換為字串
String(Object)
- 1、當物件具有
toString()
會優先呼叫; - 2、如果沒有
toString()
方法,或者toString()
沒有返回一個原始值,則會呼叫valueOf()
方法; - 3、無法從
toString()
和valueOf()
獲取原始值的時候,則會丟擲一個型別錯誤異常。
- 1、當物件具有
String([1,2,3]) // "1,2,3"
String(function(x) {return x+1;}) // "function(x) {return x+1;}"
String("/\d+/g") // "/\d+/g"
String(new Date(2019,4,14)) // "Tue May 14 2019 00:00:00 GMT+0800 (中國標準時間)"複製程式碼
物件轉換為數字
Number(Object)
- 1、當物件具有
valueOf()
會優先呼叫; - 2、如果沒有
valueOf()
方法,或者valueOf()
沒有返回一個原始值,則會呼叫toString()
方法; - 3、無法從
toString()
和valueOf()
獲取原始值的時候,則會丟擲一個型別錯誤異常。
- 1、當物件具有
Number([1,2,3]) // NaN 原始型別
Number(function(x) {return x+1;}) // NaN
Number("/\d+/g") // NaN
Number(new Date(2019,4,14)) // 1557763200000複製程式碼
參考文章
- JavaScript 權威指南 - 第三章:型別、值和變數