首页 > 关于js的判断==中 常量前置的问题

关于js的判断==中 常量前置的问题

一般写判断的时候都是

typeof x == "undefined"

但是有个十几年工作经验的老码农用了下面的写法,完全看不懂其中的意义
结果都是一样的,这么写的区别到底在哪里

"undefined"==typeof x

百度了一下,其实这个是一个小技巧来的,避免了一些问题

通常,我们会这样写 JavaScriptif 语句:

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/


这个有什么特殊的意义么?应该只是个人的习惯吧


个人习惯! 把常量放在前面。


把常量写前面,可以防止万一你把==写成了=


这个貌似是Java带来的习惯,因为 Java 在比较两个对象是否一致的时候,不是用 == 而是用 .equals,以比较字符串为例

public boolean test(String s) {
    return "hello".equals(s);
    // return s.equals("hello");
}

有没有发现第2句(注释掉那句)的问题?——如果 snull,它会抛 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");
}
【热门文章】
【热门文章】