有時候,我看到的JavaScript代碼是這樣的:使用||在JavaScript中初始化對象運營商
var myObj = myObj || {};
那麼,究竟是什麼發生在這裏?我想||運算符返回true或false,但它不正確。
有時候,我看到的JavaScript代碼是這樣的:使用||在JavaScript中初始化對象運營商
var myObj = myObj || {};
那麼,究竟是什麼發生在這裏?我想||運算符返回true或false,但它不正確。
||
運算符返回左操作數,如果它評估爲真,否則它計算並返回右操作數。換句話說,a || b
相當於a ? a : b
,只不過a
只評估一次。
這會初始化myObj,除非它已被定義。
||是一個短路操作員。如果第一個操作數的計算結果爲true,則不計算第二個操作數。
因此JS a || b
是類似於C#a ?? b
如果myObj
未定義或空值,則它的計算結果,其創建新的空的對象
所以myObj
要麼MyObj中,如果它在的||
右側的表達不爲空或空對象,如果MyObj中是空
我希望你明白我的意思
另外,如果'myObj'的值是false或0或NaN或空字符串,它也會導致變量被分配一個新的對象。它不是**只是**未定義或爲空。 JavaScript中有6個虛假的東西。 –
@Ray Toal:謝謝你的加入 – Fender
的或OP(||)將返回第一個非空/ false參數。
在這種情況下指定的,如果MyObj中是虛假或無效,將被設置爲一個空對象(括號{}用於創建對象)
您可以使用此結構來獲取是對象而不是null
,undefined
等。這用於後面在代碼中使用myObj
的情況,該代碼要求它是對象。如果由於某種原因,myObj
在此行之前未定義,則重新分配它將使其保留undefined
或null
,在這種情況下,它將被分配爲{}
。
你可以認爲這是:
// If the object is already defined
if (myObj)
var myObj = myObj;
// It was undefined or null, so assign an empty object to it.
else
var myObj = {};
要理解||運算符,我們先來看一個相當基本的例子。邏輯OR運算符可被用來爲一個定義的變量提供一個默認值如下:
var bar = false,
foobar = 5,
foo = bar || foobar; // foo = 5
在這種情況下,FOO將僅在杆falsy認爲是分配foobar的值。假想值可以被認爲等於0,假,未定義,空,NaN或空(例如「」)。
+1在JavaScript中也稱爲* null合併運算符* http://stackoverflow.com/questions/476436/null-coalescing-operator-for-javascript/476445#476445 – naveen
不,它可以用作*替換*爲C#的空合併運算符('??')。 :)我從來沒有聽說過'||'叫做「空合併運算符」;它一直是「邏輯或」操作符。 – cdhowie
表示同意。從OP的前面的問題,他是從ASP.NET的背景,這就是爲什麼澄清。 – naveen