JSのArray.prototype.indexOf拡張による問題と解決策_基礎知識
配列には、indexOf メソッドがないため、配列内の要素のインデックスを見つけるのは面倒です。呼び出しの便宜のために、Array.prototype.indexOf() はプロトタイプ プロトタイプを通じて拡張されています。使いやすい。しかし、配列を走査するときに、このカスタムのindexOfに問題がありました。
Array.prototype.indexOf = function(item) {
for (var i = 0; i
を返します。 }
-1 を返します。 }
を使用する場合に直接
;
しかし、あるとき、配列要素を走査するときに for..in.. ループが使用され、それが別の問題を引き起こし、調和のとれた雰囲気を壊してしまいました。
"); }
本来はこの4人の名前を出力したかったのですが、何が出力されたのでしょうか?
コードをコピーします
//indexOf=function(item) { for (var i = 0; i
名前を入力するだけでなく、独自の拡張メソッド IndexOf も出力します。しかし、奇妙なことに、Firefox には 4 人の名前しか含まれていないのです。
では、Firefox を使用しないのはなぜでしょうか?
後で情報を確認して知りましたが、
Array はすでに JavaScript バージョン 1.6 で Array.indexOf() をサポートしており、私が使用している Firefox はバージョン 3.5 で、すでに JavaScript 1.8 をサポートしています。IndexOf は Array 自体の固有メソッドです。
IE に関しては、IE8 を使用していますが、JavaScript のバージョン 1.3 のみをサポートしています。
つまり、IE8 は、indexOf を「ユーザー定義属性」と見なしますが、Firefox は、それ自体がネイティブにサポートする固有の属性と見なします。
これは本当にそうなのでしょうか?
実験を行って、indexOf の名前を myIndexOf に変更して再試行すると、IE と Firefox の両方で myIndexOf が出力され、前の点が正しいことがわかります。
ここで別の問題が発生します。長い間、indexOf を拡張してきましたが、多くのプロジェクト コードですでにこのメソッドが使用されていますが、配列自体の要素を出力するには for..in を使用する必要があります。自分で延長したくないのですが、ロシアに着いたらどうすればいいですか?
幸いなことに、JavaScript には hasOwnProperty メソッドが用意されています。
その説明を見てください:
コードをコピーします
説明を見ると、それが私たちが望んでいることです。
コードをコピーします
"); }
さらに、インターネットから取得した hasOwnProperty の使用方法の例を次に示します。
関数 Book(タイトル、著者) {
this.title = タイトル;
this.author = 著者;
}
Book.prototype.price = 9.99;
Object.prototype.copyright = "herongyang.com";
var myBook = new Book("JavaScript チュートリアル", "Herong Yang");
// 基本プロトタイプ レベルで組み込みプロパティをダンプします
document.writeln("/nObject.prototype の組み込みプロパティ:");
dumpProperty(Object.prototype, "コンストラクター");
dumpProperty(Object.prototype, "hasOwnProperty");
dumpProperty(Object.prototype, "isPrototypeOf");
dumpProperty(Object.prototype, "toString");
dumpProperty(Object.prototype, "valueOf");
dumpProperty(Object.prototype, "著作権");
// プロトタイプ レベルで組み込みプロパティをダンプします
document.writeln("/n=================/nBook.prototype の組み込みプロパティ:");
dumpProperty(Book.prototype, "コンストラクター");
dumpProperty(Book.prototype, "hasOwnProperty");
dumpProperty(Book.prototype, "isPrototypeOf");
dumpProperty(Book.prototype, "toString");
dumpProperty(Book.prototype, "valueOf");
dumpProperty(Book.prototype, "著作権");
// オブジェクト レベルで組み込みプロパティをダンプします
document.writeln("/n==================/nmyBook の組み込みプロパティ:");
dumpProperty(myBook, "コンストラクター");
dumpProperty(myBook, "hasOwnProperty");
dumpProperty(myBook, "isPrototypeOf");
dumpProperty(myBook, "toString");
dumpProperty(myBook, "valueOf");
dumpProperty(myBook, "著作権");
function dumpProperty(object, property) {
var の継承。
if (object.hasOwnProperty(property))
継承 = "ローカル";
それ以外
継承 = "継承";
document.writeln(プロパティ ": " 継承 ": "
オブジェクト[プロパティ]);
}
查看浏览器サポートjavascriptto哪个バージョン:
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
http://www.w3.org/1999/xhtml">
頭>
<スクリプト言語="JavaScript"> //document.write("お使いのブラウザの種類:" navigator.appName "
"); //document.write("ブラウザのバージョン:" navigator.appVersion "
"); //JavaScript1.0をサポートするブラウザはこのスクリプトを実行できます
Document.write('このブラウザは JavaScript1.0 をサポートしています
'); スクリプト>
<スクリプト言語="JavaScript1.1"> // JavaScript1.1 をサポートするブラウザのみがこのスクリプトを実行できます
Document.write('このブラウザは JavaScript1.1 をサポートしています
'); スクリプト>
<スクリプト言語="JavaScript1.2"> // JavaScript1.2 をサポートするブラウザのみがこのスクリプトを実行できます
Document.write('このブラウザは JavaScript1.2 をサポートしています
'); スクリプト>
<スクリプト言語="JavaScript1.3"> //JavaScript1.3をサポートするブラウザはこのスクリプトを実行できます
Document.write('このブラウザは JavaScript1.3 をサポートしています
'); スクリプト>
<スクリプト言語="JavaScript1.4"> //JavaScript1.4をサポートするブラウザはこのスクリプトを実行できます
Document.write('このブラウザは JavaScript1.4 をサポートしています
'); スクリプト>
<スクリプト言語="JavaScript1.5"> //JavaScript1.5をサポートするブラウザはこのスクリプトを実行できます
Document.write('このブラウザは JavaScript1.5
'); スクリプト>
<スクリプト言語="JavaScript1.6"> //JavaScript1.6をサポートするブラウザはこのスクリプトを実行できます
Document.write('このブラウザは JavaScript1.6 をサポートしています
'); スクリプト>
<スクリプト言語="JavaScript1.7"> //JavaScript1.7をサポートするブラウザはこのスクリプトを実行できます
Document.write('このブラウザは JavaScript1.7 をサポートしています
'); スクリプト>
<スクリプト言語="JavaScript1.8"> // JavaScript 1.8 をサポートするブラウザのみがこのスクリプトを実行できます
Document.write('このブラウザは JavaScript1.8
'); スクリプト>
<スクリプト言語="JavaScript1.9"> //JavaScript1.9をサポートするブラウザはこのスクリプトを実行できます
Document.write('このブラウザは JavaScript1.9
'); スクリプト>
本文>

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











タイトル: Array.Sort 関数を使用して C# で配列を並べ替える例 本文: C# では、配列は一般的に使用されるデータ構造であり、多くの場合、配列を並べ替える必要があります。 C# には Array クラスが用意されており、このクラスには配列を簡単に並べ替えるための Sort メソッドがあります。この記事では、C# で Array.Sort 関数を使用して配列を並べ替える方法を示し、具体的なコード例を示します。まず、Array.Sort 関数の基本的な使用法を理解する必要があります。 Array.So

PHP でプログラミングする場合、多くの場合、配列をマージする必要があります。 PHP には、配列のマージを完了するための array_merge() 関数が用意されていますが、配列内に同じキーが存在する場合、この関数は元の値を上書きします。この問題を解決するために、PHP は配列をマージして同じキーの値を保持できる array_merge_recursive() 関数を言語で提供し、プログラム設計をより柔軟にします。配列マージ

PHP には、配列操作をより便利かつ高速にする強力な配列関数が多数あります。 2 つの配列を結合して連想配列にする必要がある場合、PHP の array_combine 関数を使用してこの操作を実行できます。この関数は、実際には、ある配列のキーを別の配列の値として新しい連想配列に結合するために使用されます。次に、PHP の array_combine 関数を使用して 2 つの配列を結合して連想配列にする方法を説明します。 array_comb について学ぶ

PHP プログラミングにおいて、配列は大量のデータを簡単に処理できる非常に重要なデータ構造です。 PHP は配列関連の関数を多数提供しており、array_fill() はその 1 つです。この記事では、array_fill() 関数の使い方と実際の応用におけるヒントを詳しく紹介します。 1. array_fill() 関数の概要 array_fill() 関数の機能は、同じ値で構成される指定された長さの配列を作成することです。具体的には、この関数の構文は次のとおりです。

Python の配列モジュールは事前定義された配列であるため、標準のリストよりもメモリ内で使用するスペースがはるかに少なく、追加、削除、インデックス付け、スライスなどの要素レベルの操作を高速に実行することもできます。さらに、配列内のすべての要素は同じ型であるため、平均値、最大値、最小値の計算など、配列が提供する効率的な数値演算関数を使用できます。さらに、配列モジュールは、配列オブジェクトのバイナリ ファイルへの直接の書き込みと読み取りもサポートしているため、大量の数値データを処理する際の効率が向上します。したがって、大量の同種データを処理する必要がある場合は、Python の配列モジュールを使用してコードの実行効率を最適化することを検討してください。配列モジュールを使用するには、まず次のことを行う必要があります。

Java プログラミングでは、配列は重要なデータ構造です。配列は 1 つの変数に複数の値を格納できます。さらに重要なのは、インデックスを使用して各値にアクセスできることです。ただし、配列を操作しているときに、いくつかの例外が発生する場合があります。そのうちの 1 つは ArrayStoreException です。この記事では、ArrayStoreException 例外の一般的な原因について説明します。 1. 型の不一致 配列の作成時に要素の型を指定する必要があります。互換性のないデータ型を配列に格納しようとすると、

IndexOf メソッド: 注: IndexOf メソッドは、String オブジェクト内の部分文字列の開始位置を示す整数値を返します。部分文字列が見つからない場合は、-1 が返されます。 publicclassIndexOf{publicstaticvoidmain(String[]args){Strings="李宏#王海#林奇#鲁贤#唐梅"; Stringq="#";//検索する文字列 Stringrr="*";//存在しない文字列 inti=0;for(intj=0;j

違いは次のとおりです: 1. 戻り値の型が異なる; 2. 受け入れられるパラメータが異なる; 3. NaN を処理する方法が異なる; 4. 大文字と小文字を処理する方法が異なる; 5. 使用できるデータ型が異なる。
