在全部編程語言中if是最長用的判斷之一,但在js中到底哪些東西能夠在if中式做爲判斷表達式呢?html
例如如何幾行,只是少了一個括號,真假就徹底不一樣,到底表示什麼含義呢java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
var obj={};
obj.Funtext=function(){};
if
(obj.Funtext)
{
alert(
"true obj.Funtext;"
);
}
else
{
alert(
"false obj.Funtext"
);
}
obj.Funtext=function(){};
if
(obj.Funtext())
{
alert(
"true obj.Funtext();"
);
}
else
{
alert(
"false obj.Funtext()"
);
}
|
1第一類已定義的變量但未賦值在if中認爲是假編程
例如:函數
1
2
3
4
5
6
7
8
9
|
var t;
if
(t)
{
alert(
"true 已定義未賦值"
);
}
else
{
alert(
"false 已定義未賦值"
);
}
|
2第二類已定義的變量,賦值爲空字符串在if中認爲是假,賦值爲其餘的字符串,也就是是字符串中有字符就認爲是真測試
例如:spa
1
2
3
4
5
6
7
8
9
10
|
var t;
t=
""
;
if
(t)
{
alert(
"true t='';"
);
}
else
{
alert(
"false t=''"
);
}
|
if判斷是假code
再例如:htm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
var t;
t=
" "
;
if
(t)
{
alert(
"true t=' ';"
);
}
else
{
alert(
"false t=' '"
);
}
t=
"111"
;
if
(t)
{
alert(
"true t='111';"
);
}
else
{
alert(
"false t='111'"
);
}
|
if判斷是真,也就是對於字符串類型,只要有字符,即便是空格字符if判斷也爲真。
對象
3第三類已定義的變量,賦值爲true在if中認爲是真,賦值爲false,則爲假,這和其餘語言中bool的類型的變量是同樣的。ci
例如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
var t;
t=
false
;
if
(t)
{
alert(
"true t=false;"
);
}
else
{
alert(
"false t=false;"
);
}
t=
true
;
if
(t)
{
alert(
"true t=true;"
);
}
else
{
alert(
"false t=true;"
);
}
|
4第四類已定義的變量,賦值爲0在if中則爲假,其餘數值認爲是真,這和c語言中數值的類型的變量是同樣的。
例如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
var t;
t=
0
;
if
(t)
{
alert(
"true t=0;"
);
}
else
{
alert(
"false t=0;"
);
}
t=
0.0
;
if
(t)
{
alert(
"true t=0.0;"
);
}
else
{
alert(
"false t=0.0;"
);
}
|
測試發現無論是0,仍是0.0都是假
1
2
3
4
5
6
7
8
9
10
|
var t;
t=
2
;
if
(t)
{
alert(
"true t=2;"
);
}
else
{
alert(
"false t=2;"
);
}
|
發現非0是都是真
5第五類js中的特殊值null,undefined,都是假
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
var t=
null
;
if
(t)
{
alert(
"true t=null;"
);
}
else
{
alert(
"false t=null;"
);
}
t=undefined;
if
(t)
{
alert(
"true t=undefined;"
);
}
else
{
alert(
"false t=undefined;"
);
}
|
因爲在js中未定義的變量默認值是undefined,所以這也就就解釋了第一類狀況
6第六類已定義的函數,根據調用方式又分爲兩種
第一種:不帶括號的,若是定義了就是真,沒有定義會報錯
1
2
3
4
5
6
7
8
9
|
function testfunction(){}
if
(testfunction)
{
alert(
"true testfunction;"
);
}
else
{
alert(
"false testfunction;"
);
}
|
第二種:帶括號的,其實至關於調用函數,天然是根據函數的返回值判斷真假
例如:
1
2
3
4
5
6
7
8
9
|
function testfunction(){}
if
(testfunction())
{
alert(
"true testfunction;"
);
}
else
{
alert(
"false testfunction;"
);
}
|
是假,是由於,函數若是沒有定義返回值值,則返回值是undefined
7第七類已定義的對象,未賦值時在if中則爲假,賦值後是真。
例如:
1
2
3
4
5
6
7
8
9
|
var obj;
if
(obj)
{
alert(
"true obj;"
);
}
else
{
alert(
"false obj;"
);
}
|
其實因爲在js中變量在沒有賦值時是沒有類型的,所以和第一種狀況是同樣的。
但在賦值後,就會變成真,例如:
1
2
3
4
5
6
7
8
9
10
11
|
var <span style=
"font-family: Arial, Helvetica, sans-serif;"
>obj</span>
;
obj={};
if
(obj)
{
alert(
"true obj={};"
);
}
else
{
alert(
"false obj={};"
);
}
|
8第八類已定義的對象的屬性字段,和單獨的變量是同樣的,例如數值型爲0時是假,其餘爲真,字符串型是爲空值時是假,其餘爲真。
例如
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
var obj={};
obj.Text=
""
;
if
(obj.Text)
{
alert(
"true obj.Text;"
);
}
else
{
alert(
"false obj.Text"
);
}
obj.Text=
"Text"
;
if
(obj.Text)
{
alert(
"true obj.Text;"
);
}
else
{
alert(
"false obj.Text"
);
}
obj.Text=
0
;
if
(obj.Text)
{
alert(
"true obj.Text;"
);
}
else
{
alert(
"false obj.Text"
);
}
obj.Text=
1
;
if
(obj.Text)
{
alert(
"true obj.Text;"
);
}
else
{
alert(
"false obj.Text"
);
}
|
9第九類已定義的對象的方法,和單獨的函數是同樣的,
不加括號是若是沒定義就是假,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
var obj={};
obj.Funtext=function(){};
if
(obj.Funtext)
{
alert(
"true obj.Funtext;"
);
}
else
{
alert(
"false obj.Funtext"
);
}
if
(obj.Funtext1)
//未定義屬性,也沒有定義方法
{
alert(
"true obj.Funtext1;"
);
}
else
{
alert(
"false obj.Funtext1"
);
}
|
加了括號至關於調用方法,就是根據返回值判斷真假。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
var obj={};
obj.Funtext=function(){};
if
(obj.Funtext())
{
alert(
"true obj.Funtext();"
);
}
else
{
alert(
"false obj.Funtext()"
);
}
obj.Funtext2=function(){
return
"ff"
};
if
(obj.Funtext2())
{
alert(
"true obj.Funtext2();"
);
}
else
{
alert(
"false obj.Funtext2()"
);
}
|
能夠看到在js中能夠在if中做爲判斷的類型不少,但最終均可以看作這些類型的變形。只要掌握了這些最基本的,就能夠靈活運用if判斷了。
最基本是null,undefined,if判斷都是假;對於數值類型,0是假,其餘爲真;對於字符類型空字符串是假,其餘爲真,對於方法屬性,若是定義了就是真,不然就是假,其餘全部均可以看作是這些的變相應用。