检查函数是否存在,然后运行它

时间:2016-06-08 06:26:07

标签: javascript

检查函数是否存在是否正确?如果存在则运行它?

this.functions.SomeFunction && this.functions.SomeFunction();

我更喜欢检查

if (this.functions.SomeFunction) {this.functions.SomeFunction()}

但是我看到了第三方代码中的第一个例子,并想知道这是一个好习惯还是因为某种原因而被创建?

8 个答案:

答案 0 :(得分:1)

您可以使用typeof来执行此操作:

if (typeof(theFunction) === "function") {
    theFunction.apply(this);
}

答案 1 :(得分:1)

如果您想验证您的功能是否已定义且确实是一项功能,您可以执行以下操作:

if (typeof this.functions.SomeFunction == 'function') { 
  this.functions.SomeFunction(); 
}

答案 2 :(得分:0)

两者都做同样的事情。这就是&&运算符之美。如果第一个condition为真,它只执行第二个condition

答案 3 :(得分:0)

最好检查对象的类型,而不是依赖于它是真实的事实。所以:typeof this.functions.SomeFunction === 'function' && this.functions.SomeFunction()&&方法只是一种速记方式,非常普遍/被广泛接受。由于布尔逻辑,如果第一个是假的,它不会检查下一个表达式。 JavaScript将返回特定布尔表达式的最后结果。

答案 4 :(得分:0)

我更喜欢并在生产代码中使用

if (typeof this.functions.SomeFunction === 'function') {
  this.functions.SomeFunction()
}

也许这样更好:

const { SomeFunction } = this.functions
if (typeof SomeFunction === 'function') {
  SomeFunction()
}

我们应该确保this.functions确实存在。

答案 5 :(得分:0)

两者在技术上都是正确的,但在我看来,第二版更好,因为它更清楚。

另外,你必须确定SomeFunction实际上是一个能够调用它的函数。在你的情况下很清楚,因为它属于" functions"对象

答案 6 :(得分:0)

如果要检查功能是否存在,请尝试此操作

if(typeof SomeFunction == 'function') 
   SomeFunction();

答案 7 :(得分:0)

第一个是执行未分配的按位计算,只有在存在时才会产生运行函数的副作用。这与第二个结果相同,看起来令人印象深刻 - 但就像用勺子在你面前用铅笔搅拌咖啡一样。

编码不仅仅是'聪明'。就我个人而言,我认为只需要花一点时间来输入第二个版本,但它更易读,更容易调试或设置断点,当你意识到要在if语句之后添加另一个命令时更容易扩展。

只要您和所有使用您的代码的人都知道为什么第一个选项与第二个选项具有相同的结果,那么这是您的选择。但是我已经失去了我做过一个聪明的速记的次数,然后不得不把它变成一个很好的老式if语句在几分钟内解决为什么它没有正确射击。