- JavaScript重難點(diǎn)實(shí)例精講
- 周雄
- 816字
- 2020-10-30 15:51:55
1.6 JavaScript中常用的判空方法
在JavaScript中判斷一個(gè)變量是否為空時(shí),我們往往會(huì)想到對變量取反,然后判斷是否為true。
if(!x){}
這是一個(gè)便捷判斷變量是否為空的方法,但是其涉及的場景卻很多,這里我們就分多種情況來討論變量判空的方法。
1. 判斷變量為空對象
(1)判斷變量為null或者undefined
判斷一個(gè)變量是否為空時(shí),可以直接將變量與null或者undefined相比較,需要注意雙等于(==)和三等于(===)的區(qū)別。
if(obj == null) {} // 可以判斷null或者unde?ned if(obj === unde?ned) {} // 只能判斷unde?ned
(2)判斷變量為空對象{}
判斷一個(gè)變量是否為空對象時(shí),可以通過for...in語句遍歷變量的屬性,然后調(diào)用hasOwnProperty()函數(shù),判斷是否有自身存在的屬性,如果存在則不為空對象,如果不存在自身的屬性(不包括繼承的屬性),那么變量為空對象。
// 判斷變量為空 function isEmpty(obj) { for(let key in obj) { if(obj.hasOwnProperty(key)) { return false; } } return true; }
我們通過以下語句來做測試。
// 定義空的對象字面量 var o = {}; function Person() {} Person.prototype.name = 'kingx'; // 通過new操作符獲取對象 var p = new Person(); console.log(isEmpty(o)); // true console.log(isEmpty(p)); // true
針對變量o,很明顯是一個(gè)空對象,返回“true”。
而變量p是通過new操作符得到的Person對象的實(shí)例,所以p會(huì)繼承Person原型鏈上的name屬性,但是因?yàn)椴皇亲陨淼膶傩?,所以?huì)被判為空,返回“true”。
2. 判斷變量為空數(shù)組
判斷變量是否為空數(shù)組時(shí),首先需要判斷變量是否為數(shù)組,然后通過數(shù)組的length屬性確定。
arr instanceof Array && arr.length === 0
當(dāng)以上兩個(gè)條件都滿足時(shí),變量是一個(gè)空數(shù)組。
3. 判斷變量為空字符串
判斷變量是否為空字符串時(shí),可以直接將其與空字符串相比較,或者調(diào)用trim()函數(shù)去掉前后的空格,然后判斷字符串的長度。
str == '' || str.trim().length == 0;
當(dāng)滿足以上兩個(gè)條件中任意一個(gè)時(shí),變量是一個(gè)空字符串。
4. 判斷變量為0或者NaN
當(dāng)一個(gè)變量為Number類型時(shí),判空即判斷變量是否為0或者NaN,因?yàn)镹aN與任何值比較都為false,所以我們可以通過取非運(yùn)算符完成。
!(Number(num) && num) == true;
當(dāng)上述語句返回“true”時(shí),表示變量為0或者NaN。
5. !x == true的所有情況
本小節(jié)一開始就講到!x為true時(shí),會(huì)包含很多種情況,這里我們一起來總結(jié)下。
· 變量為null。
· 變量為undefined。
· 變量為空字符串' '。
· 變量為數(shù)字0,包括+0、-0。
· 變量為NaN。
- 機(jī)器學(xué)習(xí)系統(tǒng):設(shè)計(jì)和實(shí)現(xiàn)
- Java Web基礎(chǔ)與實(shí)例教程(第2版·微課版)
- C語言程序設(shè)計(jì)基礎(chǔ)與實(shí)驗(yàn)指導(dǎo)
- Scala Design Patterns
- Getting Started with PowerShell
- Android NDK Beginner’s Guide
- TypeScript圖形渲染實(shí)戰(zhàn):基于WebGL的3D架構(gòu)與實(shí)現(xiàn)
- QTP自動(dòng)化測試進(jìn)階
- Hands-On Microservices with Kotlin
- Functional Kotlin
- Java 11 Cookbook
- 程序是怎樣跑起來的(第3版)
- Java EE 8 and Angular
- XML程序設(shè)計(jì)(第二版)
- Flutter之旅