• JS条件判断


      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两次了吧。同时提醒平常开发还可以使用“===",注意
    ”==“和”===“的区别
    
     
  • 相关阅读:
    WCF全面解析学习之地址Address(1)
    【转】理解和使用Oracle 8i分析工具-LogMiner
    【Wonder原创】NHibernate映射文件范例
    【转】C#经典面试题及答案
    【转】C#中abstract class和interface之探讨
    【转】130道C#面试题
    【Oracle学习】archivelog
    【转载】sql server 2005系统表详细说明
    【转】WINDOWS批处理命令详解
    【转】Linux find命令详解
  • 原文地址:https://www.cnblogs.com/ranzige/p/4363430.html
Copyright © 2020-2023  润新知