ホームページ ウェブフロントエンド jsチュートリアル js (json) でオブジェクトまたは配列リテラルを定義するときに各ブラウザが余分なカンマを処理する方法_javascript スキル

js (json) でオブジェクトまたは配列リテラルを定義するときに各ブラウザが余分なカンマを処理する方法_javascript スキル

May 16, 2016 pm 06:09 PM
物体 配列

1. js エンジンはコードの読み込み時に構文解析を実行します。記述された js が標準化されていない場合、構文解析は失敗します。このときのエラーを構文エラーといいます
2. 構文解析に合格し、js エンジンがコードを実行します。実行中に発生するエラーはランタイム エラーと呼ばれます

エンジンが異なれば、これら 2 つのエラーの処理方法も異なります。次のように:

コードをコピー コードは次のとおりです:

var p = {name: "Jack", age:33,};//33 の後にカンマがあることに注意してください
p.toString = function() {return "Name: " this.name ", Age: " this.age}; 🎜>console.log( p);
alert(p);//名前: Jack、33 歳

Firefox でテストすると、エンジンは 33 以降のカンマを無視します。文法チェックを通過して実行できるもの テスト期間中にエラーは報告されません
IE6/7でテストした場合、構文解析期間中にエラーが報告され、当然実行期間には入りません。
ただし、この問題は IE8 では修正されており、エラーは報告されません。他のブラウザではエラーは報告されません。

要約すると、このエラーは見つけるのが困難です。多くの場合、誤ってカンマを追加したり、多くの属性を含むオブジェクトまたは配列を定義し、それらの一部を削除して余分なカンマを残したりすることが原因で発生します。

コードをコピー コードは次のとおりです:
//不規則な書き込み
var p = {name:"Jack",age:33,};
var ary = ["one","two","three",];
//標準的な書き方
var p = {name :"Jack",age:33};
var ary = ["one","two","three"];

さらに、配列リテラル この問題は、配列の最後に余分なカンマがあるようなものです

コードをコピーします コードは次のとおりです。
var ary = [1,2,];
console.log(ary.length);

IE6/7/8 の出力長は 3、 IE9などのブラウザは2. ECMAScript 5 11.1.4 には、最後のカンマを無視する必要があると記載された段落が含まれています。ただし、この仕様は IE9 まで実装されませんでした。他のブラウザは問題ありません。

ECMAScript 5 11.1.4 は次のように記述しました:

