[英]Check whether an image exists, if not set a default image using Javascript
[英]Javascript using if(foo) exists to check if variable is set
我意識到這個問題與其他許多問題非常相似,但我必須在檢查變量是否設置時遺漏一些細微差別。 我在其他開發人員代碼中看到了這一點:
if(foo){
doSomething(foo);
}
else{
alert('error of whatever');
}
意圖是doSomething()只有在foo設置或未定義時才會執行。 然而,當我谷歌這個時,似乎每個人都應該使用“typeof”而不是上面的方法。 我特意看到這與角度一起使用,如下所示:
if($scope.property){
dothis();
}
我錯過了什么嗎? 當我看到上面的代碼時,它似乎工作,但我看到的所有答案都沒有說這是檢查是否設置或存在的正確方法。
對於if()
檢查,在MOST場景中,您要檢查對象上是否存在屬性(您的情況),您所描述的內容完全有效,簡單方便。 它檢查屬性是否存在,如果存在則返回true。
但是,有很多細微差別的區域,其中類型檢查“更”正確,特別是如果您的類型以任何方式通過==
強制或者您想要區分null
和undefined
。
例如,如果null
是您的屬性的有效值但undefined
,則在您的示例中仍然會調用dothis()
。 你可以通過typeof
檢查來防止這種情況。
if (typeof $scope.property === 'undefined') {
dothis();
}
最后,如果要檢查是否存在變量而不是存在屬性,則如果未檢查要檢查的變量,則會拋出異常,從而強制使用typeof檢查。
在這些情況下,冗長是你的朋友。
這與“ 真實性 ”的概念有關。 除 false,0,“”,null,undefined和NaN 之外的任何值都是“truthy”,這意味着if語句的第一個塊將運行。 例如:
if ("") {
alert("falsie"); // won't run because the empty string ("") is falsie
} else {
alert("truthie"); // will run
}
而
if ("something") {
alert("truthy"); // will run because "something" is truthy
} else {
alert("falsie"); // won't run
}
回到你的例子,如果foo是真實的(意味着它具有除false,0,“”,null,undefined和NaN之外的任何值)那么它將運行if語句的第一個塊(具有doSomething) ()函數)。
您也可以使用短路評估並在一行中執行此操作。
($ scope.property && doThis())
如果需要顯式檢查值是否undefined
最好使用typeof
。 如果您只想檢查值是否真實,那么您不需要typeof。
首選typeof運算符的原因是因為它與未聲明的變量一起使用時不會拋出ReferenceError異常。
但是,請務必注意,初始化為null的變量將返回“object”,因此為避免此問題,建議使用以下代碼:
if (typeof variable === 'undefined' || variable === null) {
// variable is undefined or null
}
你用這種方式檢查的是foo
不是:
false
Undefined
Null
+0, −0, or NaN
Empty String
更多信息:
https://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/
這樣,只有在foo
有效時才會執行您的function
。
您可能希望更具體,並使用typeof
檢查某種type
。
var foo = 'foo';
if (typeof foo === 'string') { // true
doSomething();
}
typeof運算符返回一個字符串,指示未評估的操作數的類型。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.