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

Gam*_*iac 8 javascript python

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

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

在Python中,我将使用Try-Catch块解决此问题,但有KeyError例外.如果我可以在javascript中执行类似的操作,就像在Try-Catch块中使用异常一样,这将是很棒的.

但是,如果存在替代品而不是try catch块,那么确实达到了相同的最终目标,我也想了解它们.

编辑:

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

jfr*_*d00 11

在读取或写入不存在的属性时,Javascript不会生成异常.阅读时,它只会返回undefined.在编写它时,它只是创建属性.

您可以创建自己的函数来测试该属性是否存在,如果不存在则抛出异常(但是您必须随时调用该函数),但是JS不会在它自己之外做出异常你要求的.


如果要测试javascript中对象上是否存在键,可以将此构造与in运算符一起使用:

var obj = {};
var key = "test";

if (key in obj) {
    // key exists
} else {
    // key doesn't exist
}
Run Code Online (Sandbox Code Playgroud)

如果您尝试读取不存在的键,您将获得undefined值.

var obj = {};
var value = obj.test;

alert(value === undefined);
Run Code Online (Sandbox Code Playgroud)

in运营商不告诉你的密钥是否存在测试一个更好的工作undefined,因为undefined是存在的主要法律价值.


在许多情况下,您控制键所具有的值以及存在的键永远不会有假值,您还可以检查该键是否具有真值:

var obj = {};
var obj.test = "hello";

if (obj.test) {
    // key exists and has a truthy value
}
Run Code Online (Sandbox Code Playgroud)

如果你想确保对象本身具有属性而不是它继承的任何原型,那么你可以这样做:

var obj = {};
var obj.test = "hello";

if (obj.hasOwnProperty(test)) {
    // key exists on the object itself (not only on the prototype)
}
Run Code Online (Sandbox Code Playgroud)

  • 7年后...可能已经解决了这个问题...但我会补充说`myObj.noKeyHere.noKeyHereEither`将导致`TypeError` (2认同)