对于需要返回boolean类型数值的地方,比如if判断,逻辑运算符,js对象会默认转换为boolean类型数据。null,undefined,0,”“返回false,其他返回true。
同时,对于||与&&又有这样的特性:
var a = b || c;
b默认值 c默认值 a取值
true true b
true false b
false true c
false false c
var a = b && c;
b默认值 c默认值 a取值
true true c
true false c
false true b
false false b
根据这两个特性,可以利用||与&&进行赋值。在某些情况下,可以简化代码,甚至是增加可读性。
下面给出的几组代码内的b与c的赋值是等效的。
var b;
if(b != null){
b = b;
}else {
b = 2;
}
var c = c || 2;
1
2
3
4
5
6
7
8
9
var b;
if(b){
b = 1;
}else {
b = 2;
}
var c = (c && 1) || 2;
1
2
3
4
5
6
7
8
9
var b;
if(b){
if(1 == 1){
b = 1;
}else {
b = 2;
}
}else {
b = 3;
}
var c = (c && ((1 == 1 && 1) || 2)) || 3;
1
2
3
4
5
6
7
8
9
10
11
12
13
var b;
if(2 > 1){
b = 1;
}else if(3 > 1){
b = 2;
}else {
b = 3;
}
var c = ((2 > 1) && 1) || ((3 > 1) && 2) || 3;
1
2
3
4
5
6
7
8
9
10
11
var b;
if(2 > 1){
b = 1;
}else if((1 == 1 || 1 == 2) && 3 == 3){
b = 2;
}else {
b = 3;
}
var c = ((2 > 1) && 1) || (((1 == 1 || 1 == 2) && 3 == 3) && 2) || 3;
1
2
3
4
5
6
7
8
9
10
11
简单说一下技巧,就是if->值 用&&,else用||,if中内容多的可以将内容都写进括号里。
在实际使用中,只有最简单的逻辑判断使用这种方法有实际意义,这会使代码更简洁。事实上,很多知名的js框架都充满了这种用法。至于后面那些个写法,别用!!!写出来容易被打。