我们项目中常常需要判断一些变量是否为空,但是由于js的机制找不到很好的方法去统一判断方式,我们不妨先了解一下js中if判断机制

if判断机制

js中if会把非 Boolean 表达式转换为 Boolean 值,此时遵循以下几个规则:

①所有的对象object(数组也算object对象)都被当作 true。

②"" 、null 、undefined 、0 、NaN 、false 当作 false。

let a = ""
if(!a){ //a为falseconsole.log("a的值为空")//输出 a的值为空
}
let b = []
if(!b){ //b为trueconsole.log("b是个空数组")
}//不输出

所以,我们没办法用 if(变量) 来判断对象类型和数组类型,那我们能否用==或者===来判断呢?

==运行机制

①判断两边是否有NaN,如果有则一律返回false

②判断两边是否含有布尔值,如果有的话则将true转化为1,false转化为0。

③遇到null或者undefined,则不会进行类型转换,它们相互的比较都返回true。

④两边同为字符串时,直接比较

⑤一边为数字一边为字符串时转换为数字进行比较

⑥对象或者数组类型,则需要调用(数组使用)toString()或者(对象优先调用,不行则再调用toString())valueOf()方法转化成简单类型,然后进行比较

console.log([] == false)// 输出true
console.log(null == false)// 输出false

由此可见,想用 变量==false 进行判断,虽然解决了空数组的判断,但是null、undefined、NaN都没办法进行正确判断

所以,我们一般直接 if(变量) 判断基本类型 , 数组对象分开讨论

数组判断是否为空

1.根据长度判断,[]的长度为0

let arr = []
if(arr.length){//arr.length会转化为boolean值,长度为0则为false,有长度则为trueconsole.log("arr不是空数组")
}

2.转化为字符串,和'[]'比较

let arr = []
if(JSON.stringify(arr) === '[]'){// trueconsole.log("arr是空数组") // 输出arr是空数组
}

3.数组==false进行判断

let arr = []
if(arr == false){// trueconsole.log("arr是空数组")// 输出arr是空数组
}

对象判断是否为空

1.转化为字符串,和'{}'比较

let obj = {}
if(JSON.stringify(obj) === '{}'){// trueconsole.log("obj是空对象") // 输出obj是空数组
}

2.遍历对象,没有属性就是空 (比较繁琐)

let obj = {}
for(let key in obj) {
console.log("obj不是空对象");
return
}
console.log("obj是空对象")

3.ES6的Object.keys()方法 : 将对象中的key转成一个数组,再判断数组是否为空

let obj = {}
let arr = Object.keys(obj);
if(arr.length === 0){// trueconsole.log("obj是空对象")//输出我是空对象
}

4.getOwnPropertyNames()的方法 : 将对象中的除原型属性以外的所有属性转成一个数组类似Object.keys()

let obj = {}
let arr = Object.getOwnPropertyNames(obj);
if(arr.length === 0){// trueconsole.log("obj是空对象")//输出我是空对象
}

js中if到底该如何判断变量为空?相关推荐

  1. js中‘0’到底是 true 还是 false

    js中'0'到底是 true 还是 false   if ('0') alert("'0' is true");   if ('0' == false) alert("' ...

  2. sql中查询当天时间和判断参数为空的坑

    sql中查询当天时间和判断参数为空的坑 根据时间查询的时候,如何查询当天 Mysql将参数为0的数,也归纳到 ' ' 中: # 实例: 根据时间查询的时候,如何查询当天 查询当天时间内的数据时,需要注 ...

  3. JS中true和false的判断

    简介 学习和使用js的时候对于true和false的判断总是非常纠结,接下来做一个总结.JS中属于弱类型语言,这在一定程度上提供了方便,同时也为理解加大了阻碍,其中"=="和&qu ...

  4. ***PHP中判断变量为空的几种方法

    总结PHP中,"NULL" 和 "空" 是2个概念. isset  主要用来判断变量是否被初始化过 empty  可以将值为 "假".&qu ...

  5. 判断变量是空_关于“情境中的随机变量”的思考

    Skinner的 <Verbal Behavior >一书,第九章"多重因(multiple causation)第251页中有这样一段话: Give me a word beg ...

  6. frameset嵌套多个html,在一个html的js中调用另一个html的变量和函数(导航栏更新个人图标)

    毕业设计要做注册后更新性别后导航栏的个人图标也随之改变,在frameset中做的两个html互相调用函数怎么都是undefined,终于实验成功了. test1.html <!DOCTYPE h ...

  7. js中True、False如何判断

    主要总结下js判断0,1,-1,先看结果 js数字型和布尔型比,会把布尔型转化数字型,true为1,false为0: 那为啥-1也是true呢? js规定所有的正负整数都是true,只有0是false ...

  8. js中一种常见条件判断if(var)的坑

    在处理js代码判断真假时经常会这么写. //从某个地方获取的值. var vale = fun(......... );if(!value){进入这里表示value的布尔值为false } 我们知道, ...

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

    目录 1.数据类型 2.JSON字符串 3.数字类型 4.非的布尔值 5.与非比较 一.单独判断 1.null 2.undefined 3.0 4."" 5.判断undefined ...

最新文章

  1. Lucene+Tika 文件索引的创建与搜索
  2. linux hive的作用,Hive的基本应用 - Hadoop和Hive的实践应用_服务器应用_Linux公社-Linux系统门户网站...
  3. python之---Python深入06 Python的内存管理
  4. 按键精灵手机助手之实战篇(三)通用方法
  5. 基于Java毕业设计大学生旅游拼团网站源码+系统+mysql+lw文档+部署软件
  6. 词根词缀【-vict=vinc】
  7. 淘宝/天猫/京东/拼多多618抢购软件,抢购助手支持淘金币任务,附上源码
  8. oracle ap tp是什么,AP模式和Router模式区别是什么
  9. 不同大小硬盘对拷oracle,硬盘对拷方式克隆时必须注意一个大问题
  10. 百度云盘在线解析不限速下载网盘网站源码
  11. kjb文件 解析_Python 之父再发文:构建一个 PEG 解析器
  12. 【有利可图网】配色攻略-黄色篇
  13. SQL Server 备份还原单个数据表
  14. 如何给PPT加上页码?
  15. JSP, Servlet常见面试题详解
  16. opencv 彩色图像对比度增强
  17. 直接修改class文件的方式
  18. SMA、EMA与双均线策略
  19. Python:一个闹钟
  20. 硬件基础知识---如何设计一个三极管放大电路

热门文章

  1. Bugku Misc 清凉一夏 wp
  2. 【bzoj4605】崂山白花蛇草水 权值线段树套KD-tree
  3. 程序化物件放置(procedural placement)之泊松硬盘采样(poisson disk sampling)
  4. 《凸优化》7 学习笔记
  5. 区块链双花攻击和自私采矿攻击的系统防御概述 论文解读
  6. web渗透之文件上传漏洞
  7. Java8-----系统复习及扫盲(3)--函数式编程学习
  8. 计算机专业的创新创业之路,大学生创新创业项目对计算机专业建设的有益探索.doc...
  9. python3.7.4游戏代码,Python3+Pygame实现射击游戏完整代码
  10. 【示波器专题】示波器的频响方式