美文网首页
if(xx)和 比较运算符a==b的ture/false的判断

if(xx)和 比较运算符a==b的ture/false的判断

作者: 荷尔蒙榨汁机 | 来源:发表于2017-12-04 16:18 被阅读0次

首先让我们来看下面的代码:

if ([0]) {
  console.log([0] == true);//false
  console.log(!![0]);//true
}

if ("potato") {
  console.log("potato" == false);//false
  console.log("potato" == true);//false
}

从上面的两段代码可知,if(条件判断)a == b对ture/false的判断有所不同。下面我们通过范例来进行加深理解。

if(条件判断)

Undefined,null

if(undefined){console.log("true")}; // 无输出
if(null){console.log("true")};// 无输出

Boolean

if(true){console.log("true")};// true
if(false){console.log("true")};// 无输出

Number

if(0){console.log("true")};// 无输出
if(NaN){console.log("true")};// 无输出
if(0.0){console.log("true")};// 无输出
if(1){console.log("true")};// true
if(-1){console.log("true")};// true

String

if(""){console.log("true")};// 无输出
if(" "){console.log("true")};// true
if("0"){console.log("true")};// true
if("false"){console.log("true")};// true

Object

if({}){console.log("true")};// true

通过上面的例子总结规则如下:

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

比较符表达式

null == undefined

console.log(null == undefined);// true
console.log(undefined == null);// true

Number == String

console.log(6 == "6");//  true
console.log(6.1 == "6.1");//  true
console.log(6 == "six");// false

Boolean == Number/String

console.log(true == 1);// true
console.log(false == 0);// true
console.log(true == "1");//  true
console.log(false == "0");//  true

Object == Number/String

fn = new String("2");
fn == 2; // true
fn == "2"; // true
fn == 1; // false

规律总结:

  1. 在比较前会对==两边不同类型的值先进行转换,转换规则如下:
类型 转换结果
Boolean 转换成数值,ture ==> 1,false ==>0
String 转换成数值"123" ==> 2,"abc" ==> NaN
Object 转换为原始类型(PrimitiveValue),即先调用.valueOf,如果没有定义,在尝试调用.toString
  1. 当两边的数值类型相等后,在进行比较。

我们再回来解释开头的例子

if ([0]) {
  console.log([0] == true);//false
  console.log(!![0]);//true
}

// 由于数组[0]为对象,所以if语句中判定为true。对于[0] == true首先调用[0].valueOf(),由于数组的valueOf()方法返回自身,所以结果不是原始类型,继续调用[0].toString()。对于数组来说,toString()方法的算法,是将每个元素都转为字符串类型,然后用逗号","依次连接起来,所以最终结果是字符串"0",它是一个原始类型的值。
此时,表达式变为:
"0" == true
两个操作数变成了字符串类型、布尔类型。根据前面总结的规律,进行转换,"0"转换为数值0,true转换为数值1。表达式变为:
0 == 1
到此为止,结果为false。

if ("potato") {
  console.log("potato" == false);//false
  console.log("potato" == true);//false
}

// potato在if语句中为字符串,所以判定为true。再来看表达式"potato" == false",先类型转换,"potato"字符串类型转换为NaN,false转换为0,所以结果为false。

相关文章

  • if(xx)和 比较运算符a==b的ture/false的判断

    首先让我们来看下面的代码: 从上面的两段代码可知,if(条件判断)和a == b对ture/false的判断有所不...

  • 逻辑函数()

    ture:条件成立,返回为ture False:条件不成立,返回为false 能产生逻辑值的函数有三种:比较运算符...

  • JavaScript 中关于 if(xx) 和 a==b

    if(xx)的判断 对于括号里的表达式,会被强制转换为布尔类型原理: 题目: a==b的判断 相等运算符用来比较相...

  • 逻辑函数IF、AND、OR

    一.逻辑值 1.真:TURE,假:FALSE 2.能产生或者返回逻辑值的函数有比较运算符,is信息函数,and、i...

  • 009- Python运算符

    一、算术运算符 以下假设变量: a=10,b=20: 二、比较运算符 比较运算的结果返回 True 或 False...

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

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

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

    1、if判断 (1)从面试题说说if的数据类型,js如何转换判断 *(2)判断原理: 对于if()里括号的表达式(...

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

    一、 if 的判断 解密 对于括号里的表达式,会被强制转换为布尔类型 原理 答案 string ==> true ...

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

    if(xx) 对于括号内的表达式会被强制转换为布尔类型 转换原理 a==b 在js判断两个变量值是否相等,可以使用...

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

    1.if条件判断语句   JavaScript中流程控制语句是十分重要的的,主要包括:if条件判断语句,for循环...

网友评论

      本文标题:if(xx)和 比较运算符a==b的ture/false的判断

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