【问题标题】:I've heard Javascript inserts ";" automatically and that may cause problems [duplicate]我听说 Javascript 会插入“;”自动,这可能会导致问题[重复]
【发布时间】:2011-05-02 12:54:08
【问题描述】:

我也听说 Go 也插入了它们,但是它们遵循了不同的 approach

Javascript 在解释时如何插入分号?

【问题讨论】:

    标签: javascript automatic-semicolon-insertion


    【解决方案1】:

    Javascript 在可能的任何换行符处假定语句结束。例如:

    return
    true;
    

    被解释为:

    return;
    true;
    

    将返回和它的参数变成两个单独的语句,这当然意味着函数没有返回值(返回未定义)。

    不久前我写了一封 blog entry 关于那件事。

    【讨论】:

    • 是的,我刚刚发布了同样的内容。
    【解决方案2】:

    我发现的最重要的事情之一是,假设您有一个返回坐标(或任何对象)的函数,类似于此。

    function getCoordinates() {
        return
            {
                x: 10,
                y: 10
            };
    }
    

    你会期望取回一个对象,对吧?错误的!你回来未定义。解释器将代码转换成这个

    function getCoordinates() {
        return;
            {
                x: 10,
                y: 10
            };
    }
    

    因为return 本身就是一个有效的声明。你需要确保将return写成如下

    function getCoordinates() {
        return {
                x: 10,
                y: 10
            };
    }
    

    【讨论】:

    • 是的,我已经发布了同样的内容。 ;) 但是,你返回null,你得到undefined
    • @Guffa,正确。并更正。
    • 离我的生活至少有 40 分钟,现在太疯狂了。
    • @MészárosLajos,但不到一个小时......所以,没有大多数人那么糟糕!我认为这是一场胜利。
    • @CaffGeek 啊,一个乐观主义者!
    【解决方案3】:

    告诉我这个特殊功能的陷阱的例子是“最奇怪的语言功能?”中的this one。题。 (这就是我为什么要重新提出这个问题的原因,顺便说一下 - 这是一个宝贵的学习资源。)

    可以在这里找到好的参考资料:What are the rules for Javascript's automatic semicolon insertion?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-10
      • 1970-01-01
      • 1970-01-01
      • 2011-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多