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.mzph.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的…