要素リスト内のコンマの前に AssignmentExpression (つまり、先頭にカンマがあるか、別のカンマの後にある場合、配列の末尾で要素が省略されている場合、配列要素の欠落は配列の長さに影響し、後続の要素のインデックスが増加します。

かつて誰かが配列のこの機能を利用して、いわゆる「世界一短い IE 判定」

を作成しました。 コードをコピー コードは次のとおりです。
var ie = !-[1,];
alert(ie);

しかし、IE9 では終了してしまいました。このバグをブラウザを判断するために使用しないでください。


JSON


JSON 形式では、コンマは複数の属性キーと値のペア間の区切り文字です。次に例を示します。

var json = { id: 1, name: 'heero' };

しかし、プログラミングする場合、余分な情報を追加するのは簡単です。

最後のキーと値のペア の後にもカンマが追加されます。

var json = { id: 1, name: 'heero', };

この場合、IE6 および 7 ではエラーが報告されますが、IE8 およびその他のブラウザーでは問題ありません。

配列


配列では、コンマは要素間の区切り文字です。例:

var arr = [1, 2, 3];

同様に、

最後の要素 の後にコンマを誤って追加する可能性があります:

var arr = [1, 2, 3,];

直感的には、これは構文が間違っているはずです。しかし実際には、IE6 を含むすべてのブラウザがこの状況と互換性があります。次のサンプル コードを考えてみましょう:

var arr = [1, 2, 3,];<p>for (var i = 0; i <arr.length i><code>var arr = [1, 2, 3,];<br>for (var i = 0; i < arr.length; i ) { alert(arr[i]); }

IE以外のブラウザでは、1、2、3が順に出力されますが、IEブラウザでは、1、2、3、未定義が順に出力されます。明らかに、

IE は余分なカンマの後に未定義要素 を追加します。

余分なコンマが最後ではなく途中にある別のケースを考えてみましょう:

var arr = [1, 2,, 3,];<p>for (var i = 0; i <arr.length i><code>var arr = [1, 2,, 3,];<br>for (var i = 0; i < arr.length; i ) { alert(arr[i]); }

すべてのブラウザは、1、2、未定義、3 を出力します。処理方法は同じであることがわかります。つまり、

は余分なカンマの前に未定義の要素 を挿入します。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

foreach ループを使用して PHP 配列から重複要素を削除するにはどうすればよいですか? foreach ループを使用して PHP 配列から重複要素を削除するにはどうすればよいですか? Apr 27, 2024 am 11:33 AM

foreach ループを使用して PHP 配列から重複要素を削除する方法は次のとおりです。配列を走査し、要素がすでに存在し、現在の位置が最初に出現しない場合は、要素を削除します。たとえば、データベース クエリの結果に重複レコードがある場合、このメソッドを使用してそれらを削除し、重複レコードのない結果を取得できます。

PHP 配列ディープ コピーの技術: さまざまな方法を使用して完璧なコピーを実現する PHP 配列ディープ コピーの技術: さまざまな方法を使用して完璧なコピーを実現する May 01, 2024 pm 12:30 PM

PHP で配列をディープ コピーする方法には、json_decode と json_encode を使用した JSON エンコードとデコードが含まれます。 array_map と clone を使用して、キーと値のディープ コピーを作成します。シリアル化と逆シリアル化には、serialize と unserialize を使用します。

PHP 配列キー値の反転: さまざまな方法のパフォーマンス比較分析 PHP 配列キー値の反転: さまざまな方法のパフォーマンス比較分析 May 03, 2024 pm 09:03 PM

PHP の配列キー値の反転メソッドのパフォーマンスを比較すると、array_flip() 関数は、大規模な配列 (100 万要素以上) では for ループよりもパフォーマンスが良く、所要時間が短いことがわかります。キー値を手動で反転する for ループ方式は、比較的長い時間がかかります。

MySQLクエリ結果の配列をオブジェクトに変換するにはどうすればよいですか? MySQLクエリ結果の配列をオブジェクトに変換するにはどうすればよいですか? Apr 29, 2024 pm 01:09 PM

MySQL クエリ結果の配列をオブジェクトに変換する方法は次のとおりです。 空のオブジェクト配列を作成します。結果の配列をループし、行ごとに新しいオブジェクトを作成します。 foreach ループを使用して、各行のキーと値のペアを新しいオブジェクトの対応するプロパティに割り当てます。新しいオブジェクトをオブジェクト配列に追加します。データベース接続を閉じます。

データソートにおけるPHP配列グループ化機能の応用 データソートにおけるPHP配列グループ化機能の応用 May 04, 2024 pm 01:03 PM

PHP の array_group_by 関数は、キーまたはクロージャ関数に基づいて配列内の要素をグループ化し、キーがグループ名、値がグループに属する要素の配列である連想配列を返すことができます。

PHP 配列のディープ コピーのベスト プラクティス: 効率的な方法を発見する PHP 配列のディープ コピーのベスト プラクティス: 効率的な方法を発見する Apr 30, 2024 pm 03:42 PM

PHP で配列のディープ コピーを実行するためのベスト プラクティスは、 json_decode(json_encode($arr)) を使用して配列を JSON 文字列に変換し、それから配列に戻すことです。 unserialize(serialize($arr)) を使用して配列を文字列にシリアル化し、それを新しい配列に逆シリアル化します。 RecursiveIteratorIterator を使用して、多次元配列を再帰的に走査します。

PHP における配列とオブジェクトの違いは何ですか? PHP における配列とオブジェクトの違いは何ですか? Apr 29, 2024 pm 02:39 PM

PHP では、配列は順序付けられたシーケンスであり、要素はインデックスによってアクセスされます。オブジェクトは、new キーワードによって作成されたプロパティとメソッドを持つエンティティです。配列へのアクセスはインデックス経由で、オブジェクトへのアクセスはプロパティ/メソッド経由で行われます。配列値が渡され、オブジェクト参照が渡されます。

PHP 配列の多次元ソートの実践: 単純なシナリオから複雑なシナリオまで PHP 配列の多次元ソートの実践: 単純なシナリオから複雑なシナリオまで Apr 29, 2024 pm 09:12 PM

多次元配列のソートは、単一列のソートとネストされたソートに分類できます。単一列のソートでは、array_multisort() 関数を使用して列ごとにソートできますが、ネストされたソートでは、配列を走査してソートするための再帰関数が必要です。具体的な例としては、製品名による並べ替えや、売上数量や価格による化合物の並べ替えなどがあります。

See all articles