我正在尝试访问JavaScript对象中的某个成员。为此,我需要尝试一些关键值。
例如,Object['text/html']
将为我提供HTML文档的导出链接。但是,并非此类型的每个对象都具有text/html
密钥对值。
在Python中,我将使用Try-Catch块解决此问题,并使用KeyError
异常。如果我可以在javascript中执行类似的操作,就像在Try-Catch块中使用异常一样,那就太棒了。
但是,如果存在替代品而不是尝试捕获块,那么确实实现了相同的最终目标,我也希望了解它们。
我更喜欢使用异常而不是使用函数。我这样做是因为text/html
键可能不存在,但应该存在。一个例外似乎更适合这种情况
答案 0 :(得分:9)
在读取或写入不存在的属性时,Javascript不会生成异常。阅读时,它只返回undefined
。在编写时,它只是创建了属性。
您可以创建自己的函数来测试该属性是否存在,如果不存在则抛出异常(但您必须随时调用该函数),但JS不会在该函数之外进行异常处理它就像你要求的一样。
如果要测试javascript中对象上是否存在键,可以将此构造与in
运算符一起使用:
var obj = {};
var key = "test";
if (key in obj) {
// key exists
} else {
// key doesn't exist
}
如果您尝试读取不存在的密钥,则会获得undefined
作为值。
var obj = {};
var value = obj.test;
alert(value === undefined);
in
运算符可以更好地告诉您密钥是否存在undefined
的测试,因为undefined
是存在密钥的合法值。
在许多情况下,您控制键所具有的值以及存在的键永远不会有假值,您还可以检查该键是否具有真值:
var obj = {};
var obj.test = "hello";
if (obj.test) {
// key exists and has a truthy value
}
如果你想确保对象本身具有属性而不是它继承的任何原型,那么你可以这样做:
var obj = {};
var obj.test = "hello";
if (obj.hasOwnProperty(test)) {
// key exists on the object itself (not only on the prototype)
}