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