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

伊谢尔伦
リリース: 2017-07-18 13:19:49
オリジナル
1053 人が閲覧しました

演算子の種類。

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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート