说说js的==运算符和if语句
来源:互联网 发布:淘宝手机助手开发者 编辑:程序博客网 时间:2024/06/07 13:08
大家都知道,这两个都与布尔值有关,运算符==会返回一个布尔值,而if()或者三元运算符?:都会去判断布尔值,在js中==运算符和===运算符不一样大家都知道,前面一个会进行类型转化,而后面这个不会,而if()里面也会进行类型转化。
先来说说==
先上几个例子:
console.log("123"==123);//true
console.log([1,2,3]==123);//false
console.log([1,2,3]=="1,2,3");//true
console.log(null==undefined);//true
console.log(NaN==NaN);//false
console.log([]==[]);//false
console.log([]==![]);//true
console.log({}=="[object Object]")//true
先来说说原理,当两边数据类型不一样时,会进行类型转化,null,undefined,NaN是三个特殊的东东,要记住它们,然后我们上一张图来解释一下吧
这是五种基本数据类型再加一个object,我们来看看它们之间比较到底是怎么做的。学过数学的都知道,一共有15种情况,下面我们一种一种来分析
1.number--boolean
除了1和0能分别转化为true和false之外,其余既不等于true,也不等于false,是我自己实验的,嘿嘿.
2.number--object
首先调用object.toString()方法,然后再调用Number()方法,将字符串转化为number,除了数组,基本上是不可能相等了。
3.number--undefined
直接不等于
4.number--string
string调用Number()方法,再跟number比较
5.number--null
直接不等于
6.boolean--object
这里要分一下数组和非数组,非数组既不等于true,也不等于false,数组会先调用toString(),然后再调用Boolean()方法,然后再跟boolean比较。
7.boolean--undefined
undefined既不等于true,也不等于false
8.boolean--string
string调用Number,然后再比较,回到第一种情况
9.boolean--null
null既不等于true,也不等于false
10.object--undefined
直接不等于
11.object--string
调用object的toString()方法,再比较
12.object--null
直接不等于,除了null等于null
13.undefined--string
直接不等于
14.undefined--null
等于
15.string--null
直接不等于
其实说了这么多,可以用一张图来提炼精髓:
说完了==号,我们再来看看if,其实if这种情况有很多,比如三元,比如||,&&等,都会存在转化为boolean值的时候,这个时候的规则又是怎样的呢?
直接上false的情况,除了false的其余就是true了.
null,undefined,0,"",NaN 除了这些其余的基本上就是true了。
这下我们再来看看上面的题:
console.log("123"==123);//true 直接调用Number()
console.log([1,2,3]==123);//false [1,2,3].toString()后等于"1,2,3",再调用Number("1,2,3")后变成NaN,当然不等了
console.log([1,2,3]=="1,2,3");//true 这个上面解释了
console.log(null==undefined);//true
console.log(NaN==NaN);//false 这个记住
console.log([]==[]);//false 类型相同,比较指针位置
console.log([]==![]);//true //首先![]为false,因为在if中,[]为true,然后是比较[]==false,[]先调用toString变成"",然后调用Number("")变成0,0可以变成false。
console.log({}=="[object Object]")//true 这个不用解释了吧,调用toString()变成[object Object]
好了,还是要多分析才能记住问题呀,嘿嘿。
- 说说js的==运算符和if语句
- js数据类型以及"==","==="运算符、if()语句
- 三位运算符和if语句的区别
- javaScript的运算符和if。。else语句
- 三元运算符和if-else语句格式的关系
- 三元运算符和if语句格式
- If-else 语句 和 三元运算符
- JS运算符和语句
- JS运算符与if...else条件语句
- if语句运算的优先级
- 【Perl读书笔记】if语句和关系运算符
- 第三天:JAVA中的运算符和选择性 if语句
- 04:运算符、分支语句if-else和switch-case
- if else条件语句和条件(三目)运算符的应用场合
- C语言比较两个数的大小使用if-else语句和条件运算符
- 三元运算和if ,else语句
- 简单IF语句的简化写法->三目运算符
- JS中三目运算符和if else的区别分析与示例
- 蓝桥杯 分糖果
- 最新版本Spring、Hibernate、Struts框架整合 (2014-10-26 20:22:09)
- 策略模式
- Symmetric Tree--LeetCode
- 【设计模式之三:模式对比】外观模式、代理模式与中介者模式的区别
- 说说js的==运算符和if语句
- MySQL学习笔记———《数据库操作》
- 第二章15题
- 蓝桥杯 兰顿蚂蚁
- struts2 动态访问Action方法NoSuchMethodException问题
- 为什么要有Set接口
- 【设计模式之四:工厂模式对比】简单工厂、工厂方法和抽象工厂的区别
- ANTLR#1:描述一个简单计算器
- 卡片游戏