9

我正在尝试访问 JavaScript 对象中的某个成员。为了做到这一点,我需要尝试几个关键值。

例如,Object['text/html']它会给我一个 HTML 文档的导出链接。但是,并非这种类型的每个对象都有一个text/html键对值。

在 Python 中,我会使用 Try-Catch 块来解决这个问题,但有一个KeyError例外。如果我可以在 javascript 中做类似的事情,比如在 Try-Catch 块中使用异常,那就太好了。

但是,如果存在替代方案而不是 try catch 块,它们确实实现了相同的最终目标,我也想了解它们。

编辑:

我宁愿使用异常而不是使用函数。我这样做是因为text/html钥匙可能不在那里,但它应该在那里。一个例外似乎更适合这种情况

4

1 回答 1

14

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)
}
于 2013-10-11T17:57:31.007 回答