Boolean運算子有3種:
1.邏輯NOT
邏輯NOT由!表示.與邏輯OR和邏輯AND運算子不同的是:邏輯NOT運算子返回的一定是Boolean值.
邏輯NOT運算子的行為如下:
- 如果運算數是對象,返回false
- 如果運算數是0以外的其他任何數字,返回false
- 如果運算數是0,返回true
- 如果運算數是null,返回true
- 如果運算數是NaN,返回true
- 如果運算數是undefined,發生錯誤
- 對Boolean值求非,從而得到真正的Boolean值
例子:
function display(value){ document.write(value+"<br/>"); } display(!new Object()); display(!100); display(!0); display(!null); display(!NaN); display(!true); display(!false); //undefined display(!ss);
結果:
總結:
- 如果運算數是0,null,NaN以及未定義的值,則求非之後,結果為true
- 如果運算數是0以外的任何數字或對象,則求非之後,結果為false
2.邏輯AND運算子
邏輯AND運算子由&&表示.邏輯AND是簡便運算,即:如果第一個運算數決定了結果,就不再計算第二個運算數,對於邏輯與來說,如果第一個運算數是false,無論第二個運算數的值是什麼,都不可能等於true.
下面採用真值的方式來描述:
第一個運算元 |
第二個運算元 |
結果 |
true |
true |
true |
true |
false |
false |
false |
true |
false |
false |
false |
false |
邏輯AND運算子的運算數可以是任何類型的,不止是Boolean值.如果某個運算數不是原始的Boolean值,邏輯AND並不一定返回Boolean值.
- 如果第一個運算數是對象,那麼返回第二個運算數
- 如果某個運算數是null,則返回null
- 如果某個運算數是NaN,則返回NaN
- 如果某個運算數是undefined,則發生錯誤
例子:
function display(value){ document.write(value+"<br/>"); } var trueValue = true; var falseValue = false; var obj1 = new Object(); obj1.name="obj1"; var obj2 =new Object(); obj2.name="obj2"; var result; //如果第一個運算數是對象,另一個運算數是Boolean值,則返回Boolean值 result = obj1 && trueValue; display(result); result = obj1 && falseValue; display(result); //如果第一個運算數是Boolean值,則會按照簡便運算方式運行 result = trueValue && obj1;//obj1 && true; display(result.name); result = falseValue && obj1; display(result); display(trueValue && 'www') //如果兩個運算數都是對象,則返回第二個對象 result = obj1 && obj2; display(result.name); //如果某個運算數是null,則返回null result = obj1 && null; display(result); //如果某個運算數是NaN,則返回NaN result = obj1 && NaN; display(result); //如果某個運算數是undefined,則發生錯誤 result = obj1 && ss; display(result);
結果:
總結:
- 當變數為null,NaN以及未定義值的時候和false一樣,擁有否決權,分別返回null,NaN,undefined.
- 當運算數為對象時,都將通過運算.如果第一個運算數通過運算,那麼將返回第二個運算數.
- 當運算數未被聲明時,引發錯誤.
3.邏輯OR運算子
邏輯OR運算子由||表示.邏輯OR運算子也是簡便運算,如果第一個運算數為true,則不再計算第二個運算數.
下面採用真值的方式來描述:
第一個運算元 |
第二個運算元 |
結果 |
true |
true |
true |
true |
false |
true |
false |
true |
true |
false |
false |
false |
邏輯OR運算子的運算數可以是任何類型的,不止是Boolean值.如果某個運算數不是原始的Boolean值,邏輯OR並不一定返回Boolean值.
- 如果第一個運算數是對象,則返回該對象
- 如果第一個運算數為false,null,NaN,undefined,第二個運算數為null,則返回null
- 如果第一個運算數為false,null,NaN,undefined,第二個運算數為NaN,則返回NaN
- 如果第一個運算數為false,null,NaN,undefined,第二個運算數為undefined,則引發錯誤.
例子:
function display(value){ document.write(value+"<br/>"); } var trueValue = true; var falseValue = false; var obj1 = new Object(); obj1.name="obj1"; var obj2 =new Object(); obj2.name="obj2"; var result; //如果第一個運算數是對象,則返回該對象 result = obj1 || trueValue; display(result.name); result = obj1 || falseValue; display(result.name); result = obj1 || obj2; display(result.name); //如果第一個運算數為false,null,NaN,undefined,第二個運算數為null,則返回null display(false || null); //如果第一個運算數為false,null,NaN,undefined,第二個運算數為NaN,則返回NaN display(null || NaN); //如果第一個運算數為false,null,NaN,undefined,第二個運算數為undefined,則引發錯誤 display(NaN || ss); display(ss || ss);
結果: