使用typeof obj===‘object’潜在的问题,并不能确定obj是否是一个对象?
在js中我们直接这样写typeof obj === ‘object’ 有什么问题呢?例如下列情况下:
typeof []; //object
typeof {}; //object
typeof null; //object可以看出Array, Object等都会返回的是'object',而且js中令人惊讶的null也被认为是一个对象了! 由此可见使用typeof obj===‘object’并不能准确的判断变量是否为object。为了解决上述情况,我们可以这样来写就能保证判断obj是否为一个对象了。
方法一:
if( (obj !== null) && (typeof obj === "object") && (toString.call( obj ) !== "[object Array]")){
//code
}方法二:
上面代码就分别判断了obj不能为null,数组的情况,还有一个替代方法对空值,数组和函数返回false,但对于对象则为true的方法。
if( (obj !== null) && (obj.constructor === Object)) {
//code
}方法三:
如果你使用jquery,可以这样写:
if( (obj !== null) && (typeof obj === "object") && (! $.isArray( obj )) ){
//code
}方法四:
使用Object.prototype.toString.call(obj) === "[object Object]" 来判断obj是否为对象,这也是我们项目中最常用的方法,先看下上述三种情况:
console.log(Object.prototype.toString.call({})); //[object Object]
console.log(Object.prototype.toString.call([])); //[object Array]
console.log(Object.prototype.toString.call(null)); //[object Null]可以看出返回是完全不同,可以放心使用了:
if( Object.prototype.toString.call(obj) === "[object Object]"){
//code
}本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!