js空数组是true or false
2017-05-14 20:01
495 查看
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
因为![]为false,[]与![]比较相当于[]与false进行比较
如何避免数组与布尔值比较时出现的坑呢?可以先把数组转化为布尔值:
Boolean(arr) == true; // true
new Array() == []; //false
就和new Array() == new Array()一样。是不同的两个对象。
new Array(1) == false; // true,虽然数组的长度为1,但还是一个空数组Number[new Array()]为0 [undefined] == false; // true,虽然[undefined].length为1,Number([undefined])为0;
相关文章推荐
- PL/SQL的Boolean的三个值:TRUE,FALSE,NULL两两进行AND,OR操作的值
- GridView性别列在数据库是bool型字段true or false,如何让其在页面中显示为男女?
- warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)
- Unrecognized token 'ename': was expecting ('true', 'false' or 'null')(ajax中data动态获取数据)
- null返回的true or false
- True or False? and WHY??? Java HashSet Contains
- True or False? and WHY??? Java HashSet Contains
- Python小技巧 – True or False
- 论android:hardwareAccelerated="true"or"false"硬件加速的重要性(注:galleryiew/carview))
- 检查字符串是否为电话号码或邮箱地址方法,并返回true or false的判断值
- 检查字符串是否为电话号码或邮箱地址方法,并返回true or false的判断值
- JavaScript里面的几个true or false
- 119、 android:hardwareAccelerated="true"or"false"硬件加速的重要性
- 《人月神话》的观点:是或非?(Propositions of the Mythical Man-Month: True or False?)——摘自《人月神话》
- 编译提示: warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)
- true or false
- 一个button同时执行多个有返回值的函数的解决方法(return false; or return true;)
- if语句在判定后会产生一个值:true or false !
- [android警告] AndroidManifest.xml警告 Should explicitly set android:allowBackup to true or false
- true or false