这是一个长镜头...
在 Javascript 中,我正在访问一个我确定存在的对象属性,但我的键名中有一个错字,因此返回undefined
并创建了一个错误。
如何编写与以下等效的代码,但由于密钥不存在而引发错误?
var obj = {'myKey': 'myVal'},
val = obj.myKye;
我试图找到一个解决方案,它不需要我编写每次我想访问对象成员时使用的包装函数。可能吗?Javascript 中是否有另一种“更严格”的技术来访问对象属性?
这是一个长镜头...
在 Javascript 中,我正在访问一个我确定存在的对象属性,但我的键名中有一个错字,因此返回undefined
并创建了一个错误。
如何编写与以下等效的代码,但由于密钥不存在而引发错误?
var obj = {'myKey': 'myVal'},
val = obj.myKye;
我试图找到一个解决方案,它不需要我编写每次我想访问对象成员时使用的包装函数。可能吗?Javascript 中是否有另一种“更严格”的技术来访问对象属性?
一种不需要我编写包装函数的解决方案,每次我想访问对象的成员时都会使用该函数。可能吗?Javascript 中是否有另一种“更严格”的技术来访问对象属性?
不,您可以使用 a Proxy
,它旨在完全按照您的意愿行事。然而,它只是一个草稿,目前仅在 Firefox 的 Javascript 1.8.5 (FF18+) 中支持。
没有其他可能为所有属性访问提供隐式 getter 函数。您将必须明确编码。
你不能...
如果你想非常小心,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"));
尝试这个:
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语言规范。