JS 类型检检测方法

方法一:typeof

使用typeof运算符可以检测基本类型及 function,遇到数组或null无法准确识别

typeof (123);					// number
typeof ("abc");					// string
typeof (true); 					// boolean
typeof (function(){})			// function

typeof (new Date())				// object
typeof ([])						// object
typeof (null)					// object

方法二:instanceof

使用 instanceof运算符通过检测对象的原型判断当前对象是否是指定对象的实例,从而达到检测类型的效果。而在JavaScript中基本数据类型并不是对象,或者说是一个 包装对象,无法通过原型获取信息因此使用instanceof运算符不能判断基本数据类型。

[] instanceof Array;					// true
[] instanceof Object;					// true
{name: 10} instanceof Object;			// true

({}) instanceof Object;					// true
/* 注意:左侧表达式是一个花括号对象时需要在外层添加括号,否则会报错 */

123 instanceof Number;					// false
123 instanceof Object;					// false
"string" instanceof Number;				// false
"string" instanceof Object;				// false

let n = new Number(1);
n instanceof Number;					// true 变量n是通过对象Number实例出来的,实际类型是一个对象,所以属于Number

Object.prototype.toString

使用Object.prototype.toString方法将变量的原型通过callapply绑定并转换成字符串来获取变量的类型

Object.prototype.toString.apply("");						// [object String]
Object.prototype.toString.call("");							// [object String]
Object.prototype.toString.call(function(){});				// [object Function]
Object.prototype.toString.call(123);						// [object Number]

functino Per(){
	
}
let p = new Per();
Object.prototype.toString.call(p);							// [object object]

constructor

通过使用变量构造器的引用来获取识别变量的数据类型

(123).constructor == Number						// true
(123).constructor == Ojbect						// false

({}).constructor == Object						// true

"123".constructor == String						// true
"".constructor == Object						// false

[].constructor == Array							// true
[].constructor == Object						// false

总结

typeof运算符可以用来检测基本的数据类型,在检测对象或 null 时不能获取正确的值;

instanceof运算符与typeof运算符相反,在检测基本数据类型、 nullundefined 时不能获取正确变量类型,能正确识别内置对象及自定义对象的实例;

Object.prototype.toString方法可以正常获取基本类型及内置对象的实例的类型,但当对象为自定义构造函数实例时,不能正确识别到构造函数,如上面Object.prototype.toString方法中最后的案例。

constructor构造器可以识别拥有构造器属性的变量,但对于没有构造器属性的变量如nullundefined使用则会报错

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值