JavaScript 布爾操作符解析 && || !
更新時(shí)間:2012年08月10日 17:14:15 作者:
在一門(mén)編程語(yǔ)言中,布爾操作符的重要性堪比相等操作符。如果沒(méi)有測(cè)試兩個(gè)值關(guān)系的能力,那么諸如if...else和循環(huán)之類(lèi)的語(yǔ)句就不會(huì)有用武之地了。布爾操作符一共有3個(gè): 非、與、或
1、邏輯非
邏輯非用!表示,可以應(yīng)用與ECMAScript的任何類(lèi)型的值,邏輯非操作返回的是一個(gè)布爾值(true/false)。該操作符首先會(huì)將它的操作數(shù)轉(zhuǎn)換為一個(gè)布爾值,然后再對(duì)其求反。
下面說(shuō)明下Boolean()轉(zhuǎn)型函數(shù)的一組規(guī)則。
Boolean()轉(zhuǎn)型函數(shù)的簡(jiǎn)便表示方法。-----------!!
2、邏輯與
邏輯與操作符由兩個(gè)和號(hào)(&&)表示,有兩個(gè)操作數(shù)。
邏輯與操作可以應(yīng)用于任何類(lèi)型的操作數(shù),而不僅僅是布爾值。在有一個(gè)操作數(shù)不是布爾值的情況下,邏輯與操作就不一定返回布爾值;此時(shí),它遵循一下規(guī)則:
1. 如果第一個(gè)操作數(shù)是對(duì)象,則返回第二個(gè)操作數(shù);
2. 如果第二個(gè)操作數(shù)是對(duì)象,則只有在第一個(gè)操作數(shù)的求值結(jié)果為true的情況下才會(huì)返回該對(duì)象;
3. 如果兩個(gè)操作符都是對(duì)象,則返回第二個(gè)操作數(shù); 遵循第一規(guī)則。
4. 如果有一個(gè)操作是null,則返回null;
5. 如果有一個(gè)操作符是NaN,則返回NaN;
6. 如果有一個(gè)操作符是undefined,則返回undefined。
邏輯與操作屬于短路操作,即如果第一操作數(shù)能夠決定結(jié)果,那么就不會(huì)再對(duì)第二個(gè)操作數(shù)求值。(可以理解為內(nèi)部的兩個(gè)return操作)。因此當(dāng)4、5、6規(guī)則沖突時(shí),遵循短路操作原則。
var nul = null;
var na = NaN;
var test;
test = na&&nul;
document.write(test); //NaN
var nul = null;
var na = NaN;
var test;
test = nul&&na;
document.write(test); //null
因此,我們來(lái)總結(jié)一下。&&操作主要遵循幾大原則:
1.短路操作原則;
2.求值過(guò)程中會(huì)被轉(zhuǎn)型生成副本,但是返回值是原來(lái)值;
// 偽代碼
function &&(param1,param2){
bparam1 = Boolean(param1);
if (!bparam1) return param1;
bparam2 = Boolean(param2);
return param2;
}
// 參數(shù)是一個(gè)對(duì)象時(shí)返回引用的指針值,函數(shù)同
3、邏輯或
邏輯或符號(hào)由兩個(gè)豎線符號(hào)(||)表示。
邏輯或符號(hào)同樣是短路操作符。其實(shí)現(xiàn)過(guò)程可以參照邏輯與的偽代碼。這里就不再列出一些規(guī)則了。
邏輯或常常用來(lái)做參數(shù)的缺省處理,比如 evt = evt || window.event;
邏輯非用!表示,可以應(yīng)用與ECMAScript的任何類(lèi)型的值,邏輯非操作返回的是一個(gè)布爾值(true/false)。該操作符首先會(huì)將它的操作數(shù)轉(zhuǎn)換為一個(gè)布爾值,然后再對(duì)其求反。
下面說(shuō)明下Boolean()轉(zhuǎn)型函數(shù)的一組規(guī)則。
| 數(shù)據(jù)類(lèi)型 | 轉(zhuǎn)換為true的值 | 轉(zhuǎn)換為false的值 |
| Boolean | true | false |
| String | 任何非空字符串 | ""(空字符串) |
| Number | 任何非零數(shù)字值(包括無(wú)窮大) | 0和NaN |
| Object | 任何對(duì)象 | null |
| Undefined | 無(wú) | undefined |
Boolean()轉(zhuǎn)型函數(shù)的簡(jiǎn)便表示方法。-----------!!
2、邏輯與
邏輯與操作符由兩個(gè)和號(hào)(&&)表示,有兩個(gè)操作數(shù)。
邏輯與操作可以應(yīng)用于任何類(lèi)型的操作數(shù),而不僅僅是布爾值。在有一個(gè)操作數(shù)不是布爾值的情況下,邏輯與操作就不一定返回布爾值;此時(shí),它遵循一下規(guī)則:
1. 如果第一個(gè)操作數(shù)是對(duì)象,則返回第二個(gè)操作數(shù);
2. 如果第二個(gè)操作數(shù)是對(duì)象,則只有在第一個(gè)操作數(shù)的求值結(jié)果為true的情況下才會(huì)返回該對(duì)象;
3. 如果兩個(gè)操作符都是對(duì)象,則返回第二個(gè)操作數(shù); 遵循第一規(guī)則。
4. 如果有一個(gè)操作是null,則返回null;
5. 如果有一個(gè)操作符是NaN,則返回NaN;
6. 如果有一個(gè)操作符是undefined,則返回undefined。
邏輯與操作屬于短路操作,即如果第一操作數(shù)能夠決定結(jié)果,那么就不會(huì)再對(duì)第二個(gè)操作數(shù)求值。(可以理解為內(nèi)部的兩個(gè)return操作)。因此當(dāng)4、5、6規(guī)則沖突時(shí),遵循短路操作原則。
復(fù)制代碼 代碼如下:
var nul = null;
var na = NaN;
var test;
test = na&&nul;
document.write(test); //NaN
復(fù)制代碼 代碼如下:
var nul = null;
var na = NaN;
var test;
test = nul&&na;
document.write(test); //null
因此,我們來(lái)總結(jié)一下。&&操作主要遵循幾大原則:
1.短路操作原則;
2.求值過(guò)程中會(huì)被轉(zhuǎn)型生成副本,但是返回值是原來(lái)值;
復(fù)制代碼 代碼如下:
// 偽代碼
function &&(param1,param2){
bparam1 = Boolean(param1);
if (!bparam1) return param1;
bparam2 = Boolean(param2);
return param2;
}
// 參數(shù)是一個(gè)對(duì)象時(shí)返回引用的指針值,函數(shù)同
3、邏輯或
邏輯或符號(hào)由兩個(gè)豎線符號(hào)(||)表示。
邏輯或符號(hào)同樣是短路操作符。其實(shí)現(xiàn)過(guò)程可以參照邏輯與的偽代碼。這里就不再列出一些規(guī)則了。
邏輯或常常用來(lái)做參數(shù)的缺省處理,比如 evt = evt || window.event;
相關(guān)文章
JavaScript Dom 綁定事件操作實(shí)例詳解
這篇文章主要介紹了JavaScript Dom 綁定事件操作,結(jié)合實(shí)例形式詳細(xì)分析了JavaScript實(shí)現(xiàn)dom綁定事件的相關(guān)實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下2019-10-10
JS+CSS實(shí)現(xiàn)模仿瀏覽器網(wǎng)頁(yè)字符查找功能的方法
這篇文章主要介紹了JS+CSS實(shí)現(xiàn)模仿瀏覽器網(wǎng)頁(yè)字符查找功能的方法,實(shí)例分析了javascript實(shí)現(xiàn)查找功能的樣式及相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-02-02
List Information About the Binary Files Used by an Applicati
List Information About the Binary Files Used by an Application...2007-06-06
JavaScript實(shí)現(xiàn)LI列表數(shù)據(jù)綁定的方法
這篇文章主要介紹了JavaScript實(shí)現(xiàn)LI列表數(shù)據(jù)綁定的方法,可實(shí)現(xiàn)綁定Li列表項(xiàng)對(duì)應(yīng)數(shù)值項(xiàng)的功能,涉及javascript鼠標(biāo)onmousemove、onmouseout及onclick等事件的相關(guān)使用技巧,需要的朋友可以參考下2015-08-08
JavaScript實(shí)現(xiàn)英語(yǔ)單詞題庫(kù)
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)英語(yǔ)單詞題庫(kù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-12-12
使用bootstrap-paginator.js 分頁(yè)來(lái)進(jìn)行ajax 異步分頁(yè)請(qǐng)求示例
本篇文章主要介紹了使用bootstrap-paginator.js 分頁(yè)來(lái)進(jìn)行ajax 異步分頁(yè)請(qǐng)求示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-03-03
JavaScript中Window對(duì)象的屬性及事件
這篇文章主要介紹了JavaScript中Window對(duì)象的屬性及事件 的相關(guān)資料,需要的朋友可以參考下2015-12-12

