交通设施东莞网站建设,深圳人社局官网,网站图标代码,手机响应式网站建设公司一、typeof
在 JavaScript 里使用 typeof 来判断数据类型#xff0c;只能区分基本类型#xff0c;即 “number”#xff0c;”string”#xff0c;”undefined”#xff0c;”boolean”#xff0c;”object” 五种。 对于数组、对象来说#xff0c;其关系错综复杂…一、typeof
在 JavaScript 里使用 typeof 来判断数据类型只能区分基本类型即 “number””string””undefined””boolean””object” 五种。 对于数组、对象来说其关系错综复杂使用 typeof 都会统一返回 “object” 字符串。
typeof {} //objecttypeof [] //object要想区别对象、数组单纯使用 typeof 是不行的。或者你会想到 instanceof 方法。
二、instanceof
instanceof是javaScript中的一种运算符,用于判断某个对象是否属于某个类(或其父类)的实例,
console.log({} instanceof Object) //trueconsole.log([] instanceof Object) //trueconsole.log(function () {} instanceof Object) //true上面代码发现都是 Object 的实例
所以要判断复合数据类型要如下判断
//对象
({} instanceof Object) !({} instanceof Function) !({} instanceof Function)//数组
([] instanceof Object) ([] instanceof Array)//函数
(function () {} instanceof Object) (function () {} instanceof Function)虽然 instanceof 运算符在某些情况下可以很方便地判断对象所属的类但是在实际开发中需要注意其局限性并结合其他方法和技巧来进行类型判断。
三、Object.prototype.toString.call()
更简便的方式即是使用 Object.prototype.toString.call() 来确定类型。
由于 JavaScript 中一切都是对象任何都不例外对所有值类型应用 Object.prototype.toString.call() 方法
对于 Object.prototype.toString() 方法会返回一个形如 “[object XXX]” 的字符串。
如果对象的 toString() 方法未被重写就会返回如上面形式的字符串。
toString()为Object的原型方法而Arrayfunction等类型作为Object的实例都重写了toString方法。不同的对象类型调用toString方法时根据原型链的知识调用的是对应的重写之后的toString方法。
Call是一个允许您更改另一个函数上下文的函数。
对于 Object.prototype.toString.call(arg)若参数为 null 或 undefined直接返回结果。
若参数不为 null 或 undefined则将参数转为对象再作判断。
//编写一个函数判断所有数据类型
function _typeof(item) {let res Object.prototype.toString.call(item);res res.split( )[1];res res.substr(0, res.length - 1);return res;
}效果如下
console.log(_typeof(123));//Numberconsole.log(_typeof(abc));//Stringconsole.log(_typeof(true));//Booleanconsole.log(_typeof(null));//Nullconsole.log(_typeof(undefined));//Undefinedvar fun function () {}
console.log(_typeof(fun));//Functionvar arr [1, 2, 3]
console.log(_typeof(arr));//Arrayvar obj {name: jack,age: 20
}
console.log(_typeof(obj));//Object