js 空数组是true还是false
- 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呢?
js 空数组是true还是false的更多相关文章
- js 空数组 空对象判断
js 空数组是true还是false 1 2 var arr = new Array(); // 或 var arr = []; 我们知道,初始化后,即使数组arr中没有元素,也是一个object ...
- js空数组
首先我们定义一个空的数组: var a = [ ]; 数组a里面是空的没有值,接下来我们打印: console.log(!!a); 因为数组是空的,此处应该为false. 恰好相反,!!a为true. ...
- JS空数组的判断
前言 最近在做一个mini项目,被大神各种鄙视,基础知识确实是不扎实,加油加油.好了,不多废话,抽空写写遇到的两个知识点,就记录下来,写博客还是能帮忙整理记录的,不然过了就忘记了. input监听值改 ...
- js中return ,return true,return false;区别
js中return:.return true.return false;区别 转:https://www.cnblogs.com/camikehuihui/p/7999537.html 一.返回控制与 ...
- js判断语句关于true和false后面跟数字或字符串的问题
我经常在代码中看到很长串判断,看到就头疼,简单的整理一下. 比如:(client.top>=0&&client.left>=0&&client.bottom ...
- JS各种变量是true或者false列表
如果操作数是一个对象,返回true 如果操作数是一个空字符串,返回false如果操作数是一个非空字符串,返回true如果操作数是数值0,返回false如果操作数是任意非0数值(包括Infinity), ...
- js中关于假值和空数组的总结
先上x==y运算符的算法细节: 如果x不是正常值(比如抛出一个错误),中断执行. 如果y不是正常值,中断执行. 如果Type(x)与Type(y)相同,执行严格相等运算x === y. 如果x是nul ...
- 关于JavaScript中0、空字符串、'0'是true还是false的总结
最近被问到关于js中空字符串是true还是false得问题,一时间没想起来,现在在chrome的console面板上输出代码测试一下. "" == false 结果是true ...
- js 判断是否为空对象、空数组
当需要判断参数是否为空时,总希望 js 能够提供原生的判断方法,可惜并没有,只能自己封装了. function isEmpty(obj) { // 检验 undefined 和 null if(!ob ...
随机推荐
- 使用NPOI 转换Excel TO HTML (导出格式不如原生Excel好看)
//HSSFWorkbook workbook = ExcelToHtmlUtils.LoadXls(strPath); //ExcelToHtmlConverter excelToHtmlConve ...
- javaweb下载文件
//读取文件->写出文件 public static void main(String[] args) { InputStream in =null; OutputStream out = nu ...
- css冻结列的效果
<!DOCTYPE html><html lang="zh-cn"><head><meta charset="utf-8&quo ...
- rpmverify命令用来验证已安装的rpm软件包的正确性
-Va:验证所有软件包: 来自: http://man.linuxde.net/rpmverify -Va:验证所有软件包: [root@DB ~]# rpmverify -Va ....L.... ...
- How do I measure JVM startup time?
https://stackoverflow.com/questions/39321345/how-do-i-measure-jvm-startup-time PrintCompilation2 htt ...
- himall微信支付
支付目录:
- curl传输文件实例
curl -H "Authorization:Bearer 5d719398-4230-44c7-b88b-f280b6a8d070" -H "Accept: appli ...
- kali kvm Requested operation is not valid: network 'default' is not active
安装时候参考的:http://www.ilanni.com/?p=6101 今天安装完kvm,满是幸福的装了个xp,重启后出现了一个错误 Requested operation is not vali ...
- vps 切换内核
一.安装内核aptitude install linux-image-3.13.0-24-generic linux-headers-3.13.0-24-generic 二.查看已安装的内核dpkg ...
- django 返回json数据
from django.core import serializers @login_required def ajax_get_data(request): json_data = serializ ...