JavaScript 中typeof、instanceof 与 constructor 的区别?

typeof、instanceof 与 constructor 详解


typeof  一元运算符

返回一个表达式的数据类型的字符串,返回结果为js基本的数据类型,包括number,boolean,string,object,undefined,function.

语法:typeof(data) 或 typeof data

实例:

			var test = [123, true, "abc", {}, function() {}];
			for(var i = 0; i <= test.length; i++) {
				console.log(typeof test[i]);
			}
//			number
//			boolean
//			string
//			object
//			function
//			undefine

注: typeof null == object  

instanceof  二元运算符

返回一个布尔值,该值指示一个对象是否为特定类的一个实例。

语法: object instanceof class

如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 class 存在于对象的原型链中(为 true),则该运算符返回 true。如果 object 不是 class 的实例,或 object 为 null,则该运算符返回 false。

其本质是判断  class.prototype 是否存在于object对象的原型链上,关于原型链请点击这里

实例:

			function A(){
				
			}
			var a = new A();
			console.log( a instanceof A);//true
			console.log(a instanceof Object);//true


constructor 属性,存在于Object.prototype的属性

返回对象的构造函数

语法: object.constructor

返回值是函数的引用,不是函数名:

 JavaScript 数组 constructor 属性返回 function Array() { [native code] }

 JavaScript 数字 constructor 属性返回 function Number() { [native code] } 

JavaScript 字符串 constructor 属性返回 returns function String() { [native code] } 

如果一个变量是数组你可以使用 constructor 属性来定义。

实例:

			function A(){
				
			}
			var a = new A();
			console.log(a.constructor,a.constructor === A);	//true
			console.log(a.constructor === Object);	//false
对象的构造器 constructor 是可以改变的,但我们一般不建议这样做,因为这样会使程序的逻辑混乱。

实例:

			function A(){
				
			}
			function B(){
				
			}
			A.prototype.constructor = B;
			var a = new A();
			console.log(a.constructor,a.constructor === A);	//false
			console.log(a.constructor === B);	//true





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值