Я пытался реализовать функцию, подобную angular.isDefined(...)
но позволяя проверить переменные и их свойства, поэтому я написал это доказательство концепции:
function check(s) {
let parts = s.split('\.');
let partial = '';
return parts.every(p => {
partial += (partial ? '.': '') + p;
let expr = `typeof ${partial}`;
console.log('Evaluating', expr);
return eval(expr) !== 'undefined';
});
}
check('obj');
let obj={};
check('obj');
obj.a=1;
check('obj.a');
Я знаю, что typeof
допускает необъявленный идентификатор, и, похоже, он правильно работает в eval()
:
console.log(typeof someVariableWhichDoesNotExists)
console.log(eval('typeof someVariableWhichDoesNotExists'));
Но в моем коде происходит сбой, когда он обрабатывается eval()
. Чего мне не хватает?
PS: я прочитал Почему typeof только иногда выдает ReferenceError? , но я думаю, что это не тот же сценарий, я не проверяю здесь выражение, а просто идентификатор.