美文网首页饥人谷技术博客
if(xx)和xx==xx的判断

if(xx)和xx==xx的判断

作者: 寿木 | 来源:发表于2017-08-26 18:47 被阅读37次

if和==这两个判断方式虽然都是通过布尔值来判断结果的,但是这两个判断方式的原理还是有很大差距的。

if(xx)的判断方式

关于if的判断方式,来看几个例子。

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

结果是什么?

第一个输出“hello”;第二个没有结果输出;第三个输出“blank”。

为什么呢??

我们前面说过,if与==都是通过布尔值来判断结果的。因此,if会把后面括号内的元素强制转换为布尔值,根据转化后的结果进行判断。

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

根据这个规则我们可以很清楚的知道这个式子的结果,也可控制式子得到我们想要的结果。

==的判断方式

在了解==的判断方式之前我们需要先了解一下他的运算规则。

==的运算规则

==是进行值的比较,而===则是进行属性与值的比较。前者在比较的时候Javascript会自动的帮我们进行属性的转换,但是有时候会有一些很奇怪的问题出现,这时候我们就需要知道它的转换规则。

  • 如果两个值类型相等,就会严格的执行相等的运算
  • 如果两个值类型不相等:
    1. 如果一个是null,一个是undefined,那么相等
    2. 如果一个是数字,一个是字符串,先将字符串转为数字,然后比较
    3. 如果一个值是true/false则将其转为1/0比较
    4. 如果一个值是对象,一个是数字或字符串,则尝试使用valueOf和toString转换后比较
    5. 其它就不相等了
==的判断规则

我们还是先来看几个例子

"" == 0
"" == false
" " == true
"hello" == true
"0.00" == false

结果是什么?

第一个结果为true,第二个结果为true,第三个结果为false,第四个结果为false,第五个结果为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

类型 返回结果
Undefined NaN
Null 0
Boolean ture -> 1, false -> 0
String “abc” -> NaN, “123” -> 123

toPrimitive

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

这些是if(xx)和 “==”的判断规则。有时候搞清楚原理有助于我们更好的工作,写出不被评价为烂代码的东西。

相关文章

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

    if和==这两个判断方式虽然都是通过布尔值来判断结果的,但是这两个判断方式的原理还是有很大差距的。 if(xx)的...

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

    if 和 == 虽然都是通过布尔值来判断结果的,但是这两个判断方式的原理有不小的差距。 if(xx) 的判断方式 ...

  • 时分秒xx:xx 和xx:xx:xx

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

    关于if(xx)与a==b的判断 简单介绍下if(xx)和a==b的相关判断 if(xx)的判断 1.if(num...

  • if 判断和 == 判断

    if(xx) 判断 什么是 if(xx) 判断? 所谓的 if(xx) 判断,即是对括号中的 xx 或者说表达式通...

  • if (xx) 判断

    number、string、boolean number 有两个假值,0 NaN string 有一个假值,'' ...

  • 2019-05-17

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

  • pytest-断言(assert)+setup

    一、常用断言 assert xx ,"判断 %s 为真" %xx assert not xx ,"判断 %s 不为...

  • xx+xx=xx

    惹你+逗你=喜欢你 学你+跟你=暗恋你 疼你+烦你=想追你 想你+恋你=爱上你 追你+烦你=想要你 疼你+宠你=心...

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

    if(xx)对于if(xx),是把xx转换成boolean在进行判断如果括号内是boolean,直接判断。否则括号...

网友评论

    本文标题:if(xx)和xx==xx的判断

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