ホームページ ウェブフロントエンド jsチュートリアル JavaScript疑似配列実装メソッド_JavaScriptスキル

JavaScript疑似配列実装メソッド_JavaScriptスキル

May 16, 2016 pm 06:18 PM

この記事は、JavaScript ユニバーサル ループ トラバーサル メソッド forEach で言及されている疑似配列に関する最後の質問に答えます。
擬似配列とは何ですか?
Array.prototype.slice を通じて実際の配列に変換できる長さ属性を持つオブジェクト。
このようなオブジェクトは数多くありますが、より特別なものは引数オブジェクトであり、getElementsByTagName、document.childNodes などの呼び出しです。それらはすべて、疑似配列である NodeList オブジェクトを返します。
Array.prototype.slice.call(fakeArray) を通じて、擬似配列を実際の Array オブジェクトに変換できます。
例を見てみましょう:

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

var fakeArray01 = { 0:'a',1:'b',length:2};//これは標準の疑似配列オブジェクトです
var arr01 = Array.prototype.slice.call(fakeArray01); >alert( arr01[0]);//a
var arr02 = [].slice.call(fakeArray01);
alert(arr02[0]);//a

slice OK 配列の断片を取得するために使用され、新しい配列を返し、元の配列は変更されません。
この例では、fakeArray が Array オブジェクトに正常に変換されていることがわかります。おそらく皆さんは Array.prototype.slice.call の記述方法に慣れていないでしょう。実際、[].slice.call を使用しても同じ効果を実現できます。では、なぜプロトタイプを使用して実装する必要があるのでしょうか。プログラムがより効率的に実行され、コードもより美しくなります。
擬似配列の実装

擬似配列の実装を詳しく見てみましょう。 いくつかの特殊な使用例を見てみましょう:

コードをコピー コードは次のとおりです:
var fakeArray01 = {a:'a',b:'b',length:2};//長さの添字に対応する値がありません
var arr01 = Array.prototype.slice.call (fakeArray01);
alert(arr01[0]);//未定義
var fakeArray02 = {0:'a',1:'b',length:'num'};//長さは数値
var arr02 = Array.prototype.slice.call(fakeArray02);
alert(arr02[1]);//未定義

同様にfakeArray01とfakeArray02は実数に変換されます
V8 エンジン
array.js のソースコードを見ると、内部実装を簡素化できます
コードをコピー コードは次のとおりです:
function slide(start, end) {
var len = ToUint32(this.length ), result = [];
for(var i = start; i result.push(this[i] );
}
return result;
}

スライスはこれが配列型である必要はなく、長さ属性を持つ必要があるだけであることがわかります。また、length 属性は数値型である必要はありません。数値に変換できない場合、ToUnit32(this.length) は 0 を返します。
上記の結論に基づいて、fakeArray01 は次のように変換されると結論付けることができます。長さ 2 の配列、その値はすべて未定義に初期化され、fakeArray02 は長さ 0 の配列に変換されます。添え字 1 を持つ要素への自然なアクセスは未定義を返します
IE の問題
標準ブラウザ スライス実装ではすでにすべての問題を説明できますが、IE NodeList の処理中に問題が発生しました。 IEではNodeListを実配列に変換できずエラーが発生します。これはなぜでしょうか?厳密にはIE内でArrayoidという抽象クラスが定義されており、ArrayもArgumentsもこれを継承しているのでsliceが使えます。ただし、DOM オブジェクトは COM 経由で JScript に接続されており、スライスの検出は失敗します。
Jquery と擬似配列
Jquery は内部で擬似配列を広範囲に使用します。 Jquery オブジェクト全体が擬似配列に基づいて構築されていると言えるので、Jquery の実際のアプリケーションをいくつか見てみましょう:

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



;

fakeArray


ホット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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

フロントエンドのサーマルペーパーレシートのために文字化けしたコード印刷に遭遇した場合はどうすればよいですか? フロントエンドのサーマルペーパーレシートのために文字化けしたコード印刷に遭遇した場合はどうすればよいですか? Apr 04, 2025 pm 02:42 PM

