有什麼區別:if((typeof OA != 'undefined') && OA)
和if(OA)
?區別:if((typeof OA!='undefined')&& OA)和if(OA)
以前的聲明有效;後者悄悄停止當前函數的執行。
(也許是一個菜鳥問題)
謝謝!
有什麼區別:if((typeof OA != 'undefined') && OA)
和if(OA)
?區別:if((typeof OA!='undefined')&& OA)和if(OA)
以前的聲明有效;後者悄悄停止當前函數的執行。
(也許是一個菜鳥問題)
謝謝!
if(OA)
將會失敗如果OA
從未定義。 typeof OA != 'undefined'
檢查是否定義了OA
。
var OA;
if(OA){
}
This works。
if(OA){
}
這是行不通的:OA is not defined
。
typeof OA != 'undefined' && OA
檢查,如果它試圖訪問變量
+1,可能值得注意的是'undefined'是false-y,你的第一個例子不檢查'null',它檢查'undefined'。人們似乎感到困惑。未定義的類型與「未定義」類型不同。 – Marc 2012-04-17 17:16:32
編譯器之前定義不會嘗試評估OA櫃面地方在它試圖如果(OA)
if ((typeof OA != 'undefined') && OA)
這將首先評估在使用typeof檢查是否定義了變量OA
。如果是,它將被轉換爲布爾值並進行評估。
if(OA)
這是假設OA
存在,並立即把它強制轉換爲布爾值,並評估它。
第二個示例將拋出javascript異常,如果變量OA
從未聲明 - 第一個示例可以避免這種情況。
有關JavaScript中undefined
的多重含義的更多說明,請參閱my answer here。
用try {} catch(){}進行了雙重檢查:ReferenceError:OA沒有定義。 因此,可能導致運行時異常的「未定義」不是「未定義」,在布爾運算中被視爲虛假。顯然我是一名新秀,但爲什麼會有微妙的差異? – user1279175 2012-04-17 19:21:27
http://stackoverflow.com/questions/10098816/is-variable-set-defined-issue/10099267#10099267 – jbabey 2012-04-17 19:22:12
你能提供一些更多的上下文嗎?這兩個語句本質上是相同的,但如果沒有聲明「OA」(即'var OA;'),則第二個語句將失敗。你永遠不應該處於第二種情況,總是聲明變量(如果它們不是函數參數的名稱)。 – 2012-04-17 17:12:58
@FelixKling:我認爲這是問題。 – 2012-04-17 17:13:49
@火箭:可能......它只是看起來很奇怪...猜我還沒有看到這樣的代碼在一段時間;)使用JSHint真的也有幫助... – 2012-04-17 17:14:49