不,你不能產生這樣的功能。問題是這樣的:
any_function(undeclared_variable)
會產生的ReferenceError如果undeclared_variable
沒有任何地方聲明。例如,如果運行這個獨立的代碼:
function f() { }
f(pancakes);
你會得到的ReferenceError因爲pancakes
沒有任何地方聲明。演示:http://jsfiddle.net/ambiguous/wSZaL/
然而,typeof
operator可以對尚未聲明所以這個東西可以使用:
console.log(typeof pancakes);
將只需登錄控制檯的undefined
。演示:http://jsfiddle.net/ambiguous/et2Nv/
如果你不介意的話可能ReferenceErrors那麼你已經具備必要的功能,在你的問題:
function exists(obj, key) {
if (typeof obj !== "undefined" && obj !== null)
return obj[key];
return null; // Maybe you'd want undefined instead
}
或者,因爲你並不需要能夠在未聲明的變量使用typeof
在這裏,您可以簡化它歸結爲:
function exists(obj, key) {
if(obj != null)
return obj[key];
return null;
}
注意改變!=
,undefined == null
是真實的,即使undefined === null
不是。
對於這一個需要通用干將('definegetter(O,函數(財產){...})',它是,如果我還記得correclty,沒有JavaScript的規範的一部分。 – Zeta
@Zeta不真的,因爲訪問一個對象的不存在的屬性返回'undefined'而不是失敗,這應該是不夠的。 – millimoose
我能想到的最接近的是函數exists(obj){if(obj)return obj; return {}; }',但是不能處理未定義的變量,Javascript在語法上不是這樣可擴展的 – millimoose