JavaScriptは、変数が配列であるかオブジェクトであるかをどのように判断しますか

タイプのターゲットインスタンス

注:プリミティブ型と関数を除いて、すべてがオブジェクトであるため、typeofは使用できません。(nullを含む);配列はオブジェクトのサブクラスに属しているため、テストにオブジェクトを使用しないでください 

var a = {}
var b = []

// 【注意】不要用Object来测试,因为Array属于Object的子类
console.log(a instanceof Array) //false
console.log(b instanceof Array) //true

target.constructor

各インスタンスはプロトタイプのプロパティを継承し、プロトタイプのコンストラクタープロパティは独自のコンストラクターを指すため、カスタムクラスを表示できます。

var a = {}
var b = []

console.log(a.constructor) // [Function: Object]
console.log(b.constructor) //[Function: Array]

Object.prototype.toString.call(target)

1.各オブジェクトには、オブジェクトのタイプを出力するためのデフォルトのtoString関数が付属しています

2.ただし、一部のカスタムオブジェクトはtoStringを書き換える場合があります。したがって、元のオブジェクトプロトタイプから呼び出してから、callを使用してこの環境を置き換えます。

3.カスタムクラスを表示できません。すべてオブジェクトが表示されます

var a = {}
var b = []

console.log(Object.prototype.toString.call(a)) // [object Object]
console.log(Object.prototype.toString.call(b)) // [object Array]

 

 

転載元:https//www.wolai.com/mary/rPktXJ2xocawfXnX1vqTeD

おすすめ

転載: blog.csdn.net/wanghongpu9305/article/details/114127251