JavaScript   发布时间:2022-04-16  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了javascript – 为什么JSHint不喜欢对象的方法调用三元组?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
JSHint给出以下错误:

对于以下代码行:

(aFunctionOrNull) ? aFunctionOrNull() : someObject.someMethod();

它突出了someMethod上的最后一个)所以我假设错误就在那里.代码工作,当我将其更改为if(){} else {}语法时,JSHint没有问题.我不介意更长的语法,但我想了解为什么JSHint会说这个,如果这是一个不好的做法.

最大的困惑可能来自术语. someObject.someMethod()不是函数调用吗?

解决方法

好吧,一般来说,使用三元运算符调用函数被认为是不好的做法,而没有分配返回值(这就是你似乎正在做的事情).而且,值得检查JSHint对于以下代码:
(aFunctionOrNull || someObject.someMethod)();

如果aFunctionOrNull未定义(或null或falsy),则逻辑或位将导致表达式计算为someObject.someMethod,并调用其结果值(对函数对象的引用,希望如此).这使您有机会在没有大量嵌套三元的情况下编写更加“自动防故障”的代码:

(aFunctionOrNull || someObject.someMethod || function(){})();

分组表达式现在被绑定为评估为真值,因此不会抛出任何错误.
为了避免JSHint唠叨你没有对返回值做任何事情,要么将它分配给变量(我不喜欢这样做),要么添加一个小运算符:

~(aFunctionOrNull || someObject.someMethod || function(){})();//bitwise not
!(aFunctionOrNull || someObject.someMethod || function(){})();//logical not,doesn't really matter which one

关于你的最后一个问题:someObject.someMethod确实是一个函数调用.更具体地说,它是在someObject的上下文中调用函数对象.
对于那些不知道这一点的人:JS函数是对象,并且使用bind方法(在Function.prototype上定义)或ad-hoc显式设置被调用的上下文:

var referenCEToMethod = someObject.someMethod;
referenCEToMethod();//<-- inside the function objects,this now points to the global object

想到它的一个简单方法是JS函数只是在内存/空间/时间中漫无目的地浮动,直到通过引用调用它们,然后将该引用的上下文传递给函数对象,以确定它将是什么对象与…相互作用.遗憾的是,这是默认情况下的全局对象,或者在严格模式下为null.

大佬总结

以上是大佬教程为你收集整理的javascript – 为什么JSHint不喜欢对象的方法调用三元组?全部内容,希望文章能够帮你解决javascript – 为什么JSHint不喜欢对象的方法调用三元组?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。