搜尋

首頁  >  問答  >  主體

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

一般写判断的时候都是

typeof x == "undefined"

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

"undefined"==typeof x
天蓬老师天蓬老师2814 天前1099

全部回覆(5)我來回復

  • 大家讲道理

    大家讲道理2017-04-10 15:43:35

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

    通常,我们会这样写 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/

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-10 15:43:35

    这个貌似是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");
    }

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-10 15:43:35

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

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-10 15:43:35

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

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-10 15:43:35

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

    回覆
    0
  • 取消回覆