2014-02-07 24 views

回答

3

如果​​設置爲false或尚未在所有被定義,

prjId = navObj;

否則:

prjId = navObj.itemId;

+0

@ p.s.w.g有更正確的答案。如果navObj.itemId設置爲false,則會定義它,但會將prjId設置爲navObj。 – Jage

+0

@Jage正確。沒有想到這一點。更新了答案以涵蓋該角落。 –

2

否。||運算符首先嚐試將​​轉換爲布爾值。

  • 它會被轉換爲true如果它已經是布爾值,true,比0NaN,非空字符串,或對象不是nullundefined以外的數字。這些被稱爲「truthy」的值。

  • 它會被轉換爲false如果它已經是布爾值false0NaN,一個空字符串,nullundefined。這些被稱爲「falsey」值。

如果​​是 「truthy」,​​被分配到prjId,否則navObj被分配到prjId

進一步閱讀

+0

我不是js專家,但那不是三元運算符。對我而言,這意味着如果其中一個條件成立,則prjId是真實的。不是嗎? – sam

+0

不,據我瞭解,pswg的答案甚至沒有討論三元組,但是/ quality /(「truthy」與「falsey」)如果你願意運算'||'運算符兩邊的項目。如果左側的/ quality /爲真,則該變量設置爲左側的/ value /。如果不是,則使用右側。 –

+1

@ user711061不完全。 JS中的'||'運算符是'?:'運算符的簡化版本。 'x || y'相當於'x? x:y'。結果是'x'或'y',而不是與它們相關的真值。 –

0

它設置prjId到的itemId對navObj的屬性(如果存在)(計算結果爲 'truthy'),如果它不存在(或者它評估爲'falsy'),prjId被設置爲navObj。

3

這等效於以下:

var prjId; 
if(navObj.itemId) 
    prjId = navObj.itemId; 
else 
    prjId = navObj; 
1

它只是意味着如果邏輯或操作者(||)的左操作數是一個truthy值,則返回它否則返回右邊的操作數。

以下值始終falsy:

  • 空字符串
  • 未定義
  • NAN(非數字)

所以如果​​未評估爲上述任何內容,則將其分配給prjId變量。例如,當我們在函數中有可選參數時,這被廣泛使用。這是一種爲可選參數指定默認值的方法。但當然,這不是它的唯一用途。