JavaScript中的抑或是一種常見的邏輯運(yùn)算符,其符號(hào)為“^”,有時(shí)也被稱為“異或”。它的作用是比較兩個(gè)值,如果它們不同,則返回true,否則返回false。下面我們來看看幾個(gè)例子:
console.log(8 ^ 3); // 11 console.log(5 ^ 5); // 0 console.log("hello" ^ "world"); // NaN
在第一個(gè)例子中,8的二進(jìn)制表示是1000,3的二進(jìn)制表示是0011,所以它們的抑或值是1011,即11。
在第二個(gè)例子中,兩個(gè)值相同,所以返回0。
在第三個(gè)例子中,抑或只能在數(shù)字之間進(jìn)行,因此在字符串之間使用抑或時(shí)會(huì)返回NaN。
除了對(duì)數(shù)字進(jìn)行抑或外,在JavaScript中還可以使用抑或運(yùn)算符來進(jìn)行一些常見的操作,接下來我們將介紹其中的幾個(gè):
將兩個(gè)數(shù)交換
let a = 5; let b = 9; a ^= b; b ^= a; a ^= b; console.log(a, b); // 9 5
以上代碼展示了一個(gè)非常有用的抑或應(yīng)用,即將兩個(gè)數(shù)交換。這種方法的原理是通過兩次抑或運(yùn)算,取消了變量的值,從而實(shí)現(xiàn)了值的交換。
判斷奇偶
function isOdd(n) { return n ^ 1; } console.log(isOdd(2)); // 3 console.log(isOdd(3)); // 2
以上代碼展示了用抑或運(yùn)算符來判斷一個(gè)數(shù)是奇數(shù)還是偶數(shù)的方法。如果一個(gè)數(shù)是偶數(shù),那么它的二進(jìn)制表示的最后一位一定是0,抑或1后最后一位變?yōu)?,變成奇數(shù)。如果一個(gè)數(shù)是奇數(shù),那么它的二進(jìn)制表示的最后一位一定是1,抑或1后最后一位變?yōu)?,變成偶數(shù)。
數(shù)組去重
let arr = [1, 2, 2, 3, 3, 4, 5, 5, 5]; let res = arr.reduce((x, y) =>x ^ y); console.log(res); // 4
以上代碼展示了用抑或運(yùn)算符來實(shí)現(xiàn)數(shù)組去重的方法。由于抑或運(yùn)算符的特性,相同的值抑或的結(jié)果為0,因此我們可以把數(shù)組中的所有元素都進(jìn)行抑或,最終得到的結(jié)果就是數(shù)組中唯一的一個(gè)重復(fù)元素。事實(shí)上,這個(gè)方法并不是十分實(shí)用,只是一種有趣的應(yīng)用。
抑或運(yùn)算是JavaScript中的一種重要的操作符,在不同的場景下都有不同的用途,在實(shí)際開發(fā)中要熟練掌握它的使用方法。