美文网首页JavaScript 工具方法集合
JS 数据类型判断方法 (typeof, instanceof,

JS 数据类型判断方法 (typeof, instanceof,

作者: 枫_d646 | 来源:发表于2018-01-19 15:44 被阅读0次
1.使用 typeof 操作符 ,返回传入对象对应的类型

function judgeType1 (obj) {
    if (obj === null) return "null";                           
    if (Array.isArray(obj)) return "array";
    return (typeof obj);
}

注:函数返回一个字符串,表示传入参数所对应的类型。( 如:传入1,返回 "number" ; 传入"love",返回 "string" ; 传入 [1,255,66] ,返回 "array" 等 )

      (1) typeof 123 === "number"
      (2) typeof  ''fff" === "string"
      (3) typeof  true === "boolean"
      (4) typeof  undefined === "undefined"
      (5) typeof  null === "object"
      (6) typeof  [1,3,45] === "object"
      (7) typeof {name:"34"} === "object"
      (8) typeof funtion () {} === "function"

2.使用 instanceof 操作符,返回传入对象对应的类型

function judgeType2 (obj) {
     if (obj === null) return "null";
     if (obj instanceof Array)  return "array";
     return (typeof obj);
}
3.使用 Object.prototype.toString, 返回传入对象对应的类型

function judgeType2 (obj) {
    return Object.prototype.toString.call(obj).slice(8,-1).toLowerCase();
}

    (1) Object.prototype.toString.call(undefined) === "[object Undefined]"
    (2) Object.prototype.toString.call(null) === "[object Null]"  
    (3) Object.prototype.toString.call(123) === "[object Number]"
    (4) Object.prototype.toString.call('fff') === "[object String]"
    (5) Object.prototype.toString.call(true) === "[object Boolean]"
    (6) Object.prototype.toString.call([12,45]) === "[object Array]"
    (7) Object.prototype.toString.call({age:12}) === "[object Object]"
    (8) Object.prototype.toString.call(function(){}) === "[object Function]"
    (9) Object.prototype.toString.call(Math) === "[object Math]"
Object.prototype.toString.call(value)

数值:                   [object Number]
字符串:                [object String]
布尔值:                [object Boolean]
undefined:           [object Undefined]
null:                     [object Null]
数组:                    [object Array]
arguments对象:      [object Arguments]
函数:                    [object Function]
Error对象:            [object Error]
Date对象:             [object Date]
RegExp对象:        [object RegExp]
其他对象:             [object Object]
4.使用 Object.prototype.toString 和 正则表达式组匹配

function getType (o){
          var s = Object.prototype.toString.call(o);
        return s.match(/\[object (.*)\]/)[1].toLowerCase();
}
注意:
       1 使用 Object.prototype.toString.call(o) 把传入参数转化为了其对应的类型字符串
       2 使用字符串的 match 方法以及 正则表达式的组匹配 取得了传入参数对应的类型. (返回的是正则表达式中小括号里匹配的内容)

getType({});                        // "object"
getType([]);                        // "array"
getType(5);                        // "number"
getType(null);                    // "null"
getType();                         // "undefined"
getType(/abcd/);               // "regex"
getType(new Date());       //"date"
5.ES6 通过 Symbol.toStringTag 能修改 Object.prototype.toString 方法返回的类型字符串
const myDate = new Date();
Object.prototype.toString.call(myDate);     // [object Date]

myDate[Symbol.toStringTag] = 'myDate';
Object.prototype.toString.call(myDate);     // [object myDate]

Date.prototype[Symbol.toStringTag] = 'prototype polluted';
Object.prototype.toString.call(new Date()); // [object prototype polluted]

相关文章

网友评论

    本文标题:JS 数据类型判断方法 (typeof, instanceof,

    本文链接:https://www.haomeiwen.com/subject/jcaooxtx.html