JavaScript中的Python KeyError异常的等价物?

时间:2013-10-11 17:47:44

标签: javascript python

我正在尝试访问JavaScript对象中的某个成员。为此,我需要尝试一些关键值。

例如,Object['text/html']将为我提供HTML文档的导出链接。但是,并非此类型的每个对象都具有text/html密钥对值。

在Python中,我将使用Try-Catch块解决此问题,并使用KeyError异常。如果我可以在javascript中执行类似的操作,就像在Try-Catch块中使用异常一样,那就太棒了。

但是,如果存在替代品而不是尝试捕获块,那么确实实现了相同的最终目标,我也希望了解它们。

编辑:

我更喜欢使用异常而不是使用函数。我这样做是因为text/html键可能不存在,但应该存在。一个例外似乎更适合这种情况

1 个答案:

答案 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)
}