js中if(!a)为什么是判断变量a是否有值,及js中if判断条件和==知识回顾

今天看视频遇到一个问题就是js中if(!a)为什么是判断变量a是否有值 

//如果a为空,那么把1赋值给a
if(!a){
    a=1;
}

//如果a没有被赋值,那么返回的是undefined
//一般数值类型没有被赋初值,返回值是undefined
var a;
console.log(a);//undefined

一. if(xx)的判断

JavaScript 遇到预期为布尔值的地方(比如if语句的条件部分),就会将非布尔值的参数自动转换为布尔值。系统内部会自动调用Boolean函数。

1.当if括号里面的表达式为Boolean时,直接判断

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

 

2.当if括号里面的表达式为Number时,分两种情况,当number为+0,-0,NaN的时候,为false;其他为true。

if(0){
  console.log("true"); //false
}
if(NaN){
  console.log("true"); //false
}
if(1){
  console.log("true"); //true
}

 

3.当if括号里面的表达式为String时,空字符串为false,其他为true;

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

 

4.当if括号里面的表达式为Undefined时,为false;

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

 

5.当if括号里面的表达式为null时,为false;

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

 

toBoolean

类型结果
undefinedfalse
nullfalse
Boolean直接判断
string""(空字符串)为false,其他为true
Objecttrue
Number+0,-0,Nan为false,其他为true

 

二. a==b的判断

==是比较两个值是否相等,相同类型直接比较,不同类型的话,看情况转换。

  1. String==Number --->toNumber(String)==Number
"" = 0 ; //true,因为“”转换为0
"  " = 0 ; //true
"hello" == 1  //false  ,因为"hello"转换为NaN
"hello" == 0 //false,同理

 

  1. Boolean==(any) --->toNumber(Boolean)==(any)
1==true; //true,因为true转换为1
0==false;//true ,因为false转换为0
"0" == true  //false
"0" == false  //true
"00" == false  //true
"0.00" == false  //true
  1. Object==String/Number---->toPrimitive(Object)
    对于 Object 类型,先尝试调用 .valueOf 方法获取结果。 如果没定义,再尝试调用 .toString方法获取结
{} == true  // false
[] == true  //false
var obj = { 
  a: 0, 
  valueOf: function(){return 1} 
} 
obj == "[object Object]"  //false
obj == 1  //true
obj == true  //true
  1. null==undefined,//true
  • ==知识点
    如果两个值类型相同,则执行严格相等的运算
    如果两个值的类型不同
    如果一个是null,一个是undefined,那么相等
    如果一个是数字,一个是字符串,先将字符串转为数字,然后比较
    如果一个值是true/false则将其转为1/0比较
    如果一个值是对象,一个是数字或字符串,则尝试使用valueOf和toString转换后比较
    其它就不相等了

toNumber

类型结果
UndefinedNaN
Null0
Booleanture->1,false->0
String(""-->0, " "-->0 )空字符串与空白字符串转换数值0,abc"->NaN,"123"->123

来源:https://www.cnblogs.com/hhl6/p/10185673.html

©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页