js数据类型判断

本文介绍了JavaScript中数据类型的多种判断方法,包括使用instanceof、constructor属性和Object.prototype.toString.call(),并强调了jQuery.type()函数的全能性,特别是对于区分内置对象类型的准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

)

基本数据类型中:Number,String,Boolean。字面量值不可以用instanceof检测,但是构造函数创建的值可以,如下:

var num = new Number(123);

var str = new String(‘dsfsf’);

var boolean = new Boolean(false);

还需要注意null和undefined都返回了false,这是因为它们的类型就是自己本身,并不是Object创建出来它们,所以返回了false。

3 .constructor

constructor是prototype对象上的属性,指向构造函数。根据实例对象寻找属性的顺序,若实例对象上没有实例属性或方法时,就去原型链上寻找,因此,实例对象也是能使用constructor属性的。

如果输出一个类型的实例的constructor,就如下所示:

console.log(new Number(123).constructor)

//ƒ Number() { [native code] }

可以看到它指向了Number的构造函数,因此,可以使用num.constructor==Number来判断一个变量是不是Number类型的。

var num = 123;

var str = ‘abcdef’;

var bool = true;

var arr = [1, 2, 3, 4];

var json = {name:‘wenzi’, age:25};

var func = function(){ console.log(‘this is function’); }

var und = undefined;

var nul = null;

var date = new Date();

var reg = /1{5,20}$/;

var error= new Error();

function Person(){

}

var tom = new Person();

// undefined和null没有constructor属性

console.log(

tom.constructor==Person,

num.constructor==Number,

str.constructor==String,

bool.constructor==Boolean,

arr.constructor==Array,

json.constructor= 《大厂前端面试题解析+Web核心总结学习笔记+企业项目实战源码+最新高清讲解视频》无偿开源 徽信搜索公众号【编程进阶路】 =Object,

func.constructor==Function,

date.constructor==Date,

reg.constructor==RegExp,

error.constructor==Error

);

//所有结果均为true

除了undefined和null之外,其他类型都可以通过constructor属性来判断类型。

4 . 使用Object.prototype.toString.call()检测对象类型

可以通过toString() 来获取每个对象的类型。为了每个对象都能通过 Object.prototype.toString() 来检测,需要以 Function.prototype.call() 或者 Function.prototype.apply() 的形式来调用,传递要检查的对象作为第一个参数,称为thisArg。

var toString = Object.prototype.toString;

toString.call(123); //“[object Number]”

toString.call(‘abcdef’); //“[object String]”

toString.call(true); //“[object Boolean]”

toString.call([1, 2, 3, 4]); //“[object Array]”

toString.call({name:‘wenzi’, age:25}); //“[object Object]”

toString.call(function(){ console.log(‘this is function’); }); //“[object Function]”

toString.call(undefined); //“[object Undefined]”

toString.call(null); //“[object Null]”

toString.call(new Date()); //“[object Date]”

toString.call(/2{5,20}$/); //“[object RegExp]”

toString.call(new Error()); //“[object Error]”

这样可以看到使用Object.prototype.toString.call()的方式来判断一个变量的类型是最准确的方法。

5 .无敌万能的方法:jquery.type()

如果对象是undefined或null,则返回相应的“undefined”或“null”。

jQuery.type( undefined ) === “undefined”

jQuery.type() === “undefined”

jQuery.type( window.notDefined ) === “undefined”

jQuery.type( null ) === “null”

如果对象有一个内部的[[Class]]和一个浏览器的内置对象的 [[Class]] 相同,我们返回相应的 [[Class]] 名字。 (有关此技术的更多细节。 )

jQuery.type( true ) === “boolean”

jQuery.type( 3 ) === “number”

jQuery.type( “test” ) === “string”

jQuery.type( function(){} ) === “function”

jQuery.type( [] ) === “array”

jQuery.type( new Date() ) === “date”

jQuery.type( new Error() ) === “error” // as of jQuery 1.9

jQuery.type( /test/ ) === “regexp”

其他一切都将返回它的类型“object”


  1. a-zA-Z ↩︎

  2. a-zA-Z ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值