JavaScript数据类型、类型检测函数——慕课网ArraysSimilar编程练习

基本类型

string
number
boolean
function
undefined
object (null,Array,Date,window)

隐式转换与“==”“===”

num-string   var str=num+‘ ’
string-num   var num=str-0

“==”进行隐式转换后判断(即判断变量里面的值)

“===”直接判断(判断是不是一个东西)
NaN!=NaN
null===null
undefined===undefined
new obj != new obj
[1,2] != [1,2]

包装类

调用基本类型(String Boolean Number)的某项属性时,基本类型会自动转换成一个Object的包装类,但注意:当此条语句执行过后包装类会自动销毁,无法进行后续访问。(一般只做取值不做赋值和改值,如arr1.length)



类型检测

typeof()    return type

理解这句:typeof只返回6个基本类型!!!!!
比如:
NaN-number
[1,2]-obj
null-obj
date-obj
window-obj

要进行精细判断需要用以下:

null:

null===null 或者 Object.prototype.toString.apply(arr2[i]) === ‘[object Null]‘

date:

Object.prototype.toString.apply(arr2[i]) === ‘[object Date]‘

window:
Object.prototype.toString.apply(arr2[i]) === ‘[object global]‘

a instanceof b return true/false

理解这句:
判断a这个对象是否属于b这个类或其子类的实例
如果a是b,就返回true(比如a是childern,b是human,a继承b)

不同iframe或不同window之间不能用这个方法

注意:var a="tt123" a instanceof String => false
原因是a是var,而String是类,一般这种基本类型要用typeof判断

object.prototype.toString.apply()

ie678判断null和undefined失效(返回的是‘[object Object]‘)

练习题


**
 * =====================================================
 * 请在index.html文件中,编写arraysSimilar函数,实现判断传入的两个数组是否相似。具体需求:
 * 1. 数组中的成员类型相同,顺序可以不同。例如[1, true] 与 [false, 2]是相似的。
 * 2. 数组的长度一致。
 * 3. 类型的判断范围,需要区分:String, Boolean, Number, undefined, null, 函数,日期, window.
 *
 * 当以上全部满足,则返回"判定结果:通过",否则返回"判定结果:不通过"。
 * ===================================================== 
 */

/*
* param1 Array
* param2 Array
* return true or false
*/
function arraysSimilar(arr1, arr2){
	if (arr1 instanceof Array && arr2 instanceof Array ) {	//先判断传入的是否是数组
		if (arr1.length == arr2.length) {					//判断数组长度
			console.log("same-length");
			console.log(arr1);
			console.log(arr2);
			//开始判断数组内部是否相似
			return sameLengthArraysSimilar(arr1, arr2);
		} else{
			//两个数组长度不同返回false
			return false;
		}
	} else {
		//传入的参数不是数组返回false
		return false;
	}
}

/**
 * 判断两个等长的数组内部是否相似
 * 遍历数组
 * arr1中元素各种类型出现的个数是否和arr2中元素各种类型出现的个数相同
 * @param  {Array} arr1 数组1
 * @param  {Array} arr2 数组2
 * @return {true,false}
 */
function sameLengthArraysSimilar(arr1,arr2) {
	var numInArr1 = 0;
	var numInArr2 = 0;
	var booleanInArr1 = 0;
	var booleanInArr2 = 0;
	var funInArr1 = 0;
	var funInArr2 = 0;
	var undefinedInArr1 = 0;
	var undefinedInArr2 = 0;
	var stringInArr1 = 0;
	var stringInArr2 = 0;
	var nullInArr1 = 0;
	var nullInArr2 = 0;
	var dateInArr1 = 0;
	var dateInArr2 = 0;
	var windowInArr1 = 0;
	var windowInArr2 = 0;

	for (var i = 0; i < arr1.length; i++) {
		if(typeof arr1[i] === 'number' ){
			numInArr1 ++;
		} else if(typeof arr1[i] === 'boolean'){
			booleanInArr1 ++;
		} else if(typeof arr1[i] === 'function'){
			funInArr1 ++;
		} else if(typeof arr1[i] === 'undefined'){
			undefinedInArr1 ++;
		} else if(typeof arr1[i] === 'string'){
			stringInArr1 ++;
		} else if(typeof arr1[i] ==='object'){
			if(Object.prototype.toString.apply(arr1[i]) === '[object Null]'){
				nullInArr1 ++;
			} else if(Object.prototype.toString.apply(arr1[i]) === '[object Date]'){
				dateInArr1 ++;
			} else if(Object.prototype.toString.apply(arr1[i]) === '[object global]'){
				windowInArr1 ++;
			}
		}

		if(typeof arr2[i] === 'number'){
			numInArr2 ++;
		} else if(typeof arr2[i] === 'boolean'){
			booleanInArr2 ++;
		} else if(typeof arr2[i] === 'function'){
			funInArr2 ++;
		} else if(typeof arr2[i] === 'undefined'){
			undefinedInArr2 ++;
		} else if(typeof arr2[i] === 'string'){
			stringInArr2 ++;
		} else if(typeof arr2[i] ==='object'){
			if(Object.prototype.toString.apply(arr2[i]) === '[object Null]'){
				nullInArr2 ++;
			} else if(Object.prototype.toString.apply(arr2[i]) === '[object Date]'){
				dateInArr2 ++;
			} else if(Object.prototype.toString.apply(arr2[i]) === '[object global]'){
				windowInArr2 ++;
			}
		}
	}

	console.log("num---"+numInArr1);
	console.log("num---"+numInArr2);
	console.log("boo---"+booleanInArr1);
	console.log("boo---"+booleanInArr2);
	console.log("null---"+nullInArr1);
	console.log("null---"+nullInArr2);
	console.log("window---"+windowInArr1);
	console.log("window---"+windowInArr2);
	console.log("date---"+dateInArr1);
	console.log("date---"+dateInArr2);
	console.log("string---"+stringInArr1);
	console.log("string---"+stringInArr2);
	console.log("fun---"+funInArr1);
	console.log("fun---"+funInArr2);
	console.log("undefined---"+undefinedInArr1);
	console.log("undefined---"+undefinedInArr2);

	if(numInArr1 == numInArr2 && booleanInArr1==booleanInArr2 && funInArr1==funInArr2 && undefinedInArr1==undefinedInArr2 && stringInArr1==stringInArr2 && nullInArr1==nullInArr2 && dateInArr1==dateInArr2 && windowInArr1==windowInArr2){
		console.log('================================true');
		return true;
	}else{
		console.log('================================false');
		return false;
	}
}




郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。