我遇到undefined
和"undefined"
之間的這種差異,我試圖理解它。檢查對象屬性時與undefined或「undefined」進行比較。有什麼不同?
我正在檢查對象中的屬性是否已定義。 在第一個例子中,我檢查屬性是否未定義。以下所有測試評估爲真。無論我使用的是"undefined"
還是undefined
。
var test = {
x: 1,
y: 2
};
if (test.x != "undefined") console.log('test.x != "undefined"'); //TRUE
if (test.x !== "undefined") console.log('test.x !== "undefined"'); //TRUE
if (test.x != undefined) console.log('test.x != undefined'); //TRUE
if (test.x !== undefined) console.log('test.x !== undefined'); //TRUE
然後我用這不僅defined.It計算結果爲真,如果我使用undefined
(不是字符串文本)或typeof
財產嘗試過。
var test = {
x: 1,
y: 2
};
if (test.z === undefined) console.log("test.z === undefined"); //TRUE
if (test.z == undefined) console.log("test.z == undefined"); //TRUE
if (test.z === "undefined") console.log("test.z === 'undefined'"); //FALSE
if (test.z == "undefined") console.log("test.z == 'undefined'"); //FALSE
if (typeof test.z === "undefined") console.log("typeof test.z === 'undefined'"); //TRUE
所以我的問題是:爲什麼差別(我想我不明白的東西......)。我使用比較「undefined」/ undefined而不是.hasOwnProperty()
這是不好的做法嗎?
這取決於你想要檢查的內容。大多數時候,你可以簡單地使用像這樣的東西:'if(test.x){...}'或'if(!text.z){...}'。這些類型的條件檢查很多東西,例如'undefined',* empty string *,'0','null','false'。 – Titus
@Titus:我不想檢查它是否存在;下一階段是switch(),具體取決於屬性。 –
在這種情況下,你可以直接寫'switch'語句,不需要先檢查。 – Titus