Jsにおけるデータ型の一般的な判定方法

typeofどちらもinstanceofデータ型の判定方法で、違いは以下の通りです。

  • typeof変数の基本型を返し、instanceofブール値を返します

  • instanceof 複雑な参照データ型を正確に判断できるが、基本データ型を正しく判断できない

  • また、 typeof デメリットもあります.基本データ型(除く)は判定できますがnull 、参照データ型は function 型以外は判定できません.

上記の 2 つの方法には欠点があり、すべてのシナリオのニーズを満たすことができないことがわかります。

一般的な検出データ型が必要な場合は、それを使用してObject.prototype.toStringこのメ​​ソッドを呼び出し、統一された形式“[object Xxx]” の文字列を返すことができます

次のように:

Object.prototype.toString({})       // "[object Object]"
Object.prototype.toString.call({})  // 同上结果,加上call也ok
Object.prototype.toString.call(1)    // "[object Number]"
Object.prototype.toString.call('1')  // "[object String]"
Object.prototype.toString.call(true)  // "[object Boolean]"
Object.prototype.toString.call(function(){})  // "[object Function]"
Object.prototype.toString.call(null)   //"[object Null]"
Object.prototype.toString.call(undefined) //"[object Undefined]"
Object.prototype.toString.call(/123/g)    //"[object RegExp]"
Object.prototype.toString.call(new Date()) //"[object Date]"
Object.prototype.toString.call([])       //"[object Array]"
Object.prototype.toString.call(document)  //"[object HTMLDocument]"
Object.prototype.toString.call(window)   //"[object Window]"

toStringの基本的な使い方を理解したら、グローバルで一般的なデータ型の判定方法を実装しましょう。

function getType(obj){
  let type  = typeof obj;
  if (type !== "object") {    // 先进行typeof判断,如果是基础数据类型,直接返回
    return type;
  }
  // 对于typeof返回结果是object的,再进行如下的判断,正则返回结果
  return Object.prototype.toString.call(obj).replace(/^\[object (\S+)\]$/, '$1').toLowerCase(); 
}

次のように使用します。

getType([])     // "array" typeof []是object,因此toString返回
getType('123')  // "string" typeof 直接返回
getType(window) // "window" toString返回
getType(null)   // "null",typeof null是object,需toString来判断
getType(undefined)   // "undefined" typeof 直接返回
getType()            // "undefined" typeof 直接返回
getType(function(){}) // "function" typeof 能判断
getType(/123/g)      //"regExp" toString返回

おすすめ

転載: blog.csdn.net/weixin_45346457/article/details/125709544