访问对象密钥时,如果没有'不存在
How can I throw an error when accessing an object key that doesn't exist?
这是一个很长的机会。。。
在Javascript中,我正在访问一个我确信存在的对象属性,但我在键的名称中有一个拼写错误,因此返回了undefined
并创建了一个错误。
我怎么能写与以下内容等效的代码,但因为键不存在而引发错误?
var obj = {'myKey': 'myVal'},
val = obj.myKye;
我正在努力寻找一种解决方案,它不需要我编写包装器函数,每次我想访问对象的成员时都会使用该函数。有可能吗?Javascript中是否还有另一种"更严格"的访问对象属性的技术?
你不能。。。
如果您想非常小心,hasOwnProperty会让您检查属性是否已定义。
function GetSafe(obj, propertyName)
{
if (obj.hasOwnProperty(propertyName)) return obj[propertyName];
return "Unknown property:"+ propertyName; // throw or some other error reporting.
}
var obj = {'myKey': 'myVal'};
alert(GetSafe(obj, "myKey"));
alert(GetSafe(obj, "myKye"));
一个不需要我编写包装器函数的解决方案,每次我想访问对象的成员时都会使用该函数。有可能吗?Javascript中是否还有另一种"更严格"的访问对象属性的技术?
没有。你可以使用Proxy
,它的设计完全是为了做你想做的事。然而,它只是一个草案,目前仅在Firefox的Javascript 1.8.5(FF18+)中支持。
没有其他可能为所有属性访问提供隐式getter函数。您必须对其进行显式编码。
试试这个:
function invalidKeyException(message) {
this.message = message;
this.name = "invalidKeyException";
}
var obj = {'myKey': 'myVal'},
val = obj.myKye;
if (val == undefined)
throw new invalidKeyException("Key does not exist.");
JSFiddle:http://jsfiddle.net/r2MM4/
(看控制台)
您可以尝试以下方法:
1) 使用typeof
:
try {
var obj = {'myKey': 'myVal'}, val;
if(typeof (obj.myKye) === 'undefined')
{
var e = new NotImplementedError("NotImplementedError Your_message");
throw e;
}
else
{
val = obj.myKye;
}
alert(val);
}
catch(e)
{
alert(e);
}
2) 使用obj.hasOwnProperty(prop)
:
try {
var obj = {'myKey': 'myVal'}, val;
if(obj.hasOwnProperty(myKye))
{
val = obj.myKye;
}
else
{
throw 'Property undefined';
}
alert(val);
}
catch(e)
{
alert(e);
}
您可以使用try-catch
、hasOwnProperty
并创建ReferenceError。
var obj = {
'myKey': 'myVal'
}, val;
try {
if(obj.hasOwnProperty(myKye))
{
val = obj.myKye;
alert(val);
}
else{
var ex = new ReferenceError()
}
}
catch(ex) {
alert(ex);
}
测试链路
更新:
obj.myKye
返回undefined
并且不抛出异常,因为
这就是JS语言规范。
对象对于未定义的属性名称返回未定义,但未定义的变量引用抛出错误
相关文章:
- javascript如果图像不存在don't加载它
- JavaScript-如果以前不存在文本,如何从文本区域删除新行
- 在scala或scalajs Diode中,现有类型中的任何一种都符合“;更新一个没有'还不存在”;
- 如果文件不存在,fs.watch是否有错误处理程序
- 从params推送到对象(如果不存在)
- 如何从网站获得apple touch图标,如果没有;不存在,则显示收藏夹
- 如果 document.title 不存在,如何获取页面标题名称
- 在'用于'如果javascript中不存在对象属性,则循环
- 注册表格上显示用户名已经在使用,但它没有;不存在
- 有没有一个lodash函数可以合并两个对象并删除其中一个对象的属性(如果它们没有)'不存在于另一个中
- 如果代码没有'txt文件中不存在
- 否则,如果元素ID没有'不存在
- 如果对象没有'不存在
- 如果图像文件没有'不存在,显示另一个
- 访问对象密钥时,如果没有'不存在
- 美元.inArray函数没有返回"-1"如果项目不存在
- 捕获角度通配符路由,如果它没有'不存在
- jQuery append元素,如果它没有'不存在,否则替换
- 在Javascript中,如果属性没有'不存在
- 当有一个警报函数存在时,回调会被触发,如果没有警报,它不会被触发