美文网首页
JS中if(xx)和==判断的类型转换规则

JS中if(xx)和==判断的类型转换规则

作者: 贪睡de狮子 | 来源:发表于2018-08-02 17:43 被阅读0次

在js里面,在使用if语句的时候,我们都知道,使用严格相等运算符===来进行条件判断,但是在日常工作中,我们可能经常会碰到这种代码:

if(xxx){
...
}

或者是

if(xxx==0){
...
}

那么这种情况下,if里面的条件是否成立,看起来就要花费一番心思了,而且有的时候的结果可能并非符合直觉。接下来就来解密一下当遇到上面两种情况时,条件到底何时能够成立呢

if(xxx)的情况

以下几个场景的结果分别是多少?

if ("hello") {
    console.log("hello")
}

if ("") {
    console.log('empty')
}

if (" ") {
    console.log('blank')
}

if ([0]) {
    console.log('array')
}

if('0.00'){
  console.log('0.00')
}

如果没有了解一定的规则,只凭直觉来判断的话,以上的代码很难估计出正确的结果。但是我们可以了解if(xxx)判断的规则后再去看,那么结果可能就显而易见了
对于if括号里的表达式,会被强制转换为布尔类型,而转换的规则如下

类型 结果
Undefined false
Null false
Boolean 直接判断
Number +0, −0, 或者 NaN 为 false, 其他为 true
String 空字符串为 false,其他都为 true
Object true

有了这个规则之后,再回头去看上面的问题,不难得出结果,分别为:
true false true true true

xxx==xx的情况
类似的,我们来看看不同类型的值使用==比较的结果
有如下问题

!" " == false
"0" == false  
"00" == false  
"0.00" == false  
undefined == null 
{} == true  
[] == true 
var obj = { 
  a: 0, 
  valueOf: function(){return 1} 
} 
obj == "[object Object]"
obj == 1 
obj == true 

下表为==相等运算符的转换规则

x y 结果
null undefined true
Number String x == toNumber(y)
Boolean (any) toNumber(x) == y
Object String or Number toPrimitive(x) == y
otherwise otherwise false

toNumber

type Result
Undefined NaN
Null 0
Boolean ture -> 1, false -> 0
String “abc” -> NaN, “123” -> 123

toPrimitive
对于 Object 类型,先尝试调用 .valueOf 方法获取结果。 如果没定义,再尝试调用 .toString方法获取结果

从上方表格可以看出,当数字和字符串比较时,会将字符串转换为数字,而对象和字符串做比较时,会调用对象的valueOf或toString方法进行转换
因此上面的答案分别为
true
true
true
true
true
false
false
fasle
true
true

总结
虽然我们了解了上述两种情况的类型转换规则,但是在日常工作中还是建议使用规范的if(xxx===xx)的严格相等运算符的格式,否则可能会带来意想不到的副作用,也会给团队其他成员带来理解上的困扰

相关文章

  • JS中if(xx)和==判断的类型转换规则

    在js里面,在使用if语句的时候,我们都知道,使用严格相等运算符===来进行条件判断,但是在日常工作中,我们可能经...

  • if(xx)和 a==b的判断

    一、if(xx) 如果括号内是布尔类型,直接判断。否则括号里的表达式会被强制转换成布尔类型,转换规则如下:1.un...

  • 2019-05-17

    关于if(xx)和 a==b的判断 if(xx)的判断 括号中的xx会被强制转换为布尔类型,true 或者 fal...

  • C++自动类型转换

    内置类型的自动转换规则 C++ primer 类型自动转换规则: 在表达式中,char 和 short 类型的值,...

  • 关于if(xx)和 a==b的判断

    if(xx)的判断 对于括号里的表达式,会被强制转换为布尔类型 转换规则是除了下面六个值被转为false,其他值都...

  • 2019-04-07

    JS中关于if(xx)与a==b的判断 if(xx)的判断 1.if(number) 当if中是number为+0...

  • 隐式转换的规则

    问题:隐式转换的规则是什么 说起JS的隐式转换规则,我们可以说下JS的基础数据类型 JS的七中类型 我们所熟知的J...

  • 关于JS中if(xx)和 a==b的判断

    1. if结构 if结构先判断一个表达式的布尔值,然后根据布尔值的真伪,执行不同的语句。 基本形式 注意点:对于i...

  • JS中关于if(xx)和 a==b的判断

    一、JS中关于if(xxx)的判断: js是如何处理的?我们先来看几道测试题 以上题目代码的输出结果为: 题目1的...

  • 所以为什么 JS 的 typeof 不需要括号 (如何判断数据类

    JS 如何判断数据类型 在 JS 中有许多中提供了几个原生的判断数据类型方法,本文主要介绍 JS 中的判断基本数据...

网友评论

      本文标题:JS中if(xx)和==判断的类型转换规则

      本文链接:https://www.haomeiwen.com/subject/onlsvftx.html