2012-06-24 129 views
11

我正在玩一个JavaScript,并遇到一个错误。错误是这样的:JS后缀操作中的左侧表达式无效?

后缀操作中的左侧表达式无效。

脚本很长,但我认为这是这个问题。奇怪的是,当我在本地运行它时会起作用,但是当它被打包时,使用asset_packager时会失败。

任何想法,为什么我可能会得到这个错误?

更新:经过更多的研究,我发现这个功能。错误似乎发生在“while”语句之后,我认为它是“++ + a +”。这是一个插件,所以我不想去搞乱代码......但是你可能会这样做吗?

m.getInternetExplorerMajorVersion = function() { 
      var a = m.getInternetExplorerMajorVersion.cached = typeof m.getInternetExplorerMajorVersion.cached != "undefined" ? m.getInternetExplorerMajorVersion.cached : function() { 
       var a = 3, b = d.createElement("div"), c = b.getElementsByTagName("i"); 
       while ((b.innerHTML = "<!--[if gt IE "++ + a + "]><i></i><![endif]-->") && c[0]) 
Uncaught ReferenceError: Invalid left-hand side expression in postfix operation 
        ; 
       return a > 4 ? a : !1 
      }(); 
      return a 
     } 
+2

此代码完美工作。我认为错误在代码的另一部分 –

+2

错误报告的内容是什么? –

+0

你为什么要传递'undefined'作为参数? –

回答

6

这个错误是在参照++--以下非引用,如返回的值。问题在你的代码中的其他地方。

20

你没有说哪个插件是这样的,但我正在处理同样的问题,杰弗里,我想同一个插件,因为我的代码看起来几乎相同。

我跟着你的领导。该插件是History.js,来自页面: https://github.com/browserstate/History.js/并且我使用了捆绑的html4 + html5版本,这个版本已经最小化了,但是正在经历我的内部gzip压缩。

我改变了片段

innerHTML="<!--[if gt IE "+ ++a+"]><i></i><![endif]-->" 

innerHTML="<!--[if gt IE "+ (++a)+"]><i></i><![endif]-->" 

它做的工作!

我开始想知道究竟是什么问题。最重要的嫌疑犯当然是gzip。在下面的代码正常情况下是正确的

var a=0; "begining of string "+ ++a+" the rest of string"; 

,并返回"begining of string 1 the rest of string"

然而,gzip压缩摆脱的白色空间,把它变成的东西是由浏览器理解为:

var a=0;"begining of string "+++a+" the rest of string"; 

什么给我们错误Uncaught ReferenceError: Invalid left-hand side expression in postfix operation

正如我以为 - 这是gzip问题。它删除了一个白色字符太多。 使用PHP版本5.4.8-1上的方法gzencode($content, 9, FORCE_GZIP)

+0

你救了我一天的男人!非常感谢! – daveoncode

+0

与历史有同样的问题。js和使用WP Minify plugin for wordpress。非常感谢! – r8n5n

+0

太棒了!解决了我在生产中的问题! – parajao