15

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
        }
4

2 に答える 2

23

あなたはそれがどのプラグインかは言いませんでしたが、私は同じ問題を扱っていました、ジェフリー、私のコードはほとんど同じように見えたので、同じプラグインだと思います。

私はあなたのリードに従いました。プラグインはページの History.js でした: https://github.com/browserstate/History.js/で、最小化されたバンドルされた html4+html5 バージョンを使用していました。

そのフラグメントを変更しました

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

の中へ

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

そして、それは仕事をしました!

私は、正確に何が問題なのか疑問に思い始めました。最も重要な容疑者は、もちろん縮小化の「圧縮」でした。通常の状況では、次のコードは正しいです

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

そして戻る"begining of string 1 the rest of string"

ただし、縮小により空白が取り除かれ、ブラウザが次のように理解できるものに変換されます。

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

エラーの原因Uncaught ReferenceError: Invalid left-hand side expression in postfix operation

編集:サムが指摘したように、問題はもちろん、gzip圧縮ではなく、縮小によって引き起こされました:)

于 2013-01-11T13:33:51.160 に答える
8

このエラーは、戻り値などの非参照を参照している++か、参照していません。--問題はコードの別の場所にあります。

于 2012-06-24T03:41:08.697 に答える