目錄
1.數據類型
2.JSON字符串
3.數字類型
4.非的布爾值
5.與非比較
一、單獨判斷
1.null
2.undefined
3.0
4.“”
5.判斷undefined、null與NaN:
因為獲取到數據的不確定性,常常會導致一些異常情況,使得頁面報錯,往往要兼容這些異常數據,那么前端的包容性就很重要了。所以這里我對一些異常的數據進行了整理。
const datas = [undefined,null,0,'',false,[],{}]
let param1 = '類型'
let param2 = 'JSON字符串'
let param3 = '轉為數字類型'
let param4 = '非'
let param5 = '與非比較'
console.log(datas) // [undefined, null, 0, "", false, Array(0), {…}]
_.map(datas || [], data=>{param1+=`${typeof (data)},`param2+=`${JSON.stringify(data)},`param3+=`${Number(data)},`param4+=`${!data},`param5+=`${data==!data},`
})
console.log(param1) // 類型 undefined,object,number,string,boolean,object,object,
console.log(param2) // JSON字符串undefined,null,0,"",false,[],{},
console.log(param3) // 轉為數字類型NaN,0,0,0,0,0,NaN,
console.log(param4) // 非true,true,true,true,true,false,false,
console.log(param5) // 與非比較false,false,false,false,false,true,false,
1.數據類型
- 數據的類型包括原始類型(基本類型)和引用類型。
- 原始類型(基本類型)包括字符串、數字、布爾、Null、Undefined,按值訪問,可以操作保存在變量中實際的值。原始類型匯總中null和undefined比較特殊。
- 引用類型包括數組、對象,引用類型的值是保存在內存中的對象。
- 比較特殊的是typeof null返回“object”。
歷史原因,規范嘗試修改typeof null返回“null”修改完大量網站無法訪問,為了兼容,或者說歷史原因返回"object"。
typeof對基本類型和函數對象很方便,但是其他類型就沒辦法了。
判斷一個對象是不是數組?用typeof返回“object”。對對象的判斷常用instanceof。
2.JSON字符串
這里返回的每一個JSON字符串都是它本身的JSON字符,唯一的,單獨判斷的時候,我經常采用這種方法。
3.數字類型
這里undefined和空對象{}是NAN,而空數組為0。
- 但是,將空數組與true進行比較時,結果是false。因為,任意值與布爾值進行比較的時候都會轉換為數值進行比較(我一直以為所有的比較都會轉化為簡單的類型比較,這里比較特殊?),布爾值true為1, false為0,空數組轉換為數字的話是0,所以二者并不相等。
- 如果將兩個數組進行比較, 返回值是false, 因為二者是不同的兩個對象。
- new Array(1)同樣因為雖然長度為1,但值為undefined,轉換為數字仍未0。
console.log(a == true) // false
console.log([] == []) // false
console.log(new Array(1) == false)) // true
4.非的布爾值
引用類型轉換了Boolean均為true,所以空數組和空對象進行布爾轉換時均轉換為true。
5.與非比較
對于空數組[]而言,等式右邊的空數組被轉換為了一個布爾值,空數組是true,取反是false;數組左邊與布爾值進行比較(任意值與布爾值進行比較的時候都會轉換為數值進行比較),需要將二者都轉換為數數字,左側空數組轉換為0, 右側相當于false轉換為數字,也是0, 所以二者相等。但是如果是全等比較則不相等,因為不會發生類型轉換。
一、單獨判斷
1.null
和數字運算時,10 + null結果為:10;10 + undefined結果為:NaN。
let a =null
JSON.stringify(a)=='null' // true
-
關系運算符 和 相等運算符 并不是一個類別的.
-
關系運算符,在設計上總是需要運算元嘗試轉為一個number,而相等運算符在設計上,則沒有這方面的考慮.
null > 0 // null 嘗試轉型為number , 則為0 . 所以結果為 false,
null >= 0 // null 嘗試轉為number ,則為0 , 結果為 true.
null == 0 // null在設計上,在此處不嘗試轉型. 所以 結果為false.
2.undefined
undefined表示"缺少值",就是此處應該有一個值,但是還沒有定義。典型用法是:
(1)變量被聲明了,但沒有賦值時,就等于undefined。
(2) 調用函數時,應該提供的參數沒有提供,該參數等于undefined。
(3)對象沒有賦值的屬性,該屬性的值為undefined。
(4)函數沒有返回值時,默認返回undefined。
null是一個表示"無"的對象,轉為數值時為0;undefined是一個表示"無"的原始值,轉為數值時為NaN。
3.0
0與一些虛值的比較:
console.log(0 == ''); //true
console.log(0 == false); //true
console.log(0==[]); //true
console.log(0==NaN);//false
console.log(0==undefined);//false
console.log(0==null);//false
console.log(0=={});//false console.log(null == undefined); //true
console.log(false == null); //false
console.log(false == undefined);//false
?
4.“”
“”與一些虛值的比較:
console.log('' == false); //true
console.log(''==[]);//true
console.log(''==undefined);//false
console.log(''==null);//false
console.log(''==NAN);//false
console.log(''=={});//false
?
5.判斷undefined、null與NaN:
var tmp = null;
if (!tmp)
{ alert("null or undefined or NaN");
}
?
提示:一般不那么區分就使用這個足夠。
---------------------
作者:weixin_33814685
來源:CSDN
原文:https://blog.csdn.net/weixin_33814685/article/details/87515835
版權聲明:本文為作者原創文章,轉載請附上博文鏈接!