JavaScript 是一种可以在浏览器中运行的脚本语言,是一种弱语言(相对于C,C#,JAVA而言),只要是计算机语言就会使用到条件判断式,而JavaScript作为一种“弱”语言,它的条件判断常常令人困惑不解。

例如:

if ('0')
alert("'0' is true");
if ('0' == false)
alert ("'0' is false");
结果是,两次都 alert 了!那么 '0' 到底是 true 还是 false 呢? 下面我们就来一起探讨js的条件判断 一.单条件判断
undefined-----false
null----------false
0-------------false
"0"-----------true--字符串,非空字符串
""------------false
-1------------true--非0数字
NaN------------false NaN 用于处理计算中出现的错误情况,比如 0.0 除以 0.0 或者求负数的平方根。 总结:
在 JavaScript 里,不为空 "" 的字符串、不为 0 的数字、不为 null 的对象、
不为 undefined 的对象属性、不为NaN的布尔型 true
反正为false。 二.理解==和===的区别
1. ==会把比较的二者进行类型转换: 2. ===是不会把比较的二者进行类型转换,是string就是string,是number就是number
如: 0 === false; // false, 因为0是number,false是boolean,两者就肯定不相等
1 === true; // false JavaScript中undefined==null
但undefined!==null
undefined与null转换成布尔值都是false
再深入分析下JS对于标量应用==比较时的情况
对于相同类型的两个标量的比较,除了NaN比较特殊之外(NaN==NaN返回false),都没什么疑点
而对于类型不同的两个标量的比较,JS就有一套严格的规则,其规则是,总将两边的值转换成数字,
再看看转换结果数字是否相等
将一个简单类型(这里指除undefined与null的值)与一个对象比较时,
先调用对象的valueOf方法,以期待返回一个标量,如果对象的valueOf方法返回的仍然是一个复合
对象的话 就接着调用对象的toString方法以期待返回一个标量,如果仍然没有返回标量的话,就判为
不相等 如果valueOf或toString方法之一返回一个标量,就用这个标量同==另一边的标量进行比较 总结:
Number,Boolean,String,Undefined这几种基本类型混合比较时,会将其转换成数字再进行比较
1.基本类型与复合对象进行比较时,会先将复合对象转换成基本类型(依次调用valueOf与toString方法)
再进行比较 。
2.undefined被当成基本类型,undefined转换成数字是NaN,因此undefined与除null之外的其它类型值进
行比较时始终返回false(注意NaN==NaN返回false)
3.null被当成复合对象,由于null没有valueOf与toString方法,因此和除了undefined之外
的其它类型值进行比较时始终返回false 到这里我们就应该能明白开始的例子为什么会alert两次了吧。同时提醒平常开发还可以使用“===",注意
”==“和”===“的区别
 

JS条件判断的更多相关文章

  1. js条件判断时隐式类型转换

    Javascript 中,数字 0 为假,非0 均为真 在条件判断运算 == 中的转换规则是这样的: 如果比较的两者中有布尔值(Boolean),会把 Boolean 先转换为对应的 Number,即 ...

  2. js条件判断if-else和switch、循环for和while

    条件判断和循环都使用{ }将代码块括起来,如果代码块只有一行,则可省略{ }. 在循环中,continue表示跳过当前循环继续进行下一次循环,break表示跳出整个循环. 1.条件判断if-else, ...

  3. js 条件判断

    练习 小明身高1.75,体重80.5kg.请根据BMI公式(体重除以身高的平方)帮小明计算他的BMI指数,并根据BMI指数: 低于18.5:过轻 18.5-25:正常 25-28:过重 28-32:肥 ...

  4. js !!条件判断或运算的作用

    今天看到一个判断语句非常奇怪: if(!!selected){} //为什么是双'!'号呢? 自己查了下资料终于明白了这其中的原理: 原来'!!'会将表达式转为Boolean类型的数据. 如果'!un ...

  5. js 条件判断放大字体

    <html> <head> <meta charset="utf-8" /> <title></title> <s ...

  6. PHP和JS在循环、条件判断中的不同之处

    一.条件判断: php中算  false 的情况 1. boolean:false 2. 整形:0 3.浮点型:0 4.字符串:"" "0"(其他都对) 5.空 ...

  7. JS 多个条件判断

    // 多个条件判断 // 对象序列(Object) 推荐使用这一种 var obj = {'CJ':'成交', 'WCJ':'未成交'}; if (key in obj) { // TODO } // ...

  8. CSS3条件判断——@supports/window.CSS.supports()(转)

    CSS3条件判断,听起来"不明觉厉",如果你对CSS稍为熟悉一点的话,你会发现CSS中的"@media"就是条件判断之一.是的,在CSS3的条件判断规范文档中包 ...

  9. HtmlWebpackPlugin用的html的ejs模板文件中如何使用条件判断

    折腾: [已解决]给react-hot-boilerplate中的index.html换成用HtmlWebpackPlugin自动生成html 期间,已经有了思路了,但是不知道如何在ejs的html中 ...

随机推荐

  1. windows系统,联系人文件。个性化。

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha ======= 文件下载链接:

  2. poj 3368 rmq ***

    题意:给出n个数和Q个询问(l,r),对于每个询问求出(l,r)之间连续出现次数最多的次数. #include<cstdio> #include<iostream> #incl ...

  3. 初始化collectionViewCell

    #import <UIKit/UIKit.h> @interface TonyCollectionViewCell : UICollectionViewCell @property UII ...

  4. java并发基础(五)--- 线程池的使用

    第8章介绍的是线程池的使用,直接进入正题. 一.线程饥饿死锁和饱和策略 1.线程饥饿死锁 在线程池中,如果任务依赖其他任务,那么可能产生死锁.举个极端的例子,在单线程的Executor中,如果一个任务 ...

  5. Android四种Activity的加载模式

    建议首先阅读下面两篇文章,这样才可以更好的理解Activity的加载模式: Android的进程,线程模型 http://www.cnblogs.com/ghj1976/archive/2011/04 ...

  6. 使用Puppeteer进行数据抓取(二)——Page对象

    page对象是puppeteer最常用的对象,它可以认为是chrome的一个tab页,主要的页面操作都是通过它进行的.Google的官方文档详细介绍了page对象的使用,这里我只是简单的小结一下. 客 ...

  7. Calculate CAN bit timing parameters

    Calculate CAN bit timing parameters TSYNC_SEG === 1 TSEG1 = Prop_Seg + Phase_Seg1 TSEG2 = Phase_Seg2 ...

  8. javaDoc 注释规范

    Javadoc虽然是Sun公司为Java文档自动生成设计的,可以从程序源代码中抽取类.方法.成员等注释形成一个和源代码配套的API帮助文档.但是Javadoc的注释也符合C的注释格式,而且doxyen ...

  9. Ubuntu使用安装或者卸载软件!!!

    安装软件: 1.在应用商店里面下载安装 2.在终端sudo apt-get install 软件名 3.使用ppa:加入一个ppa源:sudo add-apt-repository ppa:user/ ...

  10. 如何运行Hadoop自带的例子

    bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.4.jar wordcount /WordCount/WordC ...