判断一个数的类型

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>原型链</title>
</head>
<body>
	<pre>
		原型本身也是个对象,因此原型对象也有原型   对象就有__proto__
		由多级父元素逐级继承形成的链式结构  

		原型链保存着:所有对象的成员(方法和属性)
		作用域链保存:所有的变量

		原型链作用:控制对象访问成员的使用顺序:优先使用自己的,自己没有,才延原型链向父级查找
		作用域链作用:控制变量的使用顺序(优先使用活动对象(AO)中的局部变量,局部中没有,才去延用作用域链向父级作用域查找)

		原型链最顶端:Object.prototype
		作用域链的终点:window


		简单概况:
			所有不需要"对象."访问的变量都保存在作用域链中
			所有需要用"对象."访问的变量都保存在原型链中
	</pre>
	<script>
		//鄙视题:判断一个对象是不是数组?有几种办法
		// 0、typeof只能识别 原始类型、funtion函数,object引用类型
		var n=5,s='hello',b=true,nu=null,un;
		var fun = function(){}
		var obj1={}
		var obj2=[];
		console.log(
			typeof n,//number
			typeof s,//string
			typeof b,//boolean
			typeof nu,//object
			typeof un,//undefiend
			typeof fun,//function
			typeof obj1,//object
			typeof obj2,//object
			)

		// 1、验证原型对象
			// 如果一个对象的原型对象是Array.prototype
			// 1)Object.getPrototypeOf(obj) 获得指定obj的原型对象
			 // == Array.prototype
			/*console.log(
				Object.getPrototypeOf(obj1) == Array.prototype,
				Object.getPrototypeOf(obj2) == Array.prototype
				)*/
			// 2) var bool = father.isPrototypeOf(child); 判断father是否是child的父对象
			/*console.log(
				Array.prototype.isPrototypeOf(obj1),
				Array.prototype.isPrototypeOf(obj2)
				)*/
		// 2、验证构造函数
			// 1)如果一个对象的构造函数是Array
			// obj1.constructor == Array
			/*console.log(
					obj1.constructor == Array,
					obj2.constructor == Array,
				)*/

			// 2) var bool = obj instanceof Array 判断obj是否由构造函数Array创建出来

			// instance:实例  一个类型中的一个具体的对象   
					// 实例化 :用new创建一个对象
			console.log(
				 obj1 instanceof Array,
				 obj2 instanceof Array,
				)
			var obj3 = {};
			obj3.__proto__ = obj2;
			// 3、检查内部属性class
				// class是每个对象中记录对象创建时适用的类型的属性  --  DNA
				// 一旦对象被创建,class属性就无法被修改!!!  无法轻易访问
				// 获的class
					// 唯一的方法:调用Object.protoype中的toString()
					// 输出结果:[object 				Object]
							// 引用类型的对象   		class属性值
				console.log(obj1.toString())
				console.log(obj2.toString())
				console.log(obj3.toString())
				// 但是几乎所有内置对象的原型对象都重写Object中String方法,所以内置对象的子对象,都无法直接调用Object的toString
				// 解决:call
					// 任意对象.任意方法.call(替换的对象)
					console.log(Object.prototype.toString.call(obj2));
			// 最严格的的鉴别数组方法
			console.log(
					Object.prototype.toString.call(obj1) == "[object Array]",
					Object.prototype.toString.call(obj2) == "[object Array]",
					Object.prototype.toString.call(obj3) == "[object Array]",
				)
			// 4、Array.isArray(obj)
			console.log(
				Array.isArray(obj1),
				Array.isArray(obj2),
				Array.isArray(obj3),
				)
	</script>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值