【JavaScript 學以致用】值的判斷以及型別轉換

jokingzhang發表於2019-04-14

引言

來到北京已經有4個年頭了,做過一些測試、打雜、前端的工作之後,最後還是選擇了前端的工作。現階段主要還是在寫業務程式碼,程式碼質量,工作效率就顯得尤為重要。【學以致用】這個系列主要記錄一些平時工作、學習遇到的一些問題,方便以後查漏補缺。

value

JavaScript 中原始型別的值,包括字串、數字、布林值、Symbol(ES6新增),以及兩個特殊值:null(空)、undefined(未定義)。

通常我們在工作的時候需要和後臺對接,函式在處理返回值的時候如果做了容錯判斷,把資料轉換成我們想要的型別,在編寫後續業務程式碼的時候就會更加輕鬆 :-D

下圖是 《JavaScript權威指南》中關於型別轉換的總結:

【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()獲取原始值的時候,則會丟擲一個型別錯誤異常。
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()獲取原始值的時候,則會丟擲一個型別錯誤異常。
Number([1,2,3])  // NaN 原始型別
Number(function(x) {return x+1;})  // NaN
Number("/\d+/g") // NaN
Number(new Date(2019,4,14)) // 1557763200000複製程式碼

參考文章

  • JavaScript 權威指南 - 第三章:型別、值和變數


相關文章