Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaScript的一行中调用可能不存在的方法而不出错?_Javascript - Fatal编程技术网

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

如何在JavaScript的一行中调用可能不存在的方法而不出错?,javascript,Javascript,我正在编写一个程序,它使用javascript并以某种方式创建继承 如果用户键入: x.isSingleLine() 而且它不存在,它崩溃了Javascript。我希望有一种方法可以做到: x.isSingleLine() || "Doesnt Exist"; 在某种程度上让它做一个软错误或某种警报。我不想将对象封装在try-catch块中 有没有办法做到这一点 在语句中:x.isSingleLine()| |“不存在”;它会崩溃,不会执行或部分操作,因此这显然不是答案。据我所知,您可以使用

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

如果用户键入:

x.isSingleLine()
而且它不存在,它崩溃了Javascript。我希望有一种方法可以做到:

x.isSingleLine() || "Doesnt Exist";
在某种程度上让它做一个软错误或某种警报。我不想将对象封装在try-catch块中

有没有办法做到这一点


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

据我所知,您可以使用try-catch块来实现这一点:

try {
    x.isSingleLine();
} catch (e) {
    // Something happened
    alert("isSingleLine didn't quite work out.");
}
在游戏中玩弄它

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

据我所知,您可以使用try-catch块来处理:

try {
    x.isSingleLine();
} catch (e) {
    // Something happened
    alert("isSingleLine didn't quite work out.");
}
在游戏中玩弄它

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

如何

  x.isSingleLine ? x.isSingleLine() : console.log("Doesnt Exist");
编辑: 正如@FelixKling所建议的,如果存在
isSingleLine
但不是您应该使用的函数,则:

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

  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";

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

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

“it crash Javascript”-更准确地说Javascript抛出错误。“it crash Javascript”-更准确地说Javascript抛出错误。如果值不是函数,它仍然会抛出错误。可能与此无关。@FelixKling:True,您可能想执行
typeof x.issingeline===“function”
,但我假设它是一个函数或未定义。为了确定它是否存在,
x.issingeline!==未定义的
将最有效,无论其状态是函数还是值。它避免了像某人设置
x.isSingleLine=false
x.isSingleLine=0
x.isSingleLine=''
这样的情况。如果该值不是函数,它仍然会抛出错误。可能与此无关。@FelixKling:True,您可能想执行
typeof x.issingeline===“function”
,但我假设它是一个函数或未定义。为了确定它是否存在,
x.issingeline!==未定义的
将最有效,无论其状态是函数还是值。它避免了像某人设置
x.isSingleLine=false
x.isSingleLine=0
x.isSingleLine=''
“我不想将对象封装在try-catch块中。”@FelixKling my bad忽略了这一点。“我不想将对象封装在try-catch块中。”“费利克斯克林,我的错,忽略了那个。如果你问我,这就是答案。又好又短。但这并没有捕获isSingleLine()方法本身的任何失败;为什么要使用函数的
实例
而不是
类型的x.isSingleLine==“函数”
?个人偏好-我不喜欢依赖于神奇字符串的代码。如果你问我,这就是答案。又好又短。但这并没有捕获isSingleLine()方法本身的任何失败;为什么要使用函数的
实例
而不是x.isSingleLine==“函数”?个人偏好-我不喜欢依赖于魔术字符串的代码。