js 空数组 空对象判断
js 空数组是true还是false
1
2
|
var arr = new Array(); // 或 var arr = []; |
我们知道,初始化后,即使数组arr中没有元素,也是一个object。
1
2
|
typeof arr; // "object" |
既然是object,用于判断条件时就会被转化为true
1
2
|
if (arr)console.log( "it's true" ); // it's true |
但是,如果将arr与布尔值比较:
1
2
3
4
|
arr == false ; // true arr == true ; // false |
可是,如果把arr转化为Boolean,的确是true:
1
2
|
Boolean(arr); // true |
那arr与布尔值比较时,到底发生了什么?
原来,任意值与布尔值比较,都会将两边的值转化为Number。
如arr与false比较,false转化为0,而arr为空数组,也转化为0:
1
2
3
4
|
Number( false ) // 0 Number(arr) // 0 |
所以,当空数组作为判断条件时,相当于true。当空数组与布尔值直接比较时,相当于false。
也就出现了以下令人绕圈的现象:
1
2
|
[] == ![]; // true |
如何避免数组与布尔值比较时出现的坑呢?可以先把数组转化为布尔值:
1
2
|
Boolean(arr) == true ; // true |
有同学问:
1
|
new Array() == []; |
必须是false,就和new Array() == new Array()一样。是不同的两个对象。
但有个问题很奇怪:
1
2
3
4
5
6
7
|
new Array(1) == false ; // true // 或 [undefined] == false ; // true |
这个怎么解释呢?Number(new Array(1))为什么会是0呢?地址引用不一样
js 空数组 空对象判断的更多相关文章
- 处理 JSON null 和空数组及对象
描述了对 JSON 数据中使用的 null 和空数组及对象的处理. JSON 数据具有 null 和空数组及对象的概念.此部分说明其中每个概念如何映射到 null 和未设置的数据对象概念. Null ...
- PHP json_encode转换空数组为对象
问题描述: php返回json格式的数据,当返回数据的为数组,且key为字符串时,json化后将返回jsonObject,但是如果是空数组,有可能返回的就是jsonArray,数据结构不一致导致端解析 ...
- js之数组,对象,类数组对象
许久不写了,实在是不知道写点什么,正好最近有个同事问了个问题,关于数组,对象和类数组的,仔细说起来都是基础,其实都没什么好讲的,不过看到还是有很多朋友有些迷糊,这里就简单对于定义以及一下相同点,不同点 ...
- js的数组与对象关系
有的时候总犯糊涂,不理解对象和数组的关系,转载一篇文章,深刻记忆一下 http://hi.baidu.com/samdan/item/05179313d1ee4b9e99ce3371 比如有一个数组a ...
- js 笔记 数组(对象)
一.javascript push 的元素为指针 var data = {"test":{"201308":"23","20130 ...
- js中数组Array对象的方法sort()的应用
一. sort()方法的介绍 //给一组数据排序 var arrNum = [12,1,9,23,56,100,88,66]; console.log("排序前的数组:"+arrN ...
- js引用类型数组去重-对象标记法
前言 Js数组去重已经有很多种实现方式:包括逐个检索对比(使用Array.property.indexOf),先排序后对比,使用hash表,利用ES6中的Set()等.这些数组去重办法中速度最快的是h ...
- js 中数组或者对象的深拷贝和浅拷贝
浅拷贝 : 就是两个js 对象指向同一块内存地址,所以当obj1 ,obj2指向obj3的时候,一旦其中一个改变,其他的便会改变! 深拷贝:就是重新复制一块内存,这样就不会互相影响. 有些时候我们定义 ...
- js中数组和对象的合并
1 数组合并 1.1 concat 方法 1 2 3 4 var a=[1,2,3],b=[4,5,6]; var c=a.concat(b); console.log(c);// 1,2,3,4,5 ...
随机推荐
- Java线程之CompletionService批处理任务
如果你向Executor提交了一个批处理任务,并且希望在它们完成后获得结果,怎么办呢? 为此你可以保存与每个任务相关联的Future,然后不断地调用 timeout为零的get,来检验Future是否 ...
- UE4与Visual Studio版本对应关系
首先,要注意,Visual Studio 2015(VS2015)默认安装时并不包含 C++ 的工具.在安装 VS2015 时,需选择 自定义 安装并勾选 C++ 组件,这对之后的工作时必须的.如果已 ...
- [UIImage _isCached]: message sent to deallocated instance
本文转载至 http://zhuhaibobb.blog.163.com/blog/static/2744006720124191633375/ 这几天做了个APP打开20份钟左右就强制退 ...
- cobbler上部署centos系统修改网卡地址成eth0
编辑cobbler的profile文件: cobbler profile edit --name=CentOS-7.2-x86_64 --kopts='net.ifnames=0 biosdevn ...
- eclipse 的代码着色插件 --Eclipse Color Theme
Eclipse Color ThemeEclipse自带的背景颜色是白色的,很伤眼睛,故而安装一个颜色和主题插件,来改变代码区域的背景颜色以及关键字的颜色. 网址:http://eclipsecolo ...
- linux如何查看某个pid的进程?
Linux通过PID查看进程完整信息 [root@gsidc-4q-saas23 ~]# netstat -anp|grep 8282tcp 0 0 :::8282 :::* LISTEN 16923 ...
- hibernate的.hbm.xml文件文件配置属性详解
一般.hbm.xml文件如下面: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "- ...
- Boss Group Worker Group NioEventLoopGroup
宜人贷蜂巢API网关技术解密之Netty使用实践 - honeycomb2017的博客 - CSDN博客 https://blog.csdn.net/honeycomb2017/article/det ...
- TCP implements its own acknowledgment scheme to guarantee successful data delivery
wTCP本身已经确保传输的成功性. HTTP The Definitive Guide 4.2.4 Delayed Acknowledgments Because the Internet itsel ...
- python基础-第二篇-基本数据类型
一.运算符 1.算数运算: 算数运算符相信大家都不陌生吧,尤其是加减乘除,好!那我就带着大家看看最后三个,这三个到底是干什么玩意的? %,取两数相除的余数,看图: **,x的多少次幂,看图: //,取 ...