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

因为获取到数据的不确定性,常常会导致一些异常情况,使得页面报错,往往要兼容这些异常数据,那么前端的包容性就很重要了。所以这里我对一些异常的数据进行了整理。

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"); 
}

提示:一般不那么区分就使用这个足够。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,057评论 0 13
  • 第三章 类型、值和变量 1、存取字符串、数字或布尔值的属性时创建的临时对象称做包装对象,它只是偶尔用来区分字符串值...
    坤少卡卡阅读 582评论 0 1
  • 逆鳞第一次登场是在韩非的剑盒中,气息非常强大,外从观上看剑体已经支离破碎,但它却有强大的剑灵存在 在韩非遭遇刺杀时...
    今天方程式阅读 825评论 0 0
  • 时间,就像一个小偷 悄无声息地偷走了我们的青春 懵懵懂懂地 我们长大 直到有一天,偶然~ 翻开了尘封已久的相册 发...
    扑通扑通那个夏天阅读 213评论 4 10
  • 工作日的下午,电影院里的人三三两两,今天打算看《二十二》。作为一部纪录片,99分钟里没有太多情节,说一些自己感受深...
    yaparis阅读 167评论 0 0