[英]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”
|
和&
是按位運算符。 它們以特定方式操作位,維基文章詳細解釋:
在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.