刚开始使用jslint检查我的javascript代码。它表明我应该替换
result = value ? value : defaultValue;
带
result = value || defaultValue;
我认为这是一个很好的快捷方式,并尝试将该原则应用于可能为空的变量的方法调用,因此代替:
if (arg) {
arg.doSomething();
}
我试过了:
arg && arg.doSomething();
后者在浏览器中工作正常,但是jslint抱怨“预期的赋值或函数调用,而是看到了一个表达式。”
最后一句话是坏的,错误的,危险的,还是jslint过度保护?使用var dummy = arg && arg.doSomething();
确实让消息消失似乎很愚蠢。
答案 0 :(得分:3)
JSLint应该充分考虑这个警告(但是,JSLint不会将警告与完全错误区分开来),绝对不是错误 - 但请记住,JSLint是关于强制执行Crockford的编码风格标准,这可能与您的不同(他们当然不同于我的);您可以查看JSHint哪个提供更多控制权,但我没有立即看到针对此特定情况的选项。
您的arg && arg.doSomething()
很好,但要注意它有点先进,您会失去一些维护代码的人。我从不以这种方式使用它。我确实在表达式中使用它,但不是单独使用它。你是否使用它取决于你,但它并不危险,只是有些不透明。