ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScriptで配列型を検出するにはどのような方法が使用されますか?

JavaScriptで配列型を検出するにはどのような方法が使用されますか?

伊谢尔伦
伊谢尔伦オリジナル
2017-07-18 13:19:491007ブラウズ

演算子の種類。

Function、String、Number、Unknown 型のオブジェクトには問題ありませんが、Array オブジェクトには使用できません:

alert(typeof null); // "object" 
alert(typeof []); // "object"

instanceof

グローバル実行が 1 つだけの場合 これは、複数のフレームが含まれる場合、配列コンストラクターのバージョンが 2 つ以上存在することになり、配列が 1 つのフレームから別のフレームに渡されると、渡された配列は 2 番目のフレームでネイティブに作成された配列と同じ特性を持ちます。コンストラクターが異なれば型も異なります


if (value instanceof Array) {
  //对数组执行某项操作   
}

Array.isArray() メソッド

ES5 以降では、IE9 以降、Firefox 4 以降、Safari 5 以降、Opera 10.5 以降、Chrome のみをサポートします


if (Array.isArray(value)) {
  //对数组执行某些操作 
}

Object.prototype.toString.call() メソッド

すべての環境に適用され、ネイティブ オブジェクトのみをサポートします。オブジェクトの toString() メソッドは、非ネイティブ コンストラクターのコンストラクター名を検出できません。開発者によってカスタマイズされたコンストラクターは、[object Object] を返します

原則: 任意の値で Object のネイティブ toString() メソッドを直接呼び出すと、[object NativeConstrctorName] 形式の文字列が返され、各クラス内で使用できます。属性。上記の文字列でコンストラクターの名前を指定します。


var value = []
console.log(Object.prototype.toString.call(value))//"[Object Array]"

ネイティブ配列のコンストラクター名はスコープとは関係がないため、toString() メソッドを使用すると、同じ値が確実に出力されます。

オブジェクト独自の toString() メソッドを使用してみてはいかがでしょうか?


var value = []
console.log(value.toString())//" "
value = ['pp','oo']
console.log(value.toString())//"pp,oo"
value = ['pp',"oo"]
console.log(Object.prototype.toString.call(value))//[object Array]

Array の tostring() メソッドがオーバーライドされているため (これは多くのネイティブ オブジェクトに当てはまります)、独自のコンストラクターで toString() メソッドを呼び出し、他の文字列を返します

これを使用することもできますメソッド ネイティブ関数か正規表現かを判断するには


function isFunction(value){
    return Object.prototype.toString.call(value) === “[object Function]”
}//不适用于IE中以COM对象实现的任何函数
function isRegExp(value){
    return Object.prototype.toString.call(value) === “[object RegExp]”
}

オブジェクトのコンストラクタ属性

instanceofに加えて、各オブジェクトのコンストラクタ属性を使用してその型を判断することもできます。私たちはこれを行うことができます:

var arr = []; 
alert(arr.constructor == Array); // true

最後の 2 つの解決策は完璧であるように見えますが、本当にそうなのでしょうか?予期せぬ状況が発生し、複数のフレーム間を行き来すると、イライラする問題が発生します:

var iframe = document.createElement('iframe'); 
document.body.appendChild(iframe); 
xArray = window.frames[window.frames.length-1].Array; 
var arr = new xArray(1,2,3); // [1,2,3] 
// 哎呀! 
arr instanceof Array; // false 
// 哎呀呀! 
arr.constructor === Array; // false

各 iframe には独自の実行環境セットがあるため、フレーム間でインスタンス化されたオブジェクトが相互に共有されず、その結果、プロトタイプ チェーンが発生します。上記の検出コードは失敗します。どうやってどうやってやるの? ?そうです、JavaScript は動的言語です。「アヒルのように歩き、アヒルのように鳴く場合は、同じ理由でアヒルとして扱うことができます。これは、ユニークな能力を検出することができます。」このメソッドは、Prototype フレームワークなど、一部の人々によって使用されています。このメソッドが実装する Object.isArray メソッドを見てみましょう。

以上がJavaScriptで配列型を検出するにはどのような方法が使用されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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