フロントエンドのサーマルペーパーチケット印刷のためのよくある質問とソリューションフロントエンド開発におけるチケット印刷は、一般的な要件です。しかし、多くの開発者が実装しています...

誰がより多くのPythonまたはJavaScriptを支払われますか? 誰がより多くのPythonまたはJavaScriptを支払われますか? Apr 04, 2025 am 12:09 AM

スキルや業界のニーズに応じて、PythonおよびJavaScript開発者には絶対的な給与はありません。 1. Pythonは、データサイエンスと機械学習でさらに支払われる場合があります。 2。JavaScriptは、フロントエンドとフルスタックの開発に大きな需要があり、その給与もかなりです。 3。影響要因には、経験、地理的位置、会社の規模、特定のスキルが含まれます。

javascriptの分解:それが何をするのか、なぜそれが重要なのか javascriptの分解:それが何をするのか、なぜそれが重要なのか Apr 09, 2025 am 12:07 AM

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

JavaScriptを使用して、同じIDを持つArray要素を1つのオブジェクトにマージする方法は? JavaScriptを使用して、同じIDを持つArray要素を1つのオブジェクトにマージする方法は? Apr 04, 2025 pm 05:09 PM

同じIDを持つ配列要素をJavaScriptの1つのオブジェクトにマージする方法は?データを処理するとき、私たちはしばしば同じIDを持つ必要性に遭遇します...

Shiseidoの公式Webサイトのように、視差スクロールと要素のアニメーション効果を実現する方法は?
または:
Shiseidoの公式Webサイトのようにスクロールするページを伴うアニメーション効果をどのように実現できますか? Shiseidoの公式Webサイトのように、視差スクロールと要素のアニメーション効果を実現する方法は? または: Shiseidoの公式Webサイトのようにスクロールするページを伴うアニメーション効果をどのように実現できますか? Apr 04, 2025 pm 05:36 PM

この記事の視差スクロールと要素のアニメーション効果の実現に関する議論では、Shiseidoの公式ウェブサイト(https://www.shisido.co.co.jp/sb/wonderland/)と同様の達成方法について説明します。

Console.log出力の違い結果:なぜ2つの呼び出しが異なるのですか? Console.log出力の違い結果:なぜ2つの呼び出しが異なるのですか? Apr 04, 2025 pm 05:12 PM

Console.log出力の違いの根本原因に関する詳細な議論。この記事では、Console.log関数の出力結果の違いをコードの一部で分析し、その背後にある理由を説明します。 �...

JavaScriptは学ぶのが難しいですか? JavaScriptは学ぶのが難しいですか? Apr 03, 2025 am 12:20 AM

JavaScriptを学ぶことは難しくありませんが、挑戦的です。 1)変数、データ型、関数などの基本概念を理解します。2)非同期プログラミングをマスターし、イベントループを通じて実装します。 3)DOM操作を使用し、非同期リクエストを処理することを約束します。 4)一般的な間違いを避け、デバッグテクニックを使用します。 5)パフォーマンスを最適化し、ベストプラクティスに従ってください。

PowerPointはJavaScriptを実行できますか? PowerPointはJavaScriptを実行できますか? Apr 01, 2025 pm 05:17 PM

JavaScriptはPowerPointで実行でき、外部JavaScriptファイルを呼び出したり、VBAを介してHTMLファイルを埋め込んだりすることで実装できます。 1. VBAを使用してJavaScriptファイルを呼び出すには、マクロを有効にし、VBAプログラミングの知識を持つ必要があります。 2。JavaScriptを含むHTMLファイルを埋め込みます。これは、シンプルで使いやすいが、セキュリティ制限の対象となります。利点には、拡張機能と柔軟性が含まれますが、欠点にはセキュリティ、互換性、複雑さが含まれます。実際には、セキュリティ、互換性、パフォーマンス、ユーザーエクスペリエンスに注意を払う必要があります。

See all articles