我在JSLint中遇到的两个错误是没有充分理由的

时间:2014-03-31 14:43:05

标签: javascript jslint

我在JSLint中检查了以下代码:

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>Reset textarea</title>
</head>

<body>
    <textarea id="ta">
        <p>Hello</p>
    </textarea>
    <input type="button" value="Reset" onclick="reset();">
    <script>
        function reset() {
            var ta = document.getElementById('ta');
            if (!ta.value || ta.value != ta.defaultValue && confirm('Are you sure?')) {
                ta.value = ta.defaultValue;
            }
        }
    </script>
</body>

</html>

DEMO

我收到了以下错误:

  

预期&#39;!==&#39;而是看到&#39;!=&#39;。

由于textarea值和默认值始终是string类型,因此在比较之前没有类型转换,除了使JS文件更大之外没有任何区别!

  

&#39;&amp;&amp;&#39;子表达式应该包含在parens中。

&&的{​​{3}}高于||时,为什么要添加括号?我只需删除precedence而不是:

if (!ta.value || (ta.value != ta.defaultValue && confirm('Are you sure?')))


如果我弄错了,请纠正我。

1 个答案:

答案 0 :(得分:2)

JSLint旨在使用编写JSLint的人定义的规则(可能基于其他人的观点,但最终只是意见)来生成更易于理解的代码。

因此,!==!=更具人类可读性,因为它显然比较严格。但是,您知道不同,因为ta.valueta.defaultValue确实始终是字符串,因此您无需遵循JSLint的建议。

同样地,对&&表达式进行括号化使其更具人性化,因为它可以清楚地说明运行的顺序。虽然您可能知道优先顺序,但不是每个人都一目了然并且可以解释它错。

重申一下,JSLint是建议和意见,而不是法律。