検索
ホームページウェブフロントエンドjsチュートリアルJS_javascript スキルの Array.prototype.indexOf を拡張することによって発生する問題のディスカッションと解決策

Array には、indexOf メソッドがないため、配列内の要素のインデックスを見つけるのは面倒ですが、呼び出しの便宜のために、Array.prototype.indexOf() がプロトタイプ プロトタイプを通じて拡張されており、より使いやすくなっています。 。しかし、配列を走査するときに、このカスタムのindexOfに問題がありました。

配列には、indexOf メソッドがないため、配列内の要素のインデックスを見つけるのが面倒になります。呼び出しの便宜のために、Array.prototype.indexOf() は、プロトタイプのプロトタイプによって拡張されています。より使いやすくなります。

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

Array.prototype.indexOf = function(item) ) {
for (var i = 0; i if (this[i] == item)
return i;
}
return - 1;
}

使用する場合は、直接
コードをコピーしてください コードは次のように: >
var arr=[1,2,3,4,5];
varindex=arr.indexOf(1); //index==0


拡張後は、とても楽しくて使いやすく、調和のとれた光景です...
しかし、あるとき、配列要素を走査するときに for..in.. ループが使用され、それが別の問題を引き起こし、調和のとれた雰囲気を壊してしまいました。 。


