邏輯運算子通常用於執行布林代數,這種情況下也返回乙個布林值。但是在學習中發現邏輯運算子的另一種用法。
邏輯與運算子( && ):
當 && 運算子的兩個運算數都是布林值時,當且僅當左右兩邊都是true時,它才返回true,否則返回false
但是這個運算實際行為比較特殊,由於邏輯運算子是按從左到右的順序執行的,所以當計算位於左邊的表示式時,如果這個值能轉換成false(例如:null,0或者undefined),那麼運算子將返回左邊表示式的值,並且不會去執行右邊的表示式。
console.log(null && alert('hello')); //輸出null
當左邊的表示式可以轉換為true時,會執行右邊的表示式,並且返回右邊表示式的值。
'null' && alert('hello'); //執行結果是彈出訊息為hello的警告框
console.log('null' && prompt()) //執行結果是先彈出對話方塊,控制台輸出在對話方塊中輸入的值
可以看出該運算子左邊的值決定了右邊的表示式能否被計算。例如:接下來的兩行**是等效的
if(a==b) alert('a=b')
a==b && alert('a=b')
需要注意的是,我們在使用&& 運算子時,要盡量避免運算子右邊使用具有***(賦值,遞增,遞減,函式呼叫)的表示式,因為只要左邊的表示式為false,右邊的表示式不會去執行,這種情況稱為短路計算。個人理解為程式的惰性(已經判斷出整個表示式的值,不會繼續判斷)
null && alert('hello'); //不會去執行alert('hello')
邏輯或運算子( || ):
當 || 運算子的兩個運算數都是布林值時,當且僅當左右兩邊都為false時,它才返回false,否則返回true
|| 運算子的實際行為和 && 運算子一樣,比較複雜。先計算位於左邊的表示式,如果左邊的表示式能轉換為true,那麼運算子將返回左邊表示式的值,並且不會去執行右邊的表示式。
console.log('null' || alert('hello')); //輸出null,不會執行彈窗
當左邊的表示式轉換為false時,運算子將執行右邊的表示式,並且返回右邊表示式的值
console.log(null || prompt()) //執行結果是先彈出對話方塊,控制台輸出在對話方塊中輸入的值
和 && 運算子一樣,在使用 || 運算子時,應該避免使右邊的表示式產生***,除非故意不計算右邊的表示式
邏輯非運算子( !):
!運算子是一元運算子,放在運算數前面,對運算數布林值取反
var a ; //a為undefined
console.log(!a); //true
邏輯運算子優先順序
!> && >||
false && true || true // true
false && (true || true) // false
JS邏輯運算子
非運算 就是對乙個布林值進行取反操作,true變false,false變true 如果對乙個值進行兩次取反,它不會變化 如果對非布林值進行運算,則會將其轉換成布林值,然後再取反 所以可能利用這一特點將其他資料型別轉換為布林值 為任意資料型別取兩次反,轉換為布林值 var a 10 a hello a...
js邏輯運算子
1 運算方法 如果前邊是 false 無論後邊是false或者true,返回的都是後邊的值 如果前邊是 true 無論後邊是false還是true,返回的都是前邊值 真前假後 2 運算方法 如果前邊是 false 無論後邊是false還是true,返回的都是前邊的值 如果前邊是 true 無論後邊是...
js 比較運算子 邏輯運算子
運算子 運算子 1.純數字,加法數 算 2.加好左右只要有字串都得字串 字串鏈結 如 var a 1 1 a 1 1 document.write a 此時輸出2a11 在計算機中可以除0,任何數除0都得無窮。無窮 infinity 0除0得nan 非數,非數也是數 運算子 a 即 a 1 即 a ...