如何在 JavaScript 中一行调用一个可能不存在的方法而不出现错误?

问题描述 投票:0回答:5

我正在编写一个使用 javascript 并以某种方式创建继承的程序。

如果用户输入:

x.isSingleLine()

它不存在,它会使 Javascript 崩溃。 我希望有一种方法可以做类似的事情:

x.isSingleLine() || "Doesnt Exist";

以某种方式让它执行软错误或某种警报。 我不想将对象封装在 try-catch 块中。

有没有办法可以实现这一点?

在语句中: x.isSingleLine() || “不存在”;它会崩溃并且不执行“或”部分,所以这显然不是答案。

javascript
5个回答
6
投票

那怎么样?

  x.isSingleLine ? x.isSingleLine() : console.log("Doesnt Exist");

编辑: 正如 @FelixKling 所建议的,如果

isSingleLine
有可能存在但不是一个函数,你应该使用:

(x.isSingleLine && x.isSingleLine instanceof Function) ? x.isSingleLine() : console.log("Doesnt Exist");

5
投票

在调用它之前您需要检查它是否存在。

var result = x.isSingleLine ? x.isSingleLine() : "Doesn't Exist";
    

1
投票
据我所知,您可以使用 try-catch 块来实现:

try { x.isSingleLine(); } catch (e) { // Something happened alert("isSingleLine didn't quite work out."); }

这个小提琴中玩弄它

更新 我现在注意到您不想封装在 try-catch 块中。使用 try-catch 块甚至可以处理 isSingleLine() 方法内的错误,如更新的小提琴所示。


0
投票
(x.isSingleLine || function(){ console.log("Doesn't Exist"); })()
    

0
投票
可选链适用于可能不存在的方法

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

 但不是函数,这仍然会失败。


我知道这是一个老问题。我只是不知何故来到这里并没有看到这个答案,所以我发布了它。

© www.soinside.com 2019 - 2024. All rights reserved.