我是一位经验丰富的 C++/Java 程序员,第一次使用 Javascript。我使用 Chrome 作为浏览器。
我创建了几个带有字段和方法的 Javascript 类。当我读取一个不存在的对象字段时(由于我的拼写错误),Javascript 运行时不会抛出错误或异常。显然这样的读取字段是“未定义的”。例如:
var foo = new Foo();
foo.bar = 1;
var baz = foo.Bar; // baz is now undefined
我知道我可以检查“未定义”是否相等,如“检测 JavaScript 中未定义的对象属性 https://stackoverflow.com/questions/27509/detecting-an-undefined-object-property-in-javascript”,但这似乎很乏味,因为我经常在代码中读取对象字段。
当我读取未定义的属性时,有什么方法可以强制抛出错误或异常吗?
为什么当我读取未定义的变量(而不是未定义的对象属性)时会引发异常?
这可以通过使用来实现ES6 代理 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Proxy:
function disallowUndefinedProperties(obj) {
const handler = {
get(target, property) {
if (property in target) {
return target[property];
}
throw new Error(`Property '${property}' is not defined`);
}
};
return new Proxy(obj, handler);
}
// example
const obj = { key: 'value' };
const noUndefObj = disallowUndefinedProperties(obj);
console.log(noUndefObj.key);
console.log(noUndefObj.undefinedProperty); // throws exception
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)