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. tesseract_ocr+pytesseract图像识别

    一.windows安装配置 其他系统安装配置参考github:https://github.com/tesseract-ocr/tesseract/wiki 下载tesseract-ocr参考:htt ...

  2. Google的开源C++单元测试框架Google Test

    玩转Google开源C++单元测试框架Google Test系列(gtest)(总) 前段时间学习和了解了下Google的开源C++单元测试框架Google Test,简称gtest,非常的不错. 我 ...

  3. Java 中的“implements Runnable” 和“extends Thread”

    知识点 “implements Runnable” 和“extends Thread”的不同 具体分析 最近在学习Android中的Handler消息传递机制时,创建新线程有两种方式:一种是实现Run ...

  4. java之ibatis数据缓存

    使用IBatis作数据缓存 1.SqlMapConfig.xml中<settingscacheModelsEnabled="true" //设置为trueenhancemen ...

  5. 使用 IntraWeb (6) - 页面模板: TIWLayoutMgrHTML、TIWTemplateProcessorHTML

    IW 通过 TIWLayoutMgrHTML 和 TIWTemplateProcessorHTML 使用 HTML 模板. 所谓模板就是一个特殊 HTML 文件, 特殊之处是: 它里面会类似 {% I ...

  6. MikroTik RouterOS授权级别

    抄了一份来自淘宝代理商的说明: P系列许可级别(适用于联网的虚拟机,如:云主机,虚拟机,VPS等) 您必须在MikroTik官网 https://mikrotik.com/client/ 上拥有一个帐 ...

  7. LPC-Link-II Rev C JTAG

  8. LINUX 源码+内核所有参数说明

    http://www.cnblogs.com/tolimit/p/5065761.html

  9. UVA12304-2D Geometry 110 in 1!

    就是给了六个关于圆的算法.实现它们. 注意的是,不仅输出格式那个符号什么的要一样.坐标的顺序也要从小到大-- 基本上没考虑什么精度的问题,然后就过了. 大白鼠又骗人.也许我的方法比較好? 我的做法就是 ...

  10. delphi下实现ribbon界面的方法(一)

    http://www.cnblogs.com/shanmx/archive/2011/12/04/2275213.html