1. if(xx)
首先if(表达式),这个括号里是一个表达式,判别表达式是true或false来执行if语句,即会把括号里的表达式强制转换成布尔类型。
以下是几种转换结果。
-
Undefined --> false
-
Null --> false
-
Boolean --> 直接判断true或false
-
Number --> +0,-0,0.00,NaN是false,其他是true
-
String --> 空字符串if("")为false,其他为true,如if(" ")为true,引号中间有个空白符,不为空字符串,所以为true
-
Object --> true ,如if([])为true,if({})true,空数组空对象也为true,
比如
var a=1;
if(a){
console.log(1);
}
这样写其实不怎么严谨,最好是添上条件,如
var a=1;
if(a>0){ // 或者if(a===1),合理运用各种比较运算符,逻辑运算符
console.log(a);
}
2. a==b
== 等号两边会发生类型转换,然后比较它的值
=== 不会发生类型转换,同时比较等号两边的值和类型,都相同时为true,只要一个不同,为false
以下是类型转换的值
-
Undefined --> NaN
-
Null --> 0
-
Boolean --> true为1,false为0
-
String --> "abc"为NaN, "abc11"为11,"123"为123,即字符串中包含数字时转换为相应数字,没有数字时为NaN
以下是判别方法
-
undefined == null //true 这为特殊情况,记住
-
等号两边如果有布尔值就将其转换为1或0进行比较
-
等号两边是数字和字符串,先将字符串转换为数字,再进行比较
-
等号两边如果有对象,会调用其valueOf()方法,再进行比较
需要特别记住的是,"" , " " 转换的值为0,所以
"" == 0 //true
"" == false //true
" " == 0 //true
" " == false //true
还有一个特殊的等式, !" " == false //true
举例
a. 字符串的转换:
"hello" == true //false "hello"转换为NaN ,NaN与任何值比较都为false,包括它自己本身
NaN == NaN //false
"hello" == false //false
b. 布尔值的转换:
true == 1 //true
false == 0 //true
c. 对象的转换:
var obj = {
a:0,
valueOf: function() { return 1 }
}
obj == "[Object Object]" //false 因为写了valueOf方法,所以不等于默认的[Object Object],如果没有写valueOf方法或toString方法, 则obj == "[Object Object"] //true
obj == 1 //true
obj == true //true
该对象调用了valueOf方法,返回值是1, 1==1,1==true,
d. 空数组的转换:
[] == false //true
空数组里有toString()方法,但是并没有定义,它转为数值即不是1也不是0,所以为false
网友评论