js 空数组是true还是false
2024-08-30 12:12:40
var arr = new Array();
// 或 var arr = [];
我们知道,初始化后,即使数组arr中没有元素,也是一个object。
typeof arr;
// "object"
既然是object,用于判断条件时就会被转化为true
if(arr)console.log("it's true");
// it's true
但是,如果将arr与布尔值比较:
arr == false;
// true
arr == true;
// false
可是,如果把arr转化为Boolean,的确是true:
Boolean(arr);
// true
那arr与布尔值比较时,到底发生了什么?
原来,任意值与布尔值比较,都会将两边的值转化为Number。
如arr与false比较,false转化为0,而arr为空数组,也转化为0:
Number(false)
// 0
Number(arr)
// 0
所以,当空数组作为判断条件时,相当于true。当空数组与布尔值直接比较时,相当于false。
也就出现了以下令人绕圈的现象:
[] == ![];
// true
如何避免数组与布尔值比较时出现的坑呢?可以先把数组转化为布尔值:
Boolean(arr) == true;
// true
有同学问:
new Array() == [];
必须是false,就和new Array() == new Array()一样。是不同的两个对象。
但有个问题很奇怪:
new Array(1) == false;
// true // 或 [undefined] == false;
// true
这个怎么解释呢?Number(new Array(1))为什么会是0呢?
最新文章
- C# 获取当前月第一天和最后一天 计算两个日期差多少天
- Linux进程管理
- Jboss EAP:native management API学习
- Liferay 6.2 改造系列之十五:修改默认可用语言
- HTML5之语义化标签
- c# 关键字delegate、event(委托与事件)[MSDN原文摘录][1]
- Configuring Report Manager
- 配置oschina for pc 开发环境
- Struts2 单个文件上传/多文件上传
- jquery图片上传
- SQL使用记录
- DataFrame的构建及一些操作
- RabbitMQ之Topics(多规则路由)
- Android 音视频开发学习思路
- Spring Security(五):2.2 History
- lamp环境搭建(apache安装,mysql安装,php安装)
- Hbase 过滤器的使用
- Reduce 和 Transduce 的含义
- Liunx-cp命令
- 使用sso(cas)的时候报单点登录service不匹配问题分析及解决
热门文章
- .net framework多个版本在IIS服务器上时应注意-重新注册IIS-错误Server Application Unavailable
- excel文件导入mysql
- processing fill()和stroke()函数
- openvpn 的安装和使用
- 深入理解Linux内核-进程地址空间
- Shell中整数比較
- 在TypeScript中扩展JavaScript基础对象的功能
- 安装mysql提示3306端口已经被占用解决方案
- uwsgi -- unavailable modifier requested: 0 -- 的解决办法
- LearnOpenGL 你好,三角形[转]--附源码