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

2023-11-27

JSHint 给出以下错误:

预期是赋值或函数调用,但看到的是表达式。

对于以下代码行:

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

它凸显了决赛) on someMethod所以我认为错误就在那里。当我将代码更改为时,代码有效并且 JSHint 没有问题if () {} else {}句法。我不介意更长的语法,但我想了解为什么 JSHint 这么说以及这是否是一个不好的做法。

最大的混乱可能来自术语。是someObject.someMethod()不是函数调用?


好吧,一般来说,使用三元运算符调用函数而不分配返回值(这就是您似乎正在做的事情)被认为是不好的做法。
另外,可能值得检查 JSHint 对于以下代码的说明:

(aFunctionOrNull || someObject.someMethod)();

If aFunctionOrNull未定义(或 null 或 false),则逻辑或位将导致表达式计算为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确实是一个函数调用。更具体地说,这是对函数对象 in the someObject的上下文。
对于那些不知道这一点的人:JS 函数是对象,调用的上下文可以使用显式设置bind方法(定义在Function.prototype) or ad-hoc:

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 JSHint 不喜欢使用三元组来调用对象的方法? 的相关文章

随机推荐

  • 如何将 JavaFX 2 中场景图形的内容输出到图像

    如何输出a的内容SceneJavaFX 2 中的图表到Image 事实上 我正在开发一个应用程序 它基本上是设计卡片的 因此 用户只需单击各种选项即可自定义场景 最后我想将场景内容导出到图像文件 我怎么做 在 FX 2 2 中出现了新的快照
  • 从 Xamarin Android 上的另一个 Activity 启动一个 Activity

    我发现这个 java 代码可以创建一个通用方法来从其他活动启动任何活动 public void gotoActivity Class activityClassReference Intent i new Intent this activ
  • 如何通过点击html元素获取xpath

    我对编程很陌生 必须在单击 html 元素时生成 Xpath 例如 如果我单击了用户名的文本框 那么它应该给我类似的 xpath html head body tr 1 table 2 等等等等 最主要的是我不能使用 firebug 因为我
  • 我可以检查现在是否有 UIAlertView 显示吗? [复制]

    这个问题在这里已经有答案了 我可以在 iOS 应用程序的任何部分检查当前是否显示 UIAlertView 吗 我找到了这段代码 NSClassFromString UIAlertManager performSelector selecto
  • ASP.NET MVC 从数据库加载 Razor 视图

    ScottGu 提到我们应该能够从数据库加载 Razor 视图 查看评论部分 那么有人有关于如何做到这一点的示例吗 Thanks 您可能想检查从数据库而不是文件中提取视图 or 使用 VirtualPathProvider 从 DLL 加载
  • Android - 如何使用包名称启动第三方应用程序?

    我想知道如何使用包名称从我的应用程序启动另一个应用程序 我有字符串格式的包名称 例如 String pkgName com example appName 这就是为什么我无法从中获取类名或任何其他有价值的详细信息 我可以用它们来做出正确的意
  • 休眠实现。我们是否付出了反思代价?

    很久以前 我正在使用反射创建一个迷你 ORM 在阅读有关反射的内容时 我得到了类似的答案 Java 反射性能 这是完全有道理的 我退出了我的迷你 orm 并锐化了我的 CTRL C CTRL V 键 该库的目的是避免在我正在开发的网络应用程
  • 评估在 C# 中使用扩展方法的成本/收益 => 3.0 [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 在什么情况下 使用场景 您会选择编写扩展而不是对对象进行子类化 我发现扩展方法的想法 很酷 显然你可以用它们做 遥远 的事情 就像 Mitsu Furota MS 博客文章中的许多例子一样
  • 使用 Eclipse 在 Windows 上分析 C 代码

    我知道我可以分析我的代码gprof and kprof在 Linux 上 Windows 上是否有与这些应用程序类似的替代方案 商业软件 Rational Quantify 昂贵 缓慢 但非常详细 AQTime 更便宜 更慢 有点详细 免费
  • 在获取父实体 EFCore 时加载子实体

    我有以下模型 在使用 find 方法从数据库中获取数据时 用子实体加载父实体的更好方法是什么 父实体 public class Client public int Id get set public string LastName get
  • 为什么 java RandomAccessFile 比 FileOutputStream 慢这么多?

    只要我能理解java api 使用 rw 打开RandomAccessFile就不会在底层存储设备上同步写入每个单字节 与 rws 或 rwd 不同 为什么它与 rw 的无缓冲 FileOutputStream 的 速度 几乎相同 而 rw
  • 在属性文件中查找重复键和值的工具

    是否有一种工具可以告诉我一个或多个属性文件中存在冗余键和值 Purpose Properties doesn t detect duplicate keys So this exists author shaned package com
  • 在 C# 中存储应用程序设置

    在 C 中存储应用程序设置 例如用户名和密码 数据库位置 的最佳实践是什么 提示 我是 net 和 C 的新手 应用程序范围内的应用程序配置设置 非用户特定 属于 app config 对于桌面应用程序 或 web config 对于 We
  • 禁用网站上的复制

    我知道不可能阻止世界上最先进的思想 但我想在我的网站上设置最轻微的障碍 以防止我的学生从中复制文本并将该文本作为他们的答案发布 如果他们手写 那没问题 由于跨浏览器的不一致 我非常害怕 JavaScript 鉴于我已加载 jQuery 并且
  • 注释堆叠条形图 matplotlib 和 pandas [重复]

    这个问题在这里已经有答案了 我有一个简单的数据框 用于存储调查结果 这些列是 Age Income Satisfaction 它们都包含之间的值1 and 5 绝对 我设法生成了一个堆积条形图 显示了分布Satisfaction不同年龄段的
  • Python 中的内存管理

    我是 python 新手 为了查找整数的大小 我使用了 sys 模块中提供的 getsizeof 方法 对于整数 它返回 24 个字节 对于字符 它返回 34 个字节 gt gt gt sys getsizeof 1 24 gt gt gt
  • 为什么我的 React 复选框 onChange 处理程序在渲染时触发,而在单击该框时则不触发?

    已通读 React 文档并将问题归结为一个简单的案例 但仍然不太明白我做错了什么 JSFiddle https jsfiddle net justin levinson pyn7fLq5 或写在下面 var TestForm React c
  • 如何通过串口发送浮点数

    最好的发送方式是什么float double and int16在Arduino上通过串口 The Serial print 仅将值发送为ASCII编码 但我想以字节形式发送值 Serial write 接受字节和字节数组 但是将值转换为字
  • Windows Phone 7 通话记录 - Mango API

    我可以使用 Mango API 从手机获取当前通话记录以及通话号码和日期时间详细信息吗 我认为目前的情况是不可能的 没有用于检索通话记录的 API 这主要是出于隐私考虑 并保护用户免受在设备上表现不佳的恶意应用程序的影响 您会注意到 API
  • 为什么 JSHint 不喜欢使用三元组来调用对象的方法?

    JSHint 给出以下错误 预期是赋值或函数调用 但看到的是表达式 对于以下代码行 aFunctionOrNull aFunctionOrNull someObject someMethod 它凸显了决赛 on someMethod所以我认