1. typeof 演算子。関数、文字列、数値、未定義などのいくつかのタイプのオブジェクトに対しては完全に機能しますが、配列
var arr=new Array("1","2","3","4", "5");
alert(typeof(arr));
少し残念なオブジェクトの応答が返されます。 JavaScript の演算子は、オブジェクトが特定のクラスのインスタンスであるかどうかを示すブール値を返します。
使用方法: result = object instanceof class、まだ配列です。もう一度試してください。
var arrayStr=new Array("1","2","3","4","5"); alter(arrayStr instanceof Array );
簡単な要約: 今日議論した質問は解決されたように見えますが、実際には、複数のフレーム間の往復は大きな問題を引き起こします。
コード
コードをコピー
コードは次のとおりです: var iframe = document。 createElement('iframe' ); document.body.appendChild(iframe);
xArray = window.frames[window.frames.length-1].Array;
var arr = new xArray ","2" ,"3","4","5");//この書き込み方法は IE ではサポートされておらず、FF のみが
alert(arr instanceof Array); // false
alert (arr.constructor === Array); // false
返される結果は 2 つの False ですが、これは残念です。
ECMA-262 writes
Object.prototype.toString() toString メソッドが呼び出されると、次の手順が実行されます。
1. このオブジェクトの [[Class]] プロパティを取得します。
2. 3 つの文字列「[object "、結果 (1)、および "]" を連結して文字列値を計算します。
3. 結果を返します (2)
上記の仕様は Object を定義します。のprototype.toString: まず、オブジェクトの内部プロパティ[[Class]]を取得し、このプロパティに基づいて結果として「[object Array]」のような文字列を返します(ECMA標準を読んだことがある人は知っているはずです)つまり、[[]] は、言語の内部で使用され、外部から直接アクセスできない属性 (「内部属性」と呼ばれます) を表すために使用されます。このメソッドを呼び出しと組み合わせて使用すると、任意のオブジェクトの内部属性 [[Class]] を取得し、型検出を文字列比較に変換して目的を達成できます。まず ECMA 標準における配列の説明を見てみましょう:
ECMA-262 writes
new Array([ item0[, item1 [,…]]])
The [[Class]] プロパティ
新しく構築されたオブジェクトの が「Array」に設定されるので、これを利用して 3 番目の方法が登場します。
function isArray(obj) {
return Object.prototype.toString.call(obj) === '[object Array]';
} 呼び出しにより、toString の this 参照が検出されるオブジェクトに変更されます。次に、このオブジェクトの文字列表現が比較され、この文字列が '[object Array]' であるかどうかが確認され、Array のインスタンスであるかどうかが判断されます。もしかしたら、なぜ直接 o.toString() を使用しないのかと疑問に思われるかもしれません。まあ、Array は Object を継承していますが、toString メソッドも持ちますが、このメソッドは書き換えられて要件を満たさなくなる可能性があります。また、Object.prototype は虎の尻であり、あえて触ろうとする人はほとんどいません。ある程度の「純度」を保証できます:)
以前のソリューションとは異なり、この方法はクロスフレームオブジェクト構築の問題を非常にうまく解決します。テスト後、主要なブラウザの互換性も非常に優れているため、安心してご利用いただけます。良いニュースとしては、jQuery、Base2 などの多くのフレームワークが、このメソッドを使用して、配列、正規表現などの特定の種類の特別なオブジェクトを、自分で作成することなく実装することを計画していることです。
さらに、Ext3 もこのように書かれています
コードをコピーします
コードは次のとおりです。 isArray : function(v){ return toString.apply(v) === '[オブジェクト配列]'
}
;