【发布时间】:2011-02-11 18:50:28
【问题描述】:
我经常看到 JavaScript 代码以这种方式检查未定义的参数等:
if (typeof input !== "undefined") {
// do stuff
}
这似乎有点浪费,因为它涉及类型查找和字符串比较,更不用说它的冗长了。之所以需要它,是因为 undefined 可以重命名。
我的问题是:
该代码比这种方法更好:
if (null != input) {
// do stuff
}
据我所知,您无法重新定义null,因此它不会意外中断。而且,由于 != 运算符的类型强制,这会检查 undefined 和 null... 这通常正是您想要的(例如,对于可选函数参数)。
然而这种形式似乎并不普遍,它甚至会导致 JSLint 对你大喊大叫,因为你使用了邪恶的 != 运算符。
为什么这被认为是不好的风格?
【问题讨论】:
-
@Marcel,没有真正的区别,但这样做有两个原因。一,对于某些人来说,阅读起来更清晰。第二个原因是它可以防止意外覆盖变量。你有没有这样做过:if( foo = "value" ) 打算进行比较时。如果您养成在赋值/比较运算符中反转变量的习惯,那么您将不会遇到这个问题。
-
对于某些人(包括我)来说,这实际上更难以阅读。此外,大多数 IDE 会警告您意外分配。但是如果比较变量很长,我仍然使用这种形式。 YMMV。
-
@MarcelKorpel 这被称为“尤达条件”:umumble.com/blogs/Programming/321
-
更难阅读。一个人不会说“瓶子不是空的”。
-
if (null != input)对说英语的人来说只是“尤达说话”(我是....恕我直言。