禁止显示“预期为 '===' 而看到的是 '=='。” jslint中的错误
Posted
技术标签:
【中文标题】禁止显示“预期为 \'===\' 而看到的是 \'==\'。” jslint中的错误【英文标题】:Suppress "Expected '===' and instead saw '=='." error in jslint禁止显示“预期为 '===' 而看到的是 '=='。” jslint中的错误 【发布时间】:2011-09-13 03:47:37 【问题描述】:如何阻止错误消息Expected '===' and instead saw '=='.
出现在 jslint 中。
似乎不是一个选项。
【问题讨论】:
我阅读了说明,似乎不可能,以及许多其他功能,例如 if 块。你仍然可以在没有==
的情况下编写 javascript。
这似乎(几乎总是)是一个无害的错误。你见过this
使用jshint 可以关闭===
。
@Ming-Tang 如果我在比较number
和string
时真的需要使用==
怎么办
【参考方案1】:
对于使用 JSHint 的用户,您可以通过在 JSHint 选项(通常为 .jshintrc)中将选项 eqeqeq 设置为 false 来关闭此警告
"eqeqeq": false
来自文档:http://jshint.com/docs/options/#eqeqeq
编辑:
如果您想成为一个好公民并修复您的代码以使用推荐的比较而不是关闭警告,请确保比较的双方都使用相同的类型。
例如:
"123" == 123 // true, I'm lazy and JSHint hates me
"123" === 123 // false, no love
Number("123") === 123 // true, no warning
【讨论】:
【参考方案2】:这在媒体上非常热门。
Douglas Crockford 刚刚在 JSLint 工具中添加了一个“eqeq”选项。
在 GitHub 上查看 2011 年 6 月 12 日的编辑之一:
https://github.com/douglascrockford/JSLint/commits/2e8d430b5b9543caefb3743513181f1295f52ddf/jslint.js
在 JSLint 头版上尚未更新撰写本文的时间,但我已使用以下内容对其进行了测试,并没有收到与 ==
相关的警告:
/*jslint eqeq: true*/
var x = 0;
if (x == 1)
alert("test");
【讨论】:
对我有用,但必须放在语句上方。 正如@iLoveUnicorns 所述,在声明上方效果很好。太糟糕了,我不能把那行放在我的 .jshintrc 中。此外,我在任何地方都没有找到任何文档。【参考方案3】:你是正确的,没有选择。唯一的方法是使用===
或修改source code。无论如何,我几乎总是使用===
。除非您知道==
是真的您想要的,否则一般情况下会更好。
【讨论】:
与 null 比较时除外:some == null
如果 some === undefined
或 some === null
返回 true
,这可能会有用。
就像@Koolinc 一样。 == null
是 ==
的唯一有效用例。 if(value)
有很多不用检查的用例。
@Koolinc 是的,在某些情况下它很有用,但我默认使用===
。
@Raynos:为什么讨厌==
?如果您知道自己在做什么,那么使用它就没有问题。 JSLint 没有提供关闭该警告的选项,这太过分了。
@Tim 我同意,如果你知道这是你想要的,那没有问题,如果 JSLint 有这个选项,那就太好了。当我使用 JSLint(我通常不使用)时,当我知道我有充分的理由时,我只是忽略了警告。【参考方案4】:
虽然它的价值已经晚了,但它会帮助有需要的人
禁用使用 -
/* eslint eqeqeq: 0 */
将其作为警告使用 -
/* eslint eqeqeq: 1 */
【讨论】:
成功了!我从 Visual Studio 中得到了这个错误:eqeqeq (ESlint) Expected '!==' and instead saw'='
,这个修复就像魅力一样!
请注意,它位于您要禁止显示的 .js 文件的顶部。【参考方案5】:
同样的错误告诉我我可以用这种方式修复
status.user_profile.toString() === props.props.id.toString()
我正在使用 react js 举个例子,我正在使用类似的东西
id = 1
如果我有多余的参数给我看这样的
params : id:"1"
如果我这样过度
id == params.id // output true
如果我这样过度
id === params.id // output false
因为不是 100% 平等所以在终端显示错误
Expected '===' and instead saw '=='
所以我可以考虑并通过像这样转换相同的数据类型来修复它
id.toString() === params.id.toString() // return true
【讨论】:
虽然这个答案有效,但它确实不能很好地扩展,我看不到警告的意义,尤其是在大多数用例中,因为大多数数据库 id 都是整数(可能是数字或字符串)它有助于松散地检查它们以上是关于禁止显示“预期为 '===' 而看到的是 '=='。” jslint中的错误的主要内容,如果未能解决你的问题,请参考以下文章
Heroku 上的 Delayed_Job 显示“禁止”错误