変数が配列かオブジェクトかどうかを判断しますか?
8925 ワード
方法1:変数の種類を判断し、変数のlength属性(例外としてargmentsオブジェクトがある場合を除き、関数にパラメータを送るとデータが格納される場所)
var arr=[2,3,4];
var obj={"name":"maomao","age":20};
console.log(typeof arr); //object
console.log(typeof obj); //object
console.log(arr.length); //3
console.log(obj.length); //undefined
console.log(obj.name); //maomao
// length , 。
方法2:toString法を用いてオブジェクトを他の種類のstringに変換し、この例ではargmentsオブジェクトが配列ではなく、オブジェクトであることがよく証明されている. var arr=[2,3,4];
var obj={"name":"maomao","age":20};
// console.log(arr.toString()); //'2,3,4'
// console.log(obj.toString()); //[object Object]
function sum(a,b){
// console.log(arguments);
// console.log(typeof arguments); //object
// console.log(arguments.length); //2
// console.log(arguments.toString()); //[object Arguments]
return a+b;
}
alert(sum(3,4));
方法3:->実行不可能なinstance ofは、オブジェクトが特定のクラスの一例であるかどうかを指摘する.結論:instance ofは、オブジェクトAが別のオブジェクトBの例であるかどうかを検出する原理は、オブジェクトBのprototypeが指すオブジェクトがオブジェクトAの[prototype]チェーン上にあるかを確認することである.もしいるなら、trueに戻り、いないならfalseに戻ります.ただし、オブジェクトBのプロトタイプがnullである場合はエラーが発生します. var arr=[2,3,4,"haa"];
var obj={"name":"maomao","age":20};
console.log(arr instanceof Array); //true
console.log(obj instanceof Object); //true
console.log(arr instanceof Object); //true
--- ,
console.log(obj instanceof Array); //false
4、ECMAScript 5ではisArayで判断できます. var arr=[2,3,4,"haa"];
var obj={"name":"maomao","age":20};
console.log(Array.isArray(arr)); //true
console.log(Array.isArray(obj)); //false
// isObject
5、isProttypeOf()関数原理を使用して、オブジェクトがArayのプロトタイプであるかどうかを検出する(またはプロトタイプチェーン内にあるかを検出することができ、直接の親オブジェクトだけでなく、プロトタイプチェーン上のすべての親オブジェクトを検出することもできます)使用方法:parent.isProttypeOf(child)を検出して、parentがchildのプロトタイプであるかどうかを検出します.なお、isPrototypeOf()関数で実現される機能は、instancof演算子と非常に類似しています. var arr=[2,3,4,"haa"];
var object={"name":"maomao","age":20};
console.log(Array.prototype.isPrototypeOf(arr)); //true
console.log(Array.prototype.isPrototypeOf(object)); //false
console.log(Object.prototype.isPrototypeOf(arr)); //true console.log(Object.prototype.isPrototypeOf(object)); //true
// Array.prototype.isPrototypeOf()
6、constructorの属性を使うvar arr=[2,3,4,"haa"];
var obj={"name":"maomao","age":20};
console.log(arr.constructor); //function Array() { [native code] }
console.log(obj.constructor); //function Object() { [native code] }
console.log(arr.constructor==Array); //true
console.log(arr.constructor==Object); //false
console.log(obj.constructor==Array); //false
console.log(obj.constructor==Object); //true
7、concat方法を使用します.フレキシブルなアレー、array.co ncat(配列1、配列2、…)は新しい配列を返します.この新しい配列は2つ以上の配列からなります.var arr=[2,3,4];
var obj={"name":"maomao","age":20,'concat':function(){ return 1;}};
console.log(arr.concat()); //[2,3,4]
console.log(obj.concat()); //1 concat , 。 Uncaught TypeError: obj.concat is not a function 。