AI智能
改变未来

JavaScript 判断数据类型的4种方法

本文提供四种方法判断js数据类型,这里记录了它们之间的差异,分别是 typeof 运算符、instanceof 运算符、constructor 属性、Object.prototype.toString 方法。

一、使用 typeof 判断数据类型

console.log(\'测试 Number ->\', typeof 1); // numberconsole.log(\'测试 Boolean ->\', typeof true); // booleanconsole.log(\'测试 String ->\', typeof \'\'); // stringconsole.log(\'测试 null ->\', typeof null); // objectconsole.log(\'测试 undefined ->\', typeof undefined); // undefinedconsole.log(\'测试 NaN ->\', typeof NaN); // numberconsole.log(\'测试 function ->\', typeof function () { }); // functionconsole.log(\'测试 Object ->\', typeof {}); // objectconsole.log(\'测试 Array ->\', typeof []); // objectconsole.log(\'测试 Date ->\', typeof new Date()); // objectconsole.log(\'测试 Error ->\', typeof new Error()); // objectconsole.log(\'测试 RegExp ->\', typeof new RegExp()); // objectconsole.log(\'测试 Symbol ->\', typeof Symbol()); // symbolconsole.log(\'测试 Map ->\', typeof new Map()); // objectconsole.log(\'测试 Set ->\', typeof new Set()); // object

控制台输出如下:

测试 Number -> number
测试 Boolean -> boolean
测试 String -> string
测试 null -> object
测试 undefined -> undefined
测试 NaN -> number
测试 function -> function
测试 Object -> object
测试 Array -> object
测试 Date -> object
测试 Error -> object
测试 RegExp -> object
测试 Symbol -> symbol
测试 Map -> object
测试 Set -> object

总结:

1、typeof只能判断:

  • String(返回string),
  • Number(返回number),
  • Boolean(返回boolean),
  • undefined(返回undefined),
  • function(返回function),
  • Symbol(返回symbol)

2、对于new构造出来的都是返回object

3、对于Object和Array都是返回object

二、使用 instanceof 判断数据类型

console.log(\'测试 Number ->\', 1 instanceof Number); // falseconsole.log(\'测试 Boolean ->\', true instanceof Boolean); // falseconsole.log(\'测试 String ->\', \'\' instanceof String); // false// console.log(\'测试 null ->\', null instanceof null); // TypeError: Cannot read property \'constructor\' of null// console.log(\'测试 undefined ->\', undefined instanceof undefined); // TypeError: Cannot read property \'constructor\' of undefinedconsole.log(\'测试 NaN ->\', NaN instanceof Number); // falseconsole.log(\'测试 function ->\', function () { } instanceof Function); // trueconsole.log(\'测试 Object ->\', {} instanceof Object); // trueconsole.log(\'测试 Array ->\', [] instanceof Array); // trueconsole.log(\'测试 Date ->\', new Date() instanceof Date); // trueconsole.log(\'测试 Error ->\', new Error() instanceof Error); // trueconsole.log(\'测试 RegExp ->\', new RegExp() instanceof RegExp); // trueconsole.log(\'测试 Symbol ->\', Symbol() instanceof Symbol); // falseconsole.log(\'测试 Map ->\', new Map() instanceof Map); // trueconsole.log(\'测试 Set ->\', new Set() instanceof Set); // trueconsole.log(\'测试 new Number ->\', new Number(1) instanceof Number); // trueconsole.log(\'测试 new Boolean ->\', new Boolean(true) instanceof Boolean); // trueconsole.log(\'测试 new String ->\', new String(\'\') instanceof String); // true

控制台输出如下:

测试 Number -> false
测试 Boolean -> false
测试 String -> false
测试 NaN -> false
测试 function -> true
测试 Object -> true
测试 Array -> true
测试 Date -> true
测试 Error -> true
测试 RegExp -> true
测试 Symbol -> false
测试 Map -> true
测试 Set -> true
测试 new Number -> true
测试 new Boolean -> true
测试 new String -> true

总结:

1、不能判断 null,undefined

2、基本数据类型 Number,String,Boolean 不能被判断

3、instanceof 用来判断对象是否为某一数据类型的实例,
上例中1,true,\’\’不是实例,所以判断为false

三、使用 constructor 判断数据类型

console.log(\'测试 Number ->\', (1).constructor === Number); // trueconsole.log(\'测试 Boolean ->\', true.constructor === Boolean); // trueconsole.log(\'测试 String ->\', \'\'.constructor === String); // true// console.log(\'测试 null ->\', null.constructor === null); // TypeError: Cannot read property \'constructor\' of null// console.log(\'测试 undefined ->\', undefined.constructor); // TypeError: Cannot read property \'constructor\' of undefinedconsole.log(\'测试 NaN ->\', NaN.constructor === Number); // true 注意:NaN和infinity一样是Number类型的一个特殊值console.log(\'测试 function ->\', function () { }.constructor === Function); // trueconsole.log(\'测试 Object ->\', {}.constructor === Object); // trueconsole.log(\'测试 Array ->\', [].constructor === Array); // trueconsole.log(\'测试 Date ->\', new Date().constructor === Date); // trueconsole.log(\'测试 Error ->\', new Error().constructor === Error); // trueconsole.log(\'测试 RegExp ->\', new RegExp().constructor === RegExp); // trueconsole.log(\'测试 Symbol ->\', Symbol().constructor === Symbol); // trueconsole.log(\'测试 Map ->\', new Map().constructor === Map); // trueconsole.log(\'测试 Set ->\', new Set().constructor === Set); // true

控制台输出如下:

测试 Number -> true
测试 Boolean -> true
测试 String -> true
测试 NaN -> true
测试 function -> true
测试 Object -> true
测试 Array -> true
测试 Date -> true
测试 Error -> true
测试 RegExp -> true
测试 Symbol -> true
测试 Map -> true
测试 Set -> true

总结:

不能判断null,undefined,其它的都可以

四、使用 Object.prototype.toString 判断数据类型

console.log(\'测试 Number ->\', Object.prototype.toString.call(1)); // [object Number]console.log(\'测试 Boolean ->\', Object.prototype.toString.call(true)); // [object Boolean]console.log(\'测试 String ->\', Object.prototype.toString.call(\'\')); // [object String]console.log(\'测试 null ->\', Object.prototype.toString.call(null)); // [object Null]console.log(\'测试 undefined ->\', Object.prototype.toString.call(undefined)); // [object Undefined]console.log(\'测试 NaN ->\', Object.prototype.toString.call(NaN)); // [object Number]console.log(\'测试 function ->\', Object.prototype.toString.call(function () { })); // [object Function]console.log(\'测试 Object ->\', Object.prototype.toString.call({})); // [object Object]console.log(\'测试 Array ->\', Object.prototype.toString.call([])); // [object Array]console.log(\'测试 Date ->\', Object.prototype.toString.call(new Date())); // [object Date]console.log(\'测试 Error ->\', Object.prototype.toString.call(new Error())); // [object Error]console.log(\'测试 RegExp ->\', Object.prototype.toString.call(new RegExp())); // [object RegExp]console.log(\'测试 Symbol ->\', Object.prototype.toString.call(Symbol())); // [object Symbol]console.log(\'测试 Map ->\', Object.prototype.toString.call(new Map())); // [object Map]console.log(\'测试 Set ->\', Object.prototype.toString.call(new Set())); // [object Set]

控制台输出如下:

测试 Number -> [object Number]
测试 Boolean -> [object Boolean]
测试 String -> [object String]
测试 null -> [object Null]
测试 undefined -> [object Undefined]
测试 NaN -> [object Number]
测试 function -> [object Function]
测试 Object -> [object Object]
测试 Array -> [object Array]
测试 Date -> [object Date]
测试 Error -> [object Error]
测试 RegExp -> [object RegExp]
测试 Symbol -> [object Symbol]
测试 Map -> [object Map]
测试 Set -> [object Set]

总结:

目前最完美的判断数据类型的方法

结语:以上为笔者的测试和总结。如有误或不完整地方,欢迎各位老铁指正。

以上就是JavaScript 判断数据类型的4种方法的详细内容,更多关于JavaScript判断数据类型的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:

  • JavaScript事件循环及宏任务微任务原理解析
  • JS事件循环机制event loop宏任务微任务原理解析
  • JavaScript常用工具函数库汇总
  • 关于JavaScript数组去重的一些理解汇总
  • 谈谈JavaScript中的函数
  • 浅析JavaScript 函数柯里化
  • JavaScript 事件代理需要注意的地方
  • 浅谈javascript事件环微任务和宏任务队列原理
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » JavaScript 判断数据类型的4种方法