一部のユーザーは、私のサイトで時折JSエラーを報告しています。エラーメッセージには「予期される識別子、文字列、または番号」と表示され、行番号は423725915です。これは任意の番号であり、これが発生するとレポートごとに変更されます。これは主にIE7 / Mozilla4.0ブラウザで発生します。
コードを何度もスキャンしてjslintを実行しましたが、何も検出されませんでした。このエラーメッセージの原因となる一般的なタイプのJSの問題を知っている人はいますか?
一部のユーザーは、私のサイトで時折JSエラーを報告しています。エラーメッセージには「予期される識別子、文字列、または番号」と表示され、行番号は423725915です。これは任意の番号であり、これが発生するとレポートごとに変更されます。これは主にIE7 / Mozilla4.0ブラウザで発生します。
コードを何度もスキャンしてjslintを実行しましたが、何も検出されませんでした。このエラーメッセージの原因となる一般的なタイプのJSの問題を知っている人はいますか?
回答:
このタイプのエラーの原因は、多くの場合、オブジェクトまたは配列定義のコンマの置き忘れである可能性があります。
var obj = {
id: 23,
name: "test", <--
}
ランダムな行に表示される場合は、動的に作成しているオブジェクト定義の一部である可能性があります。
,\s*?\n?\s*?],\s*?\n?\s*?\}
クラスはInternetExplorerの予約キーワードであるため、Javascript辞書のキーとして単語クラスを使用すると、恐ろしい「予期される識別子、文字列、または数字」エラーが発生する可能性もあります。
悪い
{ class : 'overlay'} // ERROR: Expected identifier, string or number
良い
{'class': 'overlay'}
予約済みのキーワードをJavascript辞書のキーとして使用する場合は、キーを引用符で囲みます。
このヒントがあなたに地獄のデバッグの日を節約することを願っています。
実際、最近IEでそのようなものを入手しましたが、これはJavaScript構文の「エラー」に関連していました。IE以外はどこでも問題なかったので、引用符でエラーを言います。これはIE6の下にありました。この問題は、JSONオブジェクトの作成と、次のような余分なコンマに関連していました。
{ one:1, two:2, three:3, }
IE6は、3の後のコンマが本当に好きではありません。そのような、ちょっとした構文形式の問題を探すかもしれません。
ええ、25行のJavaScriptの数百万行の番号も面白いと思いました。
幸運を。
これは決定的な答えではありません。魅力的だが間違った答えを排除して、他の人が正しい答えに向かって進むのを助けます。
デバッグが問題を浮き彫りにするように見えるかもしれません。ただし、問題が発生するブラウザはIEのみであり、IEでは元のドキュメントの一部であったコードのみをデバッグできます。動的に追加されたコードの場合、デバッガーは現在の命令としてbody要素を表示するだけであり、IEはエラーが膨大な行番号で発生したと主張します。
IEでこの問題を示すサンプルWebページを次に示します。
<html>
<head>
<title>javascript debug test</title>
</head>
<body onload="attachScript();">
<script type="text/javascript">
function attachScript() {
var s = document.createElement("script");
s.setAttribute("type", "text/javascript");
document.body.appendChild(s);
s.text = "var a = document.getElementById('nonexistent'); alert(a.tagName);"
}
</script>
</body>
これにより、次のエラーが発生しました。
Line: 54654408
Error: Object required
<script>ローカルまたはロードされたリソースとして、タグを介して一時的にJavaScriptをドキュメント自体に配置します。デバッグ。作業中のスクリプトに戻ります。
私のアプリケーションの1つでバグを見たばかりですが、キャッチオールとして、キーワードと同じすべてのjavascriptプロパティの名前を囲むことを忘れないでください。
次のようなオブジェクトが存在するバグに対処した後、このバグが見つかりました。
var x = { class: 'myClass', function: 'myFunction'};
エラーが生成されました(クラスと関数はキーワードです)これは引用符を追加することで修正されました
var x = { 'class': 'myClass', 'function': 'myFunction'};
時間を節約したいです
if(_features.delete){...}、deleteがキーワードであるため、エラーの原因となるようなものを使用していました。 stackoverflow.com/questions/26255/...
http://closure-compiler.appspot.com/homeは、問題のあるスクリプトの実際の行番号を正確に参照して、このエラーを検出します。
IE7は、新しいブラウザ、特にChromeよりもはるかに寛容ではありません。私はこれらのバグを見つけるためにJSLintを使用するのが好きです。とりわけ、これらの不適切に配置されたコンマが見つかります。不適切な空白を無視するオプションをアクティブにすることをお勧めします。
不適切に配置されたコンマに加えて、このブログのコメントで誰かが報告しました:
IE(7)でのみ「予期される識別子」としか表示されないエラーを探していました。私の研究は私をこのページに導きました。少しイライラした後、予約語を関数名(「スイッチ」)として使用したことが問題であることがわかりました。エラーは明確ではなく、間違った行番号を示していました。
不要なものを削除し、関数にサインインします。あなたは解決策を得るでしょう。
これを参照してください
http://blog.favrik.com/2007/11/29/ie7-error-expected-identifier-string-or-number/
このエラーは、配列の最後または関数コードでコンマを追加または削除しなかった場合に発生します。このようなエラーについては、Webページのコード全体を監視する必要があります。
Facebook APIのコーディング中に、Facebookアプリコードで取得しました。
<div id='fb-root'>
<script type='text/javascript' src='http://connect.facebook.net/en_US/all.js'</script>
<script type='text/javascript'>
window.fbAsyncInit = function() {
FB.init({appId:'".$appid."', status: true, cookie: true, xfbml: true});
FB.Canvas.setSize({ width: 800 , height: 860 , });
// ^ extra comma here
};
</script>
これは、srcでプルされ、途中でロードされたスクリプトのように聞こえます。残りがロードされていないため、構文エラーが発生します。
IE7にはオブジェクトの配列に問題があります
columns: [
{
field: "id",
header: "ID"
},
{
field: "name",
header: "Name" , /* this comma was the problem*/
},
...
このバグの別のバリエーション:「continue」という名前の関数があり、予約語であるため、このエラーがスローされました。関数の名前を「continueClick」に変更する必要がありました
たぶん、メソッド「コンストラクター」を持つオブジェクトがあり、それを呼び出そうとします。
私もこの問題に遭遇しました。私は以下の2つの解決策を見つけました。1)。上記の他の人が述べたのと同じように、JSONオブジェクトから余分なコンマを削除します。2)。また、私のJSP / HTMLにはがありました。このため、ブラウザの古いモードがトリガーされ、余分なカンマに対してJSエラーが発生していました。使用すると、ブラウザのHTML5モード(サポートされている場合)がトリガーされ、他のブラウザFF、Chromeなどと同じようにExtraCommaでも正常に動作します。
異なる構成で同じ問題が発生しました。これは角度のある工場定義でしたが、他の場所でも発生する可能性があると思います。
angular.module("myModule").factory("myFactory", function(){
return
{
myMethod : function() // <--- error showing up here
{
// method definition
}
}
});
修正は非常にエキゾチックです:
angular.module("myModule").factory("myFactory", function(){
return { // <--- notice the absence of the return line
myMethod : function()
{
// method definition
}
}
});
このエラーは、末尾のコンマなどではなく、constants.jsで使用されていた場合に発生しました。
var titles = {
[title.X]: 'X title',
[title.Y]: 'Y title'
}
IE11はこれをまったく気に入らなかった。
前述のように、これはを使用して簡単に修正できました
var titles = {
'title.X': 'X title',
'title.Y': 'Y title'
}