【发布时间】:2016-01-18 01:21:18
【问题描述】:
出乎意料的“。”来自 jslint (http://jslint.com/) 的代码:
function test(foo) {
"use strict";
return (foo || "").replace("bar", "baz");
}
为什么jslint的||有问题运算符强制一个空字符串,以便可以在不导致错误的情况下执行替换,以防 foo 作为未定义传入?
通过了:
function test(foo) {
"use strict";
var xFoo = (foo || "");
return xFoo.replace("bar", "baz");
}
我知道它是基于意见的,我可以忽略它,等等......但试图理解为什么这样的链接不受欢迎。也知道 eshint,但我不想绕过这个消息,只是想了解原因。
似乎第一种方法更简洁明了,因为它不需要额外的变量 (xFoo)。
这两个函数在所有条件下都做同样的事情。
【问题讨论】:
-
这看起来像是 JSLint 中的一个错误。
-
idk 具体为什么 jslint 有问题但它不是好的代码。如果您将
true或1传递给它,您将遇到问题。 -
@ChrisGciso - 如果您知道
foo将是错误的或字符串,那么您拥有的代码绝对没有问题。这不是语法错误。如果您对foo的可能值有所了解,或者如果您希望它在传递了无效的foo时抛出异常,这甚至不是编程错误。因此,在许多情况下,使用已接受答案中的代码只是一种使警告消失的方法,而不是修复任何实际错误的方法。 -
@ChrisGciso - 所以,JSLint 迫使您处理一些可能是非常好的代码,而 JSHint 显然认为它认为不值得抱怨。两者都不是真正的对或错——这些都是意见。当一个人知道如果/当为
foo传递了一个无效值或者是否会发生这种情况时,你希望函数如何表现,唯一真正的对与错就出现了。 -
@ChrisGciso fwiw, "JSLint 获取一个 JavaScript 源并对其进行扫描。如果它发现问题,它会返回一条描述问题的消息以及源中的大致位置。问题不是必然是语法错误,尽管它经常是。JSLint 会查看一些样式约定以及结构问题。它并不能证明您的程序是正确的。它只是提供了另一组眼睛来帮助发现问题。JSLint 定义了 ..,一个比 ECMAScript 定义的语言更严格。JSLint 将拒绝大多数合法程序。" jslint.com/help.html
标签: javascript jslint