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

时间:2012-06-24 00:47:22

标签: javascript

我正在使用javascript并遇到错误。错误是这样的:

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

脚本很长但我觉得这就是这个问题。奇怪的是,当我在本地运行它时,这是有效的,但当它打包时,使用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 个答案:

答案 0 :(得分:22)

你没有说哪个插件是那个,但我正在处理同样的问题,Jeffrey,我认为同一个插件,因为我的代码看起来几乎一样。

我跟着你的领导。插件是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)

答案 1 :(得分:6)

此错误是针对非引用后的++--引用的,例如返回的值。问题出在代码中的其他地方。