2016-08-13 41 views
1

我剛穿過一塊其用在地方賦值語句JavaScript代碼來的地方的邏輯&&或邏輯OR表達式將用於:的javascript:使用賦值語句,其中的條件表達式通常會

var geo; 

function getGeoLocation() { 
    try { 
     if (!! navigator.geolocation) { 
      return navigator.geolocation; 
     } else { 
      return undefined;   
     } 
    } catch(e) { 
     return undefined; 
    } 
} 


if (geo = getGeoLocation()) { 
// ^^^^^^^^^^^^^^^^^^^^^ this is the statement I am interested in 
    console.log('conditional expression was true/truthy'); 
} 

我的問題是,從if聲明的角度來看,當評估
geo = getGeoLocation()時會返回什麼?
特別是它是什麼結果?這是什麼類型?

  • 無論功能getGeoLocation()回來了?
    (其中的類型將是truthy/falsy)
  • 它是作業的「結果」嗎?即是否分配了非空的東西?
    (在這種情況下,「結果」可能是布爾值,真/假?)
  • 還是別的?
+0

呀,用'地理位置返回()'會值被用來測試'if'條件。例如'if(a = false){console.log(「abc」)} undefined'但是if(a = true){console.log(「abc」)} VM402:1 abc' – tewathia

+0

「result 「的分配是指定的值。也就是說賦值運算符返回賦值的值。這就是爲什麼'a = b = c =「test」'起作用的原因。 – nnnnnn

+0

只需閱讀[賦值運算符的文檔](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Assignment_Operators#Assignment),其中明確指出「賦值操作計算結果爲分配的值「(換句話說,RHS)。 – 2016-08-13 04:37:49

回答

1
if (geo = getGeoLocation()) { 
    // ... 
} 

我的問題是,從if語句的角度來看,當 地理= getGeoLocation()評估正在返回什麼?

下面是會發生什麼時間步驟:

  • getGeoLocation()將執行第一
  • 賦值操作接下來會發生,在任何getGeolocation()收益將被存儲在geo

    • 這將是undefinednavigator.geolocation(如果存在)。
  • geo將被評估(測試truthiness)作爲 條件的if聲明

代碼相對應的是以下幾點:

geo = getGeoLocation(); 
if (geo) { 
    // ... 
} 
+0

謝謝,你的聲明'geo = getGeoLocation();如果(地理){// ...}'在我看來是一種有用的思考方式。這是我希望得到的答案,謝謝 –

+0

沒問題,很樂意幫忙,如果我可以 – nem035

+2

我會推薦這樣寫,因爲它在月份的軌道上更明顯。想象一下有一些bug,看看代碼並立即將其更改爲==,因爲這是更常見的模式 - 那麼你已經引入了另一個bug:p –

1

如果導航成功,你得到一個地理定位對象,這是真的,如果失敗,你可以在else部分看到,函數返回未定義,這是僞造的。

-1

它可能返回true或false,或者1或0。

通俗地講,就是不爲0或虛假評估爲true的值,我們可以做這樣的事情:

if (true) 
    always do this 
if (false) 
    never do this 

或者

// loop will break when v = 0 
var v = 10 
while (v) { 
    if (v) 
     do something... 
    v--; 
}   
+1

任何不是0,false,undefined或null的對象。 –

+0

與代碼中的註釋相反,while循環將永遠不會結束。 – nnnnnn

+0

我想你的意思是「評估」而不是「返回」。無論如何,它不會「返回真或假」,它**評估**爲真或假。 – 2016-08-13 04:33:51