var a=["Zhang Fei", "関羽" ,"劉備","呂布"];
for(var p in a){
document.write(p "=" a[p] "
" );
}


当初はこの 4 人の名前を出力したかったのですが、何が出力されましたか?
実際の出力は次のとおりです:
//0=張飛
//1=関羽
//2=劉備
//3=呂布
//indexOf =function( item) { for (var i = 0; i 出力のindexOfは、それ自体で展開できますが、これは理解できます。結局のところ、for..inはオブジェクトのすべてのユーザー定義属性または配列のすべての要素を走査します。
では、Firefox を使用しないのはなぜでしょうか?
情報を確認したところ、
Array はすでに JavaScript バージョン 1.6 で Array.indexOf() をサポートしており、私が使用している Firefox はバージョン 3.5 で、既に JavaScript1.8 をサポートしていることに気付きました。方法。
IE に関しては、IE8 を使用していますが、JavaScript のバージョン 1.3 のみをサポートしています。
つまり、IE8 は、indexOf を「ユーザー定義属性」と見なしますが、Firefox は、それ自体がネイティブにサポートする固有の属性と見なします。
これは本当にそうなのでしょうか?
実験を行って、indexOf の名前を myIndexOf に変更して再試行すると、IE と Firefox の両方で myIndexOf が出力され、前の点が正しいことがわかります。
ここで別の問題が発生します。長い間、indexOf を拡張してきましたが、多くのプロジェクト コードですでにこのメソッドが使用されていますが、配列自体の要素を出力するには for..in を使用する必要があります。自分で延長したくないのですが、ロシアに着いたらどうすればいいですか?
幸いなことに、JavaScript には hasOwnProperty メソッドが用意されています。
その説明を見てください:
Object から派生したすべてのオブジェクトは hasOwnProperty メソッドを継承します。このメソッドは、in 演算子とは異なり、オブジェクトがそのオブジェクトの直接プロパティとして指定されたプロパティを持っているかどうかを判断するために使用できます。オブジェクトのプロトタイプチェーンをチェックダウンしません
説明を見ると、それが私たちが望んでいることです。
for...in.. で判断するだけです。



コードをコピーします コードは次のとおりです: if(a.hasOwnProperty(p)){
document.write(p "=" a[p] "
");
}


さらに、インターネットから取得した hasOwnProperty の使用例を添付します。


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

function Book(title, author) {
this.title = title;
this.author = author;
}
Book.prototype.price = 9.99;
Object.prototype.copyright = "herongyang.com";
var myBook = new Book("JavaScript Tutorials", "Herong Yang");
// Dumping built-in properties at the base prototype level
document.writeln("/nObject.prototype's built-in properties:");
dumpProperty(Object.prototype, "constructor");
dumpProperty(Object.prototype, "hasOwnProperty");
dumpProperty(Object.prototype, "isPrototypeOf");
dumpProperty(Object.prototype, "toString");
dumpProperty(Object.prototype, "valueOf");
dumpProperty(Object.prototype, "copyright");
// Dumping built-in properties at the my prototype level
document.writeln("/n==================/nBook.prototype's built-in properties:");
dumpProperty(Book.prototype, "constructor");
dumpProperty(Book.prototype, "hasOwnProperty");
dumpProperty(Book.prototype, "isPrototypeOf");
dumpProperty(Book.prototype, "toString");
dumpProperty(Book.prototype, "valueOf");
dumpProperty(Book.prototype, "copyright");
// Dumping built-in properties at the object level
document.writeln("/n==================/nmyBook's built-in properties:");
dumpProperty(myBook, "constructor");
dumpProperty(myBook, "hasOwnProperty");
dumpProperty(myBook, "isPrototypeOf");
dumpProperty(myBook, "toString");
dumpProperty(myBook, "valueOf");
dumpProperty(myBook, "copyright");
function dumpProperty(object, property) {
var inheritance;
if (object.hasOwnProperty(property))
inheritance = "Local";
else
inheritance = "Inherited";
document.writeln(property ": " inheritance ": "
object[property]);
}

查看浏览器支持javascript到哪个版本:
复制代码 代码如下:





浏览器的JavaScript版本支持测试














声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
使用C#中的Array.Sort函数对数组进行排序使用C#中的Array.Sort函数对数组进行排序Nov 18, 2023 am 10:37 AM

标题:C#中使用Array.Sort函数对数组进行排序的示例正文:在C#中,数组是一种常用的数据结构,经常需要对数组进行排序操作。C#提供了Array类,其中有Sort方法可以方便地对数组进行排序。本文将演示如何使用C#中的Array.Sort函数对数组进行排序,并提供具体的代码示例。首先,我们需要了解一下Array.Sort函数的基本用法。Array.So

简单明了的PHP array_merge_recursive()函数使用方法简单明了的PHP array_merge_recursive()函数使用方法Jun 27, 2023 pm 01:48 PM

在进行PHP编程时,我们常常需要对数组进行合并。PHP提供了array_merge()函数来完成数组合并的工作,不过当数组中存在相同的键时,该函数会覆盖原有的值。为了解决这个问题,PHP在语言中还提供了一个array_merge_recursive()函数,该函数可以合并数组并保留相同键的值,使得程序的设计变得更加灵活。array_merge

如何使用PHP中的array_combine函数将两个数组拼成关联数组如何使用PHP中的array_combine函数将两个数组拼成关联数组Jun 26, 2023 pm 01:41 PM

在PHP中,有许多强大的数组函数可以使数组的操作更加方便和快捷。当我们需要将两个数组拼成一个关联数组时,可以使用PHP的array_combine函数来实现这一操作。这个函数实际上是用来将一个数组的键作为另一个数组的值,合并成一个新的关联数组。接下来,我们将会讲解如何使用PHP中的array_combine函数将两个数组拼成关联数组。了解array_comb

PHP array_fill()函数用法详解PHP array_fill()函数用法详解Jun 27, 2023 am 08:42 AM

在PHP编程中,数组是一种非常重要的数据结构,能够轻松地处理大量数据。PHP中提供了许多数组相关的函数,array_fill()就是其中之一。本篇文章将详细介绍array_fill()函数的用法,以及在实际应用中的一些技巧。一、array_fill()函数概述array_fill()函数的作用是创建一个指定长度的、由相同的值组成的数组。具体来说,该函数的语法

Python中的Array模块怎么使用Python中的Array模块怎么使用May 01, 2023 am 09:13 AM

Python中的array模块是一个预定义的数组,因此其在内存中占用的空间比标准列表小得多,同时也可以执行快速的元素级别操作,例如添加、删除、索引和切片等操作。此外,数组中的所有元素都是同一种类型,因此可以使用数组提供的高效数值运算函数,例如计算平均值、最大值和最小值等。另外,array模块还支持将数组对象直接写入和读取到二进制文件中,这使得在处理大量数值数据时更加高效。因此,如果您需要处理大量同质数据,可以考虑使用Python的array模块来优化代码的执行效率。要使用array模块,首先需要

Java中的ArrayStoreException异常的常见原因是什么?Java中的ArrayStoreException异常的常见原因是什么?Jun 25, 2023 am 09:48 AM

在Java编程中,数组是一种重要的数据结构。数组可以在一个变量中存储多个值,更重要的是可以使用索引访问每个值。但是在使用数组时,可能会出现一些异常,其中之一是ArrayStoreException。本文将讨论ArrayStoreException异常的常见原因。1.类型不匹配数组在创建时必须指定元素类型。当我们试图将不兼容的数据类型存储到一个数组中时,就会抛

java中indexof方法有什么用java中indexof方法有什么用May 17, 2023 pm 02:28 PM

indexof方法:注解:indexOf方法返回一个整数值,指出String对象内子字符串的开始位置。如果没有找到子字符串,则返回-1。publicclassIndexOf{publicstaticvoidmain(String[]args){Strings="李宏#王海#林巧#陆寻#唐梅";Stringq="#";//需要查找的字符串Stringerr="*";//不存在的字符串inti=0;for(intj=0;j

PHP array_change_key_case()函数使用方法介绍PHP array_change_key_case()函数使用方法介绍Jun 27, 2023 am 10:43 AM

在PHP编程中,数组是一个经常用到的数据类型。而关于数组的操作函数也是相当多的,其中包括了array_change_key_case()函数。该函数可以将数组中键名的大小写进行转换,从而方便我们进行数据的处理。本文就来介绍一下PHP中array_change_key_case()函数的使用方法。一、函数语法及参数array_change_ke

See all articles

ホット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ヘンタイを無料で生成します。

ホットツール

SublimeText3 中国語版

SublimeText3 中国語版

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

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。