ホームページ > 記事 > ウェブフロントエンド > JavaScript 変数が配列かオブジェクトかを判断する方法 回答コードの詳細な説明
JavaScript 変数が配列であるかオブジェクトであるかを判断するにはどうすればよいですか?
答え:
1. typeof を使用して変数をチェックすると、それが配列であってもオブジェクトであっても、「objec」が返されます。
この質問に対する考えられる答えは、変数がオブジェクトであるかどうかを確認し、変数が数値の長さを持っているかどうかを確認することです (空の配列の場合、長さは 0 になる可能性もあります)。
ただし、パラメーター オブジェクト [引数オブジェクト] (指定された関数に渡されるすべてのパラメーター) も上記のメソッドに適用できます。技術的に言えば、パラメーター オブジェクトは配列ではありません。
さらに、オブジェクトに .length 属性がある場合、このメソッドは機能しません。
// Real array 正在的数组 var my_array = []; // Imposter! 冒名顶替的! var my_object = {}; my_object.length = 0; // Potentially faulty 潜在的错误 function is_this_an_array(param) { if (typeof param === 'object' && !isNaN(param.length)) { console.log('Congrats, you have an array!'); } else { console.log('Bummer, not an array'); } } // Works 成功 is_this_an_array(my_array); // Works, but is incorrect 成功了,但是不正确 is_this_an_array(my_object);
2. この質問に対するもう 1 つの答えは、toString() メソッドを呼び出して、変数をその型を表す文字列に変換するという、より巧妙なメソッドを使用することです。
このメソッドは実数の配列に対して実行可能です。パラメータ オブジェクトが文字列に変換され、[object Arguments] が返されると、変換は失敗します。また、
数値の長さの属性を含むオブジェクト クラスの場合も変換は失敗します。
// Real array 真正的数组 var my_array = []; // Imposter! 冒名顶替的! var my_object = {}; my_object.length = 0; // Rock solid 坚如磐石(检验函数) function is_this_an_array(param) { if (Object.prototype.toString.call(param) === '[object Array]') { console.log('Congrats, you have an array!'); } else { console.log('Bummer, not an array'); } } // Works 成功了 is_this_an_array(my_array); // Not an array, yay! 不是数组(array)! is_this_an_array(my_object);
3. さらに、instanceof は、信頼性が低い可能性があるマルチフレーム DOM 環境に最適な操作です。
var my_array = []; if (my_array instanceof Array) { console.log('Congrats, you have an array!'); }
4. Javascript 1.8.5 (ECMAScript 5) の場合、変数名 .isArray() でこの目的を達成できます
var my_array = []; if (Array.isArray(my_array)) { console.log('Congrats, you have an array!'); }
以上がJavaScript 変数が配列かオブジェクトかを判断する方法 回答コードの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。