我正在编写一个使用 javascript 并以某种方式创建继承的程序。
如果用户输入:
x.isSingleLine()
它不存在,它会使 Javascript 崩溃。 我希望有一种方法可以做类似的事情:
x.isSingleLine() || "Doesnt Exist";
以某种方式让它执行软错误或某种警报。 我不想将对象封装在 try-catch 块中。
有没有办法可以实现这一点?
在语句中: x.isSingleLine() || “不存在”;它会崩溃并且不执行“或”部分,所以这显然不是答案。
那怎么样?
x.isSingleLine ? x.isSingleLine() : console.log("Doesnt Exist");
编辑: 正如 @FelixKling 所建议的,如果
isSingleLine
有可能存在但不是一个函数,你应该使用:
(x.isSingleLine && x.isSingleLine instanceof Function) ? x.isSingleLine() : console.log("Doesnt Exist");
在调用它之前您需要检查它是否存在。
var result = x.isSingleLine ? x.isSingleLine() : "Doesn't Exist";
try {
x.isSingleLine();
} catch (e) {
// Something happened
alert("isSingleLine didn't quite work out.");
}
在
更新 我现在注意到您不想封装在 try-catch 块中。使用 try-catch 块甚至可以处理 isSingleLine() 方法内的错误,如更新的小提琴所示。
(x.isSingleLine || function(){
console.log("Doesn't Exist");
})()
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining#optical_chaining_with_function_calls
x.isSingleLine?.()
您可以使用空合并来显示警报
x.isSingleLine?.() ?? console.log("Doesnt Exist")
但请注意,如果 isSingleLine
计算结果为
null
或
undefined
,也会显示警报。此外,正如其他评论所指出的,如果定义了
isSingleLine
但不是函数,这仍然会失败。
我知道这是一个老问题。我只是不知何故来到这里并没有看到这个答案,所以我发布了它。