js中null,undefined,false,0,'',[],{}判斷方法

目錄

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
  1. 關系運算符 和 相等運算符 并不是一個類別的.

  2. 關系運算符,在設計上總是需要運算元嘗試轉為一個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
版權聲明:本文為作者原創文章,轉載請附上博文鏈接!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/285786.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/285786.shtml
英文地址,請注明出處:http://en.pswp.cn/news/285786.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【GIS風暴】30米分辨率地表覆蓋數據GlobeLand30原始數據集簡介及下載地址

數據集預覽: GlobeLand30是30米空間分辨率全球地表覆蓋數據,目前可供下載使用的有3年的數據:2000-2010-2020,本文主要講述GlobeLand30的官網下載地址和數據集簡介。 數據處理方法、成果數據下載: 【ArcGIS風暴】ArcGI…

Git之解決git stash pop多次產生的文件沖突問題

1、問題 我們用git命令一般拉取線上代碼的時候,本地修改了,我們一般先git stash下,接下來git pull, 然后git stash pop下,但是我新增了文件,沒有添加到本地git(也就是沒有git add file這個新增加的文件),然…

記一次意外

今天嘗試給同一個對象綁定多個事件: document.getElementById("a").οnfοcus function(){ alert("1") }.οnclick function(){ alert("2") } 發現彈出2,改變focus和click的順序后依舊如此&…

一、基礎折線圖詳解《手把手教你 ECharts 數據可視化詳解》

注:本系列教程需要對應 JavaScript 、html、css 基礎,否則將會導致閱讀時困難,本教程將會從 ECharts 的官方示例出發,詳解每一個示例實現,從中學習 ECharts 。 ECharts 官方示例:https://echarts.apache.o…

NLog自定義Target之MQTT

NLog是.Net中最流行的日志記錄開源項目(之一),它靈活、免費、開源官方支持文件、網絡(TCP、UDP)、數據庫、控制臺等輸出社區支持Elastic、Seq等日志平臺輸出實時日志需求在工業物聯網等特定場景下需要實時獲取日志信息工業物聯網領域常用的是mqtt協議那我們就使用NL…

2016-1-27

2019獨角獸企業重金招聘Python工程師標準>>> 1.前端的三大技能:1.1.描述網頁內容html 1.2.描述網頁樣式css 1.3.描述網頁行為js2.html和jsp區別在于靜態和動態..bootsharp是目前比較火爆的css..angular是目前比較火爆的js.3.單點登陸(SSO):登陸一次就可以訪問所有相…

【ArcGIS風暴】ArcGIS生成GlobeLand30土地利用數據集中國區域行列號shp格式對照圖(附shp下載)

效果預覽: 本文主要講述了在ArcGIS中生成GlobeLand中國區域對照行列號的shp格式矢量數據,用途在于將自己的研究區跟行列號矢量圖層直接疊加顯示,快速找出自己所需要的圖幅號,便于快速下載數據。同時為了方便使用,本文提供了對照圖的下載。 文章目錄 1. 創建文件數據庫2. 創…

Android 節操視頻播放器jiecaovideoplayer自定義播放音頻使用:屏蔽全屏按鈕,增加倒計時,當前時間/總時間

一、屏蔽全屏按鈕 找到JCVideoPlayerStandard.java文件中的代碼: private void fixAudio() {if (SrcType.equalsIgnoreCase("Audio")) {//如果是音頻,始終顯示coverImageView//thumbImageView.setVisibility(View.VISIBLE);coverImageView.se…

Android之Dialog提示Unable to add window -- token is not valid; is your activity running?

1、問題 Dialog奔潰提示Unable to add window -- token android.os.BinderProxy@b251dbc is not valid; is your activity running? 2、解決辦法 傳遞context到dialog的時候,要記得先判斷狀態是不是isFinishing或者isDestroyed狀態,這個時候就不要再去show相關的dialog了,…

nagios監控haproxy(借助腳本)

nagios監控haproxy(借助腳本) 修改后的腳本如下(需添加指示燈的狀態) # vi haproxy.sh #!/bin/bash Portnetstat -ntpl | grep haproxy | awk -F[:" "] {print $5} if [ $Port "1080" ];then echo "OK …

一、Qt初嘗試,做一個QT計算器《QT 入門到實戰》

學習目標 了解 qt 的基本信息了解 qt 的下載及安裝了解創建一個基本 qt 項目的流程了解信號與槽通過示例了解信號與槽的設置與編寫了解控件添加的方式了解控件如何使用代碼獲取其文本了解控件如何使用代碼設置其文本使用 connect 自定義信號與槽了解使用樣式修飾控件外觀了解使…

VS C#語言獲取輸入名稱的漢語拼音簡拼碼和全拼碼完整案例教程

結果預覽: 擴展閱讀: SQL語言獲取拼音碼:SQL Server編寫函數獲取漢字的拼音碼(簡拼) 文章目錄 1. 拼音碼類編寫2. 界面設計3. 前端調用4. 結果展示1. 拼音碼類編寫 打開Visual Studio,新建一個Winform項目,再添加一個類文件,命名為PYM。 鍵入如下代碼: using Syst…

iOS duplicate symbol for architecture arm64 解決辦法

導致這個問題的原因有多種: 1.重復定義了const常量。 2.多個第三方庫同時用到了某個函數庫。 暫時列舉這幾種,以后遇到了其他原因再加。轉載于:https://www.cnblogs.com/zhanglinfeng/p/5987077.html

WPF 實現星空效果

本文經原作者授權以原創方式二次分享,歡迎轉載、分享。原文作者:普通的地球人原文地址:https://www.cnblogs.com/tsliwei/p/6282183.htmlGithub地址:https://github.com/WPFDevelopersOrg/WPFDevelopers效果前陣子看到ay的蜘蛛網效…

data類型的Url的格式

data類型的Url的格式 一、data類型的簡介 所謂"data"類型的Url格式,是在RFC2397中提出的,目的對于一些“小”的數據,可以在網頁中直接嵌入,而不是從外部文件載入。例如對于img這個Tag,哪怕 這個圖片非常非…

C語言試題八十之統計單詞個數

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 終端輸入一…

SSIS 執行變量中的腳步輸出列順序與SQL查詢列順序不同

這個問題是朋友遇到的,做一個SSIS的程序將數據導入到txt。然后再用Oracle的工具導入到Oracle。但是在SSIS中執行變量腳步的時候,發現輸出的列名稱跟查詢的列名稱完全不同。比如Schema_id在查詢的第三列,但是輸出的時候到了第6列。 如圖&#…

【ArcGIS風暴】ArcGIS自定義坐標系統案例教程---以阿爾伯斯投影(Albers)為例

在實際工作中,經常需要進行矢量數據或柵格數據的投影轉換工作,但有時候ArcGIS中恰恰沒有我們需要的坐標系,此時,就需要我們自定義坐標系。本文以阿爾伯斯投影(Albers)為例,講解自定義投影的一般過程及注意事項。 文章目錄 1. 確定投影名稱2. 選擇投影坐標系及修改參數4.…

C語言試題八十一之利用遞歸函數調用方式,將所輸入的5個字符,相反順序打印

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 利用遞歸函…

Unity5 GI與PBS渲染從用法到著色代碼

本文主要介紹Untiy5以后的GI,PBS,以及光源探頭,反射探頭的用法以及在著色器代碼中如何發揮作用,GI是如何影響渲染的,主要分成三個部分,最開始說明PBS需要的材質與相應概念,二是Unity 里相應GI的…