Several methods of judging data type by javascript
I. typeof directly returns data type fields, but cannot judge array, null, or object
typeof 1 "number" typeof NaN "number" typeof "1" "string" typeof true "boolean" typeof undefined "undefined" typeof null "object" typeof [] "object" typeof {} "object"
Where null, [], {} all return "object"
2. instanceof determines whether an instance belongs to the prototype
// Constructor function Fruit(name, color) { this.name = name; this.color = color; } var apple = new Fruit("apple", "red"); // (apple != null) apple instanceof Object // true apple instanceof Array // false
III. use Object.prototype.toString.call() to judge
call() method can change the direction of this. Then point the Object.prototype.toString() method to different data types and return different results
Object.prototype.toString.call(1) "[object Number]" Object.prototype.toString.call(NaN); "[object Number]" Object.prototype.toString.call("1"); "[object String]" Object.prototype.toString.call(true) "[object Boolean]" Object.prototype.toString.call(null) "[object Null]" Object.prototype.toString.call(undefined) "[object Undefined]" Object.prototype.toString.call(function a() {}); "[object Function]" Object.prototype.toString.call([]); "[object Array]" Object.prototype.toString.call({}); "[object Object]"
Finally, we can define a perfect method to judge data type
function _typeof(obj){ var s = Object.prototype.toString.call(obj); return s.match(/\[object (.*?)\]/)[1].toLowerCase(); }; _typeof([12,3,343]); "array" _typeof({name: 'zxc', age: 18}); "object" _typeof(1); "number" _typeof("1"); "string" _typeof(null); "null" _typeof(undefined); "undefined" _typeof(NaN); "number" _typeof(Date); "function" _typeof(new Date()); "date" _typeof(new RegExp()); "regexp"