ECMAScript 布爾操作符(邏輯非、邏輯與、邏輯或)
布爾操作符 在一門編程語言中,布爾操作符的重要性堪比相等操作符。如果沒有測試兩個值關系的能力,那么諸如if...else和循環(huán)之類的語句就不會有用武之地了。布爾操作符一共有3個:非(NOT)、與 (AND)和或(OR)。
1.邏輯非
邏輯非操作符由一個嘆號(!)表示,可以應用于ECMAScript中的任何值。無論這個值是什么數據類型,這個操作符都會返回一個布爾值。邏輯非操作符首先會將它的操作數轉換為一個布爾值,然后再對其求反。也就是說,邏輯非操作符遵循下列規(guī)則:
◎如果操作數是一個對象,返回false;
◎如果操作數是一個空字符串,返回七rue;
◎如果操作數是一個非空字符串,返回false;
◎如果操作數是數值0,返回true;
◎如果操作數是任意非0數值(包括Infinity),返回false;
◎如果操作數是null,返回true;
◎如果操作數是NaN,返回true;
◎如果操作數是undefined,返回true。
下面幾個例子展示了應用上述規(guī)則的結果:
alert(! false); //true
alert(!"blue"); //false
alert(1 0); //true
alert(! NaN); //true
aler七(!""); //true
alert( !12345); //false
邏輯非操作符也可以用于將一個值轉換為與其對應的布爾值。而同時使用兩個邏輯非操作符,實際上就會模擬Bolean()轉型函數的行為。其中,第一個邏輯非操作會基于無論什么操作數返回一個布爾值,而第二個邏輯非操作則對該布爾值求反,于是就得到了這個值真正對應的布爾值。當然,最終結果與對這個值使用Boolean()函數相同,如下面的例子所示:
alert(!!"blue"); //true
alert(!1 0); //false
alert(!!NaN); //false
alert(!!‘’“); //false
alert(!!12345); //true
2.邏輯與
邏輯與操作符由兩個和號(&&)表示,有兩個操作數,如下面的例子所示:
var result=true&&false;
邏輯與的真值表如下:
第一個操作數第二個操作數結果
truetruetrue
truefalsefalse
falsetruefalse
falsefalsefalse
南昌網頁設計公司前端開發(fā)工程師小結:邏輯與操作可以應用于任何類型的操作數,而不僅僅是布爾值。在有一個操作數不是布爾值的情況下,邏輯與操作就不一定返回布爾值;此時,它遵循下列規(guī)則:
◎如果第一個操作數是對象,則返回第二個操作數;
◎如果第二個操作數是對象,則只有在第一個操作數的求值結果為true的情況下才會返回該對象;
◎如果兩個操作數都是對象,則返回第二個操作數;
◎如果有一個操作數是null,則返回null:
◎如果有一個操作數是NaN,則退回NaN:
◎如果有一個操作數是undefined,則返回undefined。
邏輯與操作屬于短路操作,即如果第一個操作數能夠決定結果,那么就不會再對第二個操作數求值。對于邏輯與操作而言,如果第一個操作數是false,則無論第二個操作數是什么值,結果都不再可能是true了。來看下面的例子:
var found=true;
var result=(found&&s。meUndefinedVariable); //這里會發(fā)生錯誤
alert(result); //這一行不會執(zhí)行
在上面的代碼中,當執(zhí)行邏輯與操作時會發(fā)生錯誤,因為變量someUndefinedVariable沒有聲明。由于變量found的值是true,所以邏輯與操作符會繼續(xù)對變量someUndefinedVariable求值。
someUndefinedVariable尚未定義,因此就會導致錯誤。這說明不能在邏輯與操作中使用未定義的值。如果像下面這個例中一樣,將found的值設置為false,就不會發(fā)生錯誤了:
var ound = true;
var result=(found&& someUndefinedVariable); //不會發(fā)錯誤
alert (result); //會執(zhí)行("false")
在這個例子中,警告框會顯示出來。無論變量someUndefinedVariable有沒有定義,也永遠不對它求值,因為第一個操作數的值是false。而這也就意味著邏輯與操作的結果必定是false,根本用不著再對&&右側的操作數求值了。在使用邏輯與操作符時要始終銘記它是一個短路操作符。
3.邏輯或
邏輯或操作符由兩個豎線符號(||)表示,有兩個操作數,如下面的例子所示:
var result=true || false;
邏輯或的真值表如下:
第一個操作數第二個操作數結果
truetruetrue
truefalsetrue
falsetruetrue
falsefalsefalse
南昌做網站公司前端開發(fā)工程師對邏輯或進行小結:與邏輯與操作相似,如果有一個操作數不是布爾值,邏輯或也不一定返回布爾值;此時,它遵循下列規(guī)則:
◎如果第一個操作數是對象,則返回第一個操作數;
◎如果第一個操作數的求值結果為false,則返回第二個操作數;
◎如果兩個操作數都是對象,則返回第一個操作數;
◎如果兩個操作數都是null,則返回null;
◎如果兩個操作數都是NaN,則返回NaN;
◎如果兩個操作數都是unde fined,則返回undefined。
與邏輯與操作符相似,邏輯或操作符也是短路操作符。也就是說,如果第一個操作數的求值結果為true,就不會對第二個操作數求值了。下面看一個例子:
var found=true;
var result= (found || someUndefinedVariable}; //不會發(fā)生錯誤
alert (result); //會執(zhí)行("true")
這個例子跟前面的例子一樣,變量someUnde finedVariable也沒有定義。但是,由于變量found的值是true.而變量someUndefinedVariable永遠不會被求值,因此結果就會輸出"true"。如果像下面這個例子一樣,把found的值改為false.
var found = false;
var result=(found || someUndefinedVariable); //這里會發(fā)生錯誤
alert (result); //這一行不會執(zhí)行
我們可以利用邏輯或的這一行為來避免為變量賦null或undefined值。例如:
var myObject=preferredObject || backupObject;
在這個例子中,變量myObj ect將被賦予等號后面兩個值中的一個。變量preferredObject中包含優(yōu)先賦給變量myObj ect的值,變量backupObj ect負責在preferredObject中不包含有效值的情況下提供后備值。如果preferredObjec七的值不是null,那么它的值將被賦給myObject;如果是null,則將backupObject的值賦給myObj ect。ECMAScript程序的賦值語句經常會使用這種模式,南昌網站建設公司百恒網絡也將采用這種模式。
希望本文對廣大站長或從事企業(yè)網站建設公司的團隊有所幫助,如對此不太理解的,可以與南昌網絡公司百恒網絡技術部聯(lián)系。我們很高興與廣大站長和從事企業(yè)網站建設公司技術人員分享我們的技術和經驗。