JavaScript 判断数据类型的4种方法
本文提供四种方法判断js数据类型,这里记录了它们之间的差异,分别是typeof运算符、instanceof运算符、constructor属性、Object.prototype.toString方法。
一、使用typeof判断数据类型
console.log('测试Number->',typeof1);//number console.log('测试Boolean->',typeoftrue);//boolean console.log('测试String->',typeof'');//string console.log('测试null->',typeofnull);//object console.log('测试undefined->',typeofundefined);//undefined console.log('测试NaN->',typeofNaN);//number console.log('测试function->',typeoffunction(){});//function console.log('测试Object->',typeof{});//object console.log('测试Array->',typeof[]);//object console.log('测试Date->',typeofnewDate());//object console.log('测试Error->',typeofnewError());//object console.log('测试RegExp->',typeofnewRegExp());//object console.log('测试Symbol->',typeofSymbol());//symbol console.log('测试Map->',typeofnewMap());//object console.log('测试Set->',typeofnewSet());//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->',1instanceofNumber);//false console.log('测试Boolean->',trueinstanceofBoolean);//false console.log('测试String->',''instanceofString);//false //console.log('测试null->',nullinstanceofnull);//TypeError:Cannotreadproperty'constructor'ofnull //console.log('测试undefined->',undefinedinstanceofundefined);//TypeError:Cannotreadproperty'constructor'ofundefined console.log('测试NaN->',NaNinstanceofNumber);//false console.log('测试function->',function(){}instanceofFunction);//true console.log('测试Object->',{}instanceofObject);//true console.log('测试Array->',[]instanceofArray);//true console.log('测试Date->',newDate()instanceofDate);//true console.log('测试Error->',newError()instanceofError);//true console.log('测试RegExp->',newRegExp()instanceofRegExp);//true console.log('测试Symbol->',Symbol()instanceofSymbol);//false console.log('测试Map->',newMap()instanceofMap);//true console.log('测试Set->',newSet()instanceofSet);//true console.log('测试newNumber->',newNumber(1)instanceofNumber);//true console.log('测试newBoolean->',newBoolean(true)instanceofBoolean);//true console.log('测试newString->',newString('')instanceofString);//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
测试newNumber->true
测试newBoolean->true
测试newString->true
总结:
1、不能判断null,undefined
2、基本数据类型Number,String,Boolean不能被判断
3、instanceof用来判断对象是否为某一数据类型的实例,
上例中1,true,''不是实例,所以判断为false
三、使用constructor判断数据类型
console.log('测试Number->',(1).constructor===Number);//true console.log('测试Boolean->',true.constructor===Boolean);//true console.log('测试String->',''.constructor===String);//true //console.log('测试null->',null.constructor===null);//TypeError:Cannotreadproperty'constructor'ofnull //console.log('测试undefined->',undefined.constructor);//TypeError:Cannotreadproperty'constructor'ofundefined console.log('测试NaN->',NaN.constructor===Number);//true注意:NaN和infinity一样是Number类型的一个特殊值 console.log('测试function->',function(){}.constructor===Function);//true console.log('测试Object->',{}.constructor===Object);//true console.log('测试Array->',[].constructor===Array);//true console.log('测试Date->',newDate().constructor===Date);//true console.log('测试Error->',newError().constructor===Error);//true console.log('测试RegExp->',newRegExp().constructor===RegExp);//true console.log('测试Symbol->',Symbol().constructor===Symbol);//true console.log('测试Map->',newMap().constructor===Map);//true console.log('测试Set->',newSet().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));//[objectNumber] console.log('测试Boolean->',Object.prototype.toString.call(true));//[objectBoolean] console.log('测试String->',Object.prototype.toString.call(''));//[objectString] console.log('测试null->',Object.prototype.toString.call(null));//[objectNull] console.log('测试undefined->',Object.prototype.toString.call(undefined));//[objectUndefined] console.log('测试NaN->',Object.prototype.toString.call(NaN));//[objectNumber] console.log('测试function->',Object.prototype.toString.call(function(){}));//[objectFunction] console.log('测试Object->',Object.prototype.toString.call({}));//[objectObject] console.log('测试Array->',Object.prototype.toString.call([]));//[objectArray] console.log('测试Date->',Object.prototype.toString.call(newDate()));//[objectDate] console.log('测试Error->',Object.prototype.toString.call(newError()));//[objectError] console.log('测试RegExp->',Object.prototype.toString.call(newRegExp()));//[objectRegExp] console.log('测试Symbol->',Object.prototype.toString.call(Symbol()));//[objectSymbol] console.log('测试Map->',Object.prototype.toString.call(newMap()));//[objectMap] console.log('测试Set->',Object.prototype.toString.call(newSet()));//[objectSet]
控制台输出如下:
测试Number->[objectNumber]
测试Boolean->[objectBoolean]
测试String->[objectString]
测试null->[objectNull]
测试undefined->[objectUndefined]
测试NaN->[objectNumber]
测试function->[objectFunction]
测试Object->[objectObject]
测试Array->[objectArray]
测试Date->[objectDate]
测试Error->[objectError]
测试RegExp->[objectRegExp]
测试Symbol->[objectSymbol]
测试Map->[objectMap]
测试Set->[objectSet]
总结:
目前最完美的判断数据类型的方法
结语:以上为笔者的测试和总结。如有误或不完整地方,欢迎各位老铁指正。
以上就是JavaScript判断数据类型的4种方法的详细内容,更多关于JavaScript判断数据类型的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。