我在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>
我收到了以下错误:
预期&#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?')))
如果我弄错了,请纠正我。
答案 0 :(得分:2)
JSLint旨在使用编写JSLint的人定义的规则(可能基于其他人的观点,但最终只是意见)来生成更易于理解的代码。
因此,!==
比!=
更具人类可读性,因为它显然比较严格。但是,您知道不同,因为ta.value
和ta.defaultValue
确实始终是字符串,因此您无需遵循JSLint的建议。
同样地,对&&
表达式进行括号化使其更具人性化,因为它可以清楚地说明运行的顺序。虽然您可能知道优先顺序,但不是每个人都一目了然并且可以解释它错。
重申一下,JSLint是建议和意见,而不是法律。