JavaScriptは変数が配列かオブジェクトかをどう判断しますか?
3543 ワード
編集
方法1:変数の種類を判断し、変数のlength属性(例外としてargmentsオブジェクトがある場合を除き、関数にパラメータを送るとデータが格納される場所)
6、constructorの属性を使う
var arr=[2,3,4]「haa」var obj={「name」:「maomao」,「age」:20}.consolie.log(arr.com nstructor)//function Aray(){native code}consosolie.log(obj.com nstructor)//function Object(){native code}consolone.log(arr.com nstructor==Aray)//true consone.log(arr.com nstructor==Object);falseconsone.logs(obj.com nstructor==Aray);falseconsone.logs(obj.com nstructor==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;}consolie.log(arr.co ncat)//[2,3,4]consolie.log(obj.co ncat)/.1もちろんこのconcatは私が自分で決めた方法です.戻り値もカスタマイズできます.この方法がないとUncaght TypeErr:obj.co ncas is not a functionというエラーが発生します.webフロントエンドJavaScript学習群618522268
方法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));
webフロントエンドJavaScript学習グループ:618522268方法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
//上から見るとAray.prototype.isProttypeOf()が判断の根拠となります.6、constructorの属性を使う
var arr=[2,3,4]「haa」var obj={「name」:「maomao」,「age」:20}.consolie.log(arr.com nstructor)//function Aray(){native code}consosolie.log(obj.com nstructor)//function Object(){native code}consolone.log(arr.com nstructor==Aray)//true consone.log(arr.com nstructor==Object);falseconsone.logs(obj.com nstructor==Aray);falseconsone.logs(obj.com nstructor==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;}consolie.log(arr.co ncat)//[2,3,4]consolie.log(obj.co ncat)/.1もちろんこのconcatは私が自分で決めた方法です.戻り値もカスタマイズできます.この方法がないとUncaght TypeErr:obj.co ncas is not a functionというエラーが発生します.webフロントエンドJavaScript学習群618522268