详解JavaScript令人困惑不解的条件判断
来源:互联网 发布:mac如何打罗马数字 编辑:程序博客网 时间:2024/05/01 23:35
一、单条件判断
undefined-----false
null----------false
0-------------false
'0'-----------true
''------------false
-1------------true
NaN------------false
NaN 用于处理计算中出现的错误情况,比如 0.0 除以 0.0 或者求负数的平方根。
在单条件判断这种情况下,不为空的字符串、不为0的数字、不为null的对象、不为undefined的对象属性、不为NaN,结果都是为true,反之为false。
二、==和===的区别
==会把比较的二者进行类型转换,===是不会把比较的二者进行类型转换的。
综合案例:
三、深入分析==比较时的情况
1、对于相同类型的两个标量的比较,除了NaN比较特殊之外(NaN==NaN返回false),其余正常比较就OK了。
2、对于类型不同的两个标量的比较,总将两边的值转换成数字,再看看转换以后的数字是否相等。
3、将一个简单类型(这里指除undefined与null的值)与一个对象比较时,先调用对象的valueOf()方法,以期待返回一个标量,如果对象的valueOf方法返回的仍然是一个复合对象的话就接着调用对象的toString()方法以期待返回一个标量,如果仍然没有返回标量的话,就判为不相等。
四、总结
1、Number,Boolean,String,Undefined这几种基本类型混合比较时,会将其转换成数字再进行比较。
2、基本类型与复合对象进行比较时,会先将复合对象转换成基本类型(依次调用valueOf()与toString()方法),再进行比较。
3、undefined被当成基本类型,undefined转换成数字是NaN,因此undefined与除null之外的其它类型值进行比较时始终返回false(注意NaN==NaN返回false)。
4、null被当成复合对象,由于null没有valueOf与toString方法,因此和除了undefined之外的其它类型值进行比较时始终返回false。
undefined-----false
null----------false
0-------------false
'0'-----------true
''------------false
-1------------true
NaN------------false
NaN 用于处理计算中出现的错误情况,比如 0.0 除以 0.0 或者求负数的平方根。
在单条件判断这种情况下,不为空的字符串、不为0的数字、不为null的对象、不为undefined的对象属性、不为NaN,结果都是为true,反之为false。
二、==和===的区别
==会把比较的二者进行类型转换,===是不会把比较的二者进行类型转换的。
if(1 == '1') { alert('i am xlinsist'); } //结果会弹出i am xlinsistif(1 === '1') { alert('i am xlinsist'); } //结果不会弹出i am xlinsist
综合案例:
if(0) { alert('i am xlinsist one'); //0代表false,所以将不会弹出i am xlinsist one}if('0') { alert('i am xlinsist two'); //由于'0'是非空字符串,所以将会弹出i am xlinsist two} if('0' == false) { alert('i am xlinsist three'); //由于==会进行类型转换,所以将会弹出i am xlinsist three}if('0' === false) { alert('i am xlinsist four'); //由于===不会进行类型转换,所以将不会弹出i am xlinsist four}
三、深入分析==比较时的情况
1、对于相同类型的两个标量的比较,除了NaN比较特殊之外(NaN==NaN返回false),其余正常比较就OK了。
2、对于类型不同的两个标量的比较,总将两边的值转换成数字,再看看转换以后的数字是否相等。
3、将一个简单类型(这里指除undefined与null的值)与一个对象比较时,先调用对象的valueOf()方法,以期待返回一个标量,如果对象的valueOf方法返回的仍然是一个复合对象的话就接着调用对象的toString()方法以期待返回一个标量,如果仍然没有返回标量的话,就判为不相等。
四、总结
1、Number,Boolean,String,Undefined这几种基本类型混合比较时,会将其转换成数字再进行比较。
2、基本类型与复合对象进行比较时,会先将复合对象转换成基本类型(依次调用valueOf()与toString()方法),再进行比较。
3、undefined被当成基本类型,undefined转换成数字是NaN,因此undefined与除null之外的其它类型值进行比较时始终返回false(注意NaN==NaN返回false)。
4、null被当成复合对象,由于null没有valueOf与toString方法,因此和除了undefined之外的其它类型值进行比较时始终返回false。
0 0
- 详解JavaScript令人困惑不解的条件判断
- 令人不解的Command模式
- 令人困惑的fitsSystemWindows
- 探析 JavaScript 中令人困惑的变量赋值
- 分析 JavaScript 中令人困惑的变量赋值
- Oracle PL/SQL之令人不解的提示(nls_date_format)
- 探析 JavaScript 中令人困惑的变量赋值(转自快乐笛子的博客)
- javascript里的条件判断
- javascript里的条件判断
- javascript里的条件判断
- javascript里的条件判断
- javascript里的条件判断
- javascript里的条件判断
- javascript里的条件判断
- 学习for循环时遇到的困惑不解
- 几个令人困惑的安全问题收藏
- 令人困惑的oracle.sql.TIMESTAMP
- 【STL源码剖析】令人困惑的语法
- 点分治:统计长度不大于K的路径条数
- [LeetCode] Remove Duplicates from Sorted Array
- 构造器和多态
- mfc中stdafx.h
- phonegap打包签名覆盖问题
- 详解JavaScript令人困惑不解的条件判断
- 不得不说说backports
- spring Log4j
- android字体高度,宽度计算方法
- POJ1019-Number Sequence
- UIlabel代码实例化 和属性
- 对Oracle中的表进行分区
- Spring Security3 - MVC 整合教程
- PHP学习笔记第【8】天(2014.11.08)——javascript学习