84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
一般写判断的时候都是
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
就提供了判空语句,比如等同于
把常量写前面,可以防止万一你把==写成了=
这个有什么特殊的意义么?应该只是个人的习惯吧
个人习惯! 把常量放在前面。