簡體   English   中英

(|)和(||)之間有什么區別?

[英]What's the difference between ( | ) and ( || )?

|之間有什么區別? || 在Javascript?

此外, &&&之間有什么區別?

| 是一個按位或, || 是合乎邏輯的還是。

按位或取兩個數字並逐位比較它們,產生一個新的整數,它將兩個輸入的1位組合在一起。 所以0101 | 1010 0101 | 1010將產生1111

邏輯或|| 檢查值的“真實性”(取決於類型,對於整數0為假,非零為真)。 它從左到右評估語句,並返回第一個值為truthy的值。 所以0101 || 1010 0101 || 1010將返回0101 ,這是真實的,因此整個陳述被認為是真實的。

相同類型的邏輯適用於& vs && 0101 & 1010 = 0000 但是0101 && 1010計算結果為1010&&返回最后的真值,只要兩個操作數都是真實的)。

區別在於邏輯運算符只考慮面值的每個輸入,將它們視為整體,而按位運算符在位級工作

var thetruth = false;
var therest = true;

var theuniverse = thetruth && therest; //false
var theparallel = thetruth && thetruth; //true

var theindifferent = thetruth || therest; //true
var theideal = thetruth || thetruth; // false

var thematrix = 5346908590;
var mrsmith = 2354656767;

var theoracle = thematrix & mrsmith; //202445230
var theone = thematrix | mrsmith; //7499120127

另一個區別是|| 使用快捷方式評估 也就是說,如果左側為false (或在布爾上下文中轉換為false,例如0""null等),它僅評估右側。 類似地, &&僅在左側為true (或非零,非空字符串,對象等)時評估右側。 | &始終評估雙方,因為結果取決於每個值中的確切位。

理由是|| ,如果任何一方都是真的,整個表達式都是正確的,所以沒有必要進一步評估。 &&是相同但反轉。

||的確切邏輯 如果左側是“truthy”,則返回該值(注意它不會轉換為布爾值 ),否則,評估並返回右側。 對於&& ,如果左側是“假”,則將其返回,否則評估並返回右側。

這里有些例子:

false && console.log("Nothing happens here");
true || console.log("Or here");
false || console.log("This DOES get logged");
"foo" && console.log("So does this");

if (obj && obj.property) // make sure obj is not null before accessing a property

用外行的話來解釋一下:

&&|| 邏輯運算符。 這意味着它們用於邏輯比較;

if (a == 4 && b == 5)

這意味着“如果a等於4 AND b等於5”

| &按位運算符。 它們以特定方式操作位,維基文章詳細解釋:

http://en.wikipedia.org/wiki/Bitwise_operation

在Javascript視角中,還有更多內容。

var a = 42;
var b = "abc";
var c = null;

a || b;     // 42
a && b;     // "abc"

c || b;     // "abc"
c && b;     // null

兩個|| 和&&運算符對第一個操作數(a或c)執行布爾測試。 如果操作數不是布爾值(因為它不在這里),則會發生正常的ToBoolean強制,以便可以執行測試。

對於|| 運算符,如果測試為真,則為|| 表達式導致第一個操作數(a或c)的值。 如果測試結果為假,則為|| 表達式導致第二個操作數(b)的值。

相反,對於&&運算符,如果測試為真,則&&表達式產生第二個操作數(b)的值。 如果測試為假,則&&表達式將生成第一個操作數(a或c)的值。

一個||的結果 或&&表達式始終是其中一個操作數的基礎值,而不是測試的(可能是強制的)結果。 在c && b中,c為null,因此是假的。 但是&&表達式本身導致null(c中的值),而不是測試中使用的強制false。

單身| 有點明智的OR運算符。 如果你做2 | 3,它轉換為二進制並執行OR運算。 01 11結果11等於3。

在哪里作為|| operator檢查第一個參數是否為true,如果為true則返回,否則返回其他運算符。 2 || 3返回2,因為2為真。

我要補充的另一點是|| 運算符用於指定默認值,以防您指定的值未定義。 因此,對於Exapmle,您將obj分配給某個對象測試,如果您不希望測試未定義,那么您可以執行以下操作以確保測試值不會被定義。

var test = obj || {};

所以如果obj未定義,那么test的值將是空對象。

因此它也用於為對象分配默認值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM