项目中有可能会遇到判断对象类型。这时候问题就来了~!
大家可能会采用typeof来判断。毕竟是判断类型的老牌方法。
var fn = function(obj){ console.log(obj); } var str = 'string'; var arr = [1,2,3]; var obj = { a:123, b:456 }; var num = 1; var t = true; var n = null; var u = undefined; //方法一使用typeof方法。
console.log(typeof fn);//function
console.log(typeof str);//string
console.log(typeof arr);//object
console.log(typeof obj);//object
console.log(typeof num);//number
console.log(typeof t);//boolean
console.log(typeof n);//null是一个空的对象同样是object
console.log(typeof u);//undefined
这里可以看出来typeof没办法检测Array跟null都是object,所以用typeof并不完美、
这时候大家可能会想不是还有instanceof吗?
下面我们再来看一个简单的小栗子:
var str = '我是String'; str instanceof String //输出--->??
这里的答案是flase,为什么会这样?
instanceof左操作数是一个类,右操作数是标识对象的类。如果左侧的对象是右侧类的实例,则返回true.而js中对象的类是通过初始化它们的构造函数来定义的。即instanceof的右操作数应当是一个函数。所有的对象都是object的实例。如果左操作数不是对象,则返回false,如果右操作数不是函数,则抛出typeError。
怎么才能是true呢?看下面的列子~
var str = new String('我是String'); str instanceof String //输出--->true
下面就是最优得解决方案。利用tostring()来判断。
var obj = { 'name': 'ka~' }; var arr = ['1', '2', 'q']; function fun(name, age) { this.name = name; this.age = age; } var o = new fun('ka~', '24'); console.log(Object.prototype.toString.call(obj)); //[Object Object] console.log(Object.prototype.toString.call(arr)); //[object Array] console.log(Object.prototype.toString.call(o)); //[Object Object]
console.log(Object.prototype.toString.call(null)); //[object Null]
这样就可以完美的判断一个对象的数据类型。
小小笔记,感谢支持。
看了一部分推荐给大家。挺好的。有分销.
wx:wch158759898 买了可以在我这把分销拿走 良心推荐。不是为了挣钱、