- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 JavaScript 代码中,我想替换以下 if 语句的双等号结构:
if( name == null ) {
//do stuff
}
jshint 规则“eqeqeq”的双等号失败,建议用三等号替换双等号。暂时,让我们想象一下,上面的代码从 == null
更改为 === null
,如下所示:
if( name === null ) {
//do stuff
}
这适用于显式定义的值为 null
的变量,但不幸的是,对于任何未设置的变量都会失败。
var a = null; // works correctly
var b; // will fail in comparison
以前,当三等号规则对我很重要时,我会执行以下操作
if( name === null ||| typeof(name) === 'undefined' )
但我觉得这非常臃肿。
我现在能想出的最好的选择是使用 if 语句的性质,让它计算出一个假表达式,就像这里我否定表达式并简单地删除 == null
部分:
if( !name ) {
//do stuff
}
对我来说,这更简单、更容易阅读,并且完全避免了显式的相等比较。但是,我不确定这里是否遗漏了任何边缘原因?
所以问题是,我可以用否定表达式 if 语句替换 == null
吗?如果是这样,它不起作用的陷阱和异常(exception)是什么?它适用于一般数组项、字符串、对象属性吗?
我选择解决方案的标准是
我知道要讨论的其他稍微相关的问题 difference in the equality operators ==
vs ===
,但这仅仅是为了讨论与 if 语句中的 null-ish 相比的评估。
最佳答案
So the question is, can I generally replace == null with the negated expression if statements?
可能不是普遍,不,但也许在某些地方。
If so, what are the pitfalls and exceptions where it wouldn't work? Does it work for general array items, strings, object properties?
!value
检查将为 所有 的假值,而不仅仅是 null
和 undefined
.完整列表为:null
、undefined
、0
、""
、NaN
,当然还有 false
。
所以如果你有 name = ""
那么
if (!name) {
// ...
}
...将评估为 true 并进入 block ,您之前的
if (name == null) {
// ...
}
...不会。所以到处都这样做可能会带来问题。
但是对于您确实想要在任何虚假值上进行分支的情况,!value
非常方便。例如,如果变量是 undefined
(或 null
)或对象引用,我将使用 if (!obj)
来测试一下,因为任何错误的值对我来说都足够了。
如果你想继续使用 JSHint 的 ===
规则,你可以给自己一个实用函数:
function isNullish(value) {
return value === null || typeof value === "undefined";
}
函数调用的开销没有什么值得远程担心的(more),如果它在热点中,任何体面的 JavaScript 引擎无论如何都会内联它。
关于Javascript 比较 == null 替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28250090/
我不完全确定我理解 substitute 的作用,尽管我以前在它的代码中使用过。今天在shiny::exprToFunction中遇到了如下几行代码: function (expr, env = pa
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我最近发现了 crockford 的 Javascript supplant 函数。函数是这样的—— if (!String.prototype.supplant) { String.prot
在我工作的一些项目中,添加了一些具有这种语法的 block : var [code, name] = input.split("/"); console.log(code); console.log(
我对 JavaBeans 模式的憎恨就像一千个太阳的火焰一样燃烧。为什么? 冗长。现在是 2009 年。我不应该为一个属性写 7 LOC。如果他们有事件监听器,请捕获你的帽子。 没有类型安全的引用。没
是否有比 PHP 执行速度更快且具有相同功能集(例如对常见 RDBMS、Curl、Regex 等的支持)的替代品? 用 C 编写网站代码怎么样?效果如何?该平台是否独立并在每台服务器上运行? 最佳答案
我正在开始新项目。客户端界面基于 GWT(和 GXT),我没有说它是预先确定的。但是,我可以选择服务器端,这样我就可以玩得开心,并希望在这个过程中学到一些新东西。一些要求是: 与服务器的交换将通过使用
我目前使用 CentOS 5.6(Ghostscript 8 - ImageMagick-6.2.8) 我正在尝试将 pdf 的第一张图像转换为 jpg 文件。 我知道我当前的设置无法转换压缩的 pd
2021 年更新: 只使用 MathJax;您不应该再支持旧版本的 IE。 我想使用 MathJax 来显示 MathML 方程,但它在 IE 中的性能慢得令人无法接受(是的,我读过使用 Emulat
BinaryFormatter 序列化的 128³ 数组加倍,占用 50 MB 空间。序列化具有两个双字段的 128³ 结构数组需要 150 MB 和超过 20 秒的处理时间。 是否有快速简单的替代方
我发现 $.each 非常慢,如果包含大量各种 jQuery 效果,会给网页带来问题。 我想知道 $.each 是否有一个好的替代方案,例如: $('ul li').each(function() {
我正在编写一个Mac应用程序,它提供类似“测试”的功能。此应用程序(通过与服务器的连接)。基本上,该应用程序将为学生提供一个故事供阅读,然后是一系列问题(也来自服务器),用户可以(尝试)选择正确的答案
我喜欢 WPF,但我讨厌 XAML。 XAML 过于冗长,在 Microsoft 尝试对其进行扩展时出现语法问题(请参阅 StringFormat on Bindings),并且难以导航。 XAML
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足 Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以
有没有类似 SoftwareFx 的 PowerGadgets 的产品?我正在查看支持自动刷新的 powershell 的仪表控件。 最佳答案 检查 ShowUI 模块。 http://showui.
我正在开发一个项目,其中页面需要能够根据服务器的状态保持更新。 我喜欢 websocket,因为它们为我提供了一种从服务器推送消息的方法,但可用性是一个问题。 我需要通用方法在网络服务器和浏览器客户端
我最近一直在使用 openX 自托管广告管理软件,但它太慢了。 目标:我需要能够展示一个广告,获得 10 次点击,然后停用该广告,并且每天都这样做。 问题:当我将 openX 设置为每天 10 次点击
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
我正在尝试实现一个简单的类,该类允许用户裁剪用于其个人资料图片的图像。这是一个 Java Web 应用程序。 我做了一些搜索,发现 java.awt 有一个 BufferedImage 类,这看起来(
只是一个关于 JQuery 的简单问题,我一直在使用phonegap 并使用 JQuery 制作了一些应用程序。其中一个运行速度非常慢,所以我一直在努力尽可能地精简它。 我一直在考虑的一个更改是用更小
我是一名优秀的程序员,十分优秀!