Nie, nie można wykonać takiej funkcji. Problemem jest to, że:
any_function(undeclared_variable)
będzie produkować ReferenceError jeśli undeclared_variable
nie został ogłoszony w dowolnym miejscu. Na przykład, jeśli uruchomić ten sam kod stoiska:
function f() { }
f(pancakes);
dostaniesz się ReferenceError ponieważ pancakes
nie został ogłoszony w dowolnym miejscu. Demo: http://jsfiddle.net/ambiguous/wSZaL/
Jednak typeof
operator można wykorzystać na coś, co nie została zadeklarowana więc:
console.log(typeof pancakes);
po prostu zalogować się undefined
w konsoli. Demo: http://jsfiddle.net/ambiguous/et2Nv/
Jeśli nie przeszkadza możliwe ReferenceErrors wtedy masz już niezbędną funkcję w swoim pytaniu:
function exists(obj, key) {
if (typeof obj !== "undefined" && obj !== null)
return obj[key];
return null; // Maybe you'd want undefined instead
}
lub, ponieważ nie ma potrzeby, aby móc korzystać z typeof
zmiennych niezadeklarowanych tutaj można uprościć do:
function exists(obj, key) {
if(obj != null)
return obj[key];
return null;
}
Uwaga zmiana do !=
, undefined == null
jest prawdą mimo undefined === null
nie jest.
Na ten musiałby pobierające ogólnego zastosowania ('definegetter (o, function (własności) {...})', które są, jeśli dobrze pamiętam correclty, nie jest częścią specyfikacji jest obsługa JavaScript. – Zeta
@Zeta Nie tak naprawdę, ponieważ dostęp do nieistniejącej własności obiektu zwraca 'undefined' zamiast niepowodzenia, co powinno być wystarczająco dobre – millimoose
Najbliższe, o których mogę myśleć to:' function exists (obj) {if (obj) return obj; return {}; } ', ale to nie poradzi sobie z niezdefiniowanymi zmiennymi, JavaScript nie jest w ten sposób rozszerzalny syntaktycznie – millimoose