javascript – 为什么JSHint不喜欢对象的方法调用三元组?

前端之家收集整理的这篇文章主要介绍了javascript – 为什么JSHint不喜欢对象的方法调用三元组?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
JSHint给出以下错误

Expected an assignment or function call and instead saw an expression.

对于以下代码行:

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

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

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

解决方法

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

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

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

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

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

关于你的最后一个问题: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@H_403_9@ 
 

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

原文链接:https://www.f2er.com/js/152952.html

猜你在找的JavaScript相关文章