收藏
回答

编译器错误:句末省略";"时可能与下一句的"[]"相结合来解释

框架类型 问题类型 操作系统 工具版本
Bug Windows 1.02.1807200

如代码片段所示,第一句如果不以";"结尾,第二句如果以"["起头(做ES6的数组解构赋值),就能再现异常。

编译器会把第一句当成一个数组Object,第二句当成从该数组Object中取某个元素,然后就华丽丽地奔溃了…

第一句末尾加上";"结尾,就能使问题消失。


个人判断是编译器缺陷。

回答关注问题邀请回答
收藏

3 个回答

  • 小程序技术专员-SgLy
    小程序技术专员-SgLy
    2018-07-31

    你好,对于这类有歧义的代码,请主动加上分号规避。

    2018-07-31
    有用
    回复 3
    • 天空之诚
      天空之诚
      2018-07-31

      但我不认为这属于“歧义”,有明确的换行符、而无续行符的情况下,这应该要被编译器看作两句语句的…

      2018-07-31
      回复
    • 小程序技术专员-SgLy
      小程序技术专员-SgLy
      2018-08-01回复天空之诚

      这里的换行符和空格不影响歧义的吧……而分号就是用来分隔语句的啊

      2018-08-01
      回复
    • 天空之诚
      天空之诚
      2018-08-01回复小程序技术专员-SgLy

      看不懂你想表达的逻辑...只重述一遍事实:

      1. 分号理应可以省略;只在确实有歧义的地方、我同意不可省略分号

      2. 我所引用的代码,并不属于确实有歧义”;因为两句之间是有换行而无续行符的,足以被用作分隔语句

      3. 基于1、2,我所引用的代码,不存在歧义,却被错误编译了,这就是问题

      (您若不是微信官方人员的话,就请等官方人员分析原因后再看吧

      2018-08-01
      回复
  • 神经蛙
    神经蛙
    2018-08-02

    我以前也发现了,

    所以最好加 ; 号吧,

    不然会莫名其妙的

    2018-08-02
    有用
    回复 5
    • 天空之诚
      天空之诚
      2018-08-02

      最好应该是改编译器。不改,就索性不要允许有些行可以尾部省略分号,有些行却竟然不行…

      2018-08-02
      回复
    • 神经蛙
      神经蛙
      2018-08-02回复天空之诚
      console.log("I am here")
      (new SomeClazz()).callSomeOne();

      像上面这样

      项目里的例子


      2018-08-02
      回复
    • 天空之诚
      天空之诚
      2018-08-02

      就是这种,一旦有换行符(且无续行符),编译器就理应能够正确解析成为两句,而不是推给“歧义性”

      2018-08-02
      回复
    • 神经蛙
      神经蛙
      2018-08-06回复天空之诚

      我是从IDE压缩js文件里找到的, 它将那两行代码合并成一行, 但不是混淆

      2018-08-06
      回复
    • 天空之诚
      天空之诚
      2018-08-06回复神经蛙

      那其实意味着,IDE的压缩步骤可以改善为在有必要的地方添加“;号、而不是只为缩短长度无脑压缩。

      另外发现,这种数组赋值虽然语法上是允许的,但Chrome V8引擎内部好像也错误地进行了压缩合并、而导致运行时错误…(用node.js测了相同代码

      鉴于小程序在安卓上也是用的V8来解释JavaScript,这就情有可原了…

      2018-08-06
      回复
  • 是小白啊
    是小白啊
    2018-07-31

    ,你好,所提供的代码片段无法正常运行,请重新提供

    2018-07-31
    有用
    回复 3
    • 天空之诚
      天空之诚
      2018-07-31

      你好,可能是本地目录结构变化导致?(原以为代码片段会被压缩上传到云端,不受后续编辑影响的呢)

      再次分享后得到的链接,请检验:wechatide://minicode/WWRBnjmG7wnW

      2018-07-31
      回复
    • 是小白啊
      是小白啊
      2018-07-31回复天空之诚

      还是运营不了。请按照教程提供:https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html

      2018-07-31
      回复
    • 天空之诚
      天空之诚
      2018-07-31

      真没办法…看教程发现步骤并没错(难道是又发现了代码片段导出的Bug了么…)

      一个一个解决先,

      这个问题的代码截图如下:


      2018-07-31
      回复
登录 后发表内容