Javascript 判断对象类型的两种方法

2018 年 10 月 6 日 0 条评论 1.93k 次阅读 0 人点赞

在js 中 , 有一种判断数据基本类型的方法 typeof , 只能判断5中基本类型:即 “number”,”string”,”undefined”,”boolean”,”object” 五种,再加上 ES6 中新引入的 Symbol 数据类型。

用法为:

typeof 1
typeof str

console.log(typeof 1)  //打印出 number

typeof 'a' == 'string'    //结果为true

let s = Symbol();
typeof s;  // 'symbol'

可见: typeof 会根据对象类型返回对应的类型字符串, 但是有几个缺点:
对于数组、函数、对象来说,其关系错综复杂,使用 typeof 都会统一返回 “object” 字符串,
null也会返回’object’
对NaN返回是’number’

let a={i:1} let a =[1,2], let a = func...
typeof a //这个结果都是object

var obj = null
if (typeof obj === 'object') {
    obj.a() // 这里报错
}

var obj = {}
var num = parseInt(obj.a)
if (typeof num === 'number') {
    num = num + 10 // 执行后num仍然是NaN
}

 

那么此时我们有第二个方法可以使用, 是 ES3中的 Object.prototype.toString方法,我们可以用Object.prototype.toString.call(obj)检测对象类型:

console.log(Object.prototype.toString.call("jerry"));//[object String]
console.log(Object.prototype.toString.call(12));//[object Number]
console.log(Object.prototype.toString.call(true));//[object Boolean]
console.log(Object.prototype.toString.call(undefined));//[object Undefined]
console.log(Object.prototype.toString.call(null));//[object Null]
console.log(Object.prototype.toString.call({name: "jerry"}));//[object Object]
console.log(Object.prototype.toString.call(function(){}));//[object Function]
console.log(Object.prototype.toString.call([]));//[object Array]
console.log(Object.prototype.toString.call(new Date));//[object Date]
console.log(Object.prototype.toString.call(/\d/));//[object RegExp]
function Person(){};
console.log(Object.prototype.toString.call(new Person));//[object Object]

使用方法如下:

//判断是否为函数
function isFunction(it) {
    return Object.prototype.toString.call(it) === '[object Function]';
}

//判断是否为数组:
function isArray(o) { 
  return Object.prototype.toString.call(o) === '[object Array]';  
}

 

雷雷

这个人太懒什么东西都没留下

文章评论(0)

(Spamcheck Enabled)