一般写判断的时候都是
typeof x == "undefined"
但是有个十几年工作经验的老码农用了下面的写法,完全看不懂其中的意义
结果都是一样的,这么写的区别到底在哪里
"undefined"==typeof x
大家讲道理2017-04-10 15:43:35
百度了一下,其实这个是一个小技巧来的,避免了一些问题
通常,我们会这样写 JavaScript
的 if
语句:
if (one === 'another') {
// do something
}
是人都会出错。有时候我们会不小心把比较操作符(===
或 ==
)错写成赋值操作符(=
):
one = 'another'
if (one) {
// do something
}
有聪明人想了一个办法,把比较操作符的两边调换一下:
if ('another' == one) {
// do something
}
由于 'another' = one
是一个非法的赋值表达式,浏览器就会报错,程序功能就会挂掉——我们能够立刻发现问题。
以上解释来自 http://myst729.github.io/2015/on-writing-if-statements/
ringa_lee2017-04-10 15:43:35
这个貌似是Java带来的习惯,因为 Java 在比较两个对象是否一致的时候,不是用 ==
而是用 .equals
,以比较字符串为例
public boolean test(String s) {
return "hello".equals(s);
// return s.equals("hello");
}
有没有发现第2句(注释掉那句)的问题?——如果 s
是 null
,它会抛 NullPointerException
,但是第1句就不会。
对于其它可以使用 ==
来进行比较的语言来说,常量前置没有多大意义。
顺便,有另一种说明,和测试思想有关。就是,把想要的放在前面,参与比较的放在后面,比如一般比较函数都会定义成 equals(exprect, value)
。
各种语言都在解决 null
判断的问题,比如 C# 6.0
就提供了判空语句,比如
// C# 6.0
public bool Test(string s) {
return s?.Equals("hello") ?? false;
}
等同于
// C# 5.0
public bool Test(string s) {
return s == null ? false : s.Equals("hello");
}