文档章节

JS判断 []==false 结果为什么是true?

ZYallers
 ZYallers
发布于 2017/07/20 12:48
字数 412
阅读 32
收藏 0

JS判断 []==false 结果为什么是true?

var tmp = 'a';
if([] == false) tmp += 'b';
if(![]) tmp += 'c';
alert(tmp); //tmp 值为 ?

你或许会不理解[]==false为什么会判断为true?

这个js 的判定 在权威指南中有明确说明。主要是js的机制问题 任何类型在特定环境 会把类型改变成匹配环境的类型。 if()这个括号环境里面 需要的是bool值 那么不管你在括号里写什么 最终将会被转化成bool。 而[]等于false,在等于运算符的左边权威指南中用了左值这个名词 在==这个环境中首先将左值进行了类型转化。 在js看来 空数组 空对象 0 空字符串 等当作false 所以[]==false 这个返回的是true。

再补充扩展:

alert(typeof(false) === 'boolean');
alert(typeof(0) === 'number');
alert(typeof("") === 'string');
alert(typeof(null) === 'object');
alert(typeof undefined === 'undefined');

运行上述代码,弹出的对话框应该显示的都是true。也就是说,false是布尔类型对象,0是数字类型对象,空字符串是字符串类型对象,null是object对象,undefined类型还是undefined。

当你用==操作符将false对象和其他对象进行比较的时候,你会发现, 只有0和空字符串、空数组等于false;undefined和null对象并不等于false对象,而null和undefined是相等的。

var a=[];
alert(a==false);
alert(false == undefined);
alert(false == null);
alert(false == 0);
alert(false == "");
alert(null == undefined);

我们可以把0、空字符串、空数组和false归为一类,称为"假值";把null和undefined归为一类,称为"空值"。

© 著作权归作者所有

ZYallers
粉丝 1
博文 59
码字总数 19100
作品 0
佛山
程序员
私信 提问
JavaScript使用原型判断对象类型

constructor属性 在JavaScript创建对象(二)——构造函数模式中,我们说过可以使用对象的属性判断对象的类型:,可能当时就有细心的读者会想,我们并没有给这个对象添加过,这个属性是从哪儿...

Bob2100
2018/10/19
27
0
如何解决JavaScript中0.1+0.2不等于0.3

  在正常的数学逻辑思维中,0.1+0.2=0.3这个逻辑是正确的,但是在中0.1+0.2!==0.3,这是为什么呢?这个问题也会偶尔被用来当做面试题来考查面试者对的数值的理解程度。   在的二进制的浮...

peakedness丶
2018/10/22
1K
4
JavaScript 内功心法——数据类型

一、数据类型概况 1.1 原始类型 原始类型:undefined,null,boolean,string,number,symbol 原始类型是没有函数可以调用的,比如 。 但是很多人就会有疑问为什么 可以转换,其实这种情况 ...

石燕平
04/10
0
0
JavaScript的赋值深坑

以前学C++的时候(大学时代),对传参时印象深刻的是,传的值是值还是值的地址. 之后学JavaScript的时候,发现不用理会那么多,虽然不严谨,但是用起来很便捷,比如说类型转换呀,啥的简单多了..... 可...

L3ve
2014/10/15
214
1
js中的 || 与 && 运算符详解

这篇文章主要介绍了js中的 || 与 && 运算符详解,需要的朋友可以参考下 一 js中逻辑运算符在开发中可以算是比较常见的运算符了,主要有三种:逻辑与&&、逻辑或||和逻辑非!。 当&&和|| 连接语...

黎_20c4
2018/11/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Replugin借助“UI进程”来快速释放Dex

public static boolean preload(PluginInfo pi) { if (pi == null) { return false; } // 借助“UI进程”来快速释放Dex(见PluginFastInstallProviderProxy的说明) return PluginFastInsta......

Gemini-Lin
55分钟前
4
0
Hibernate 5 的模块/包(modules/artifacts)

Hibernate 的功能被拆分成一系列的模块/包(modules/artifacts),其目的是为了对依赖进行独立(模块化)。 模块名称 说明 hibernate-core 这个是 Hibernate 的主要(main (core))模块。定义...

honeymoose
今天
4
0
CSS--属性

一、溢出 当内容多,元素区域小的时候,就会产生溢出效果,默认是纵向溢出 横向溢出:在内容和容器之间再套一层容器,并且内部容器要比外部容器宽 属性:overflow/overflow-x/overflow-y 取值...

wytao1995
今天
4
0
精华帖

第一章 jQuery简介 jQuery是一个JavaScript库 jQuery具备简洁的语法和跨平台的兼容性 简化了JavaScript的操作。 在页面中引入jQuery jQuery是一个JavaScript脚本库,不需要特别的安装,只需要...

流川偑
今天
7
0
语音对话英语翻译在线翻译成中文哪个方法好用

想要进行将中文翻译成英文,或者将英文翻译成中文的操作,其实有一个非常简单的工具就能够帮助完成将语音进行翻译转换的软件。 在应用市场或者百度手机助手等各大应用渠道里面就能够找到一款...

401恶户
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部