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]‘)

练习题

http://www.imooc.com/code/5760

**
 * =====================================================
 * 请在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;
	}
}
时间: 2024-11-08 04:18:39

JavaScript数据类型、类型检测函数——慕课网ArraysSimilar编程练习的相关文章

JavaScript中类型检测

JavaScript是类型松散的,也就是说,在使用变量和函数参数之前,不会对它们进行比较已确保它们的数据类型正确. JS有五种基本数据类型:Undefined.Null.Boolean.Number和String,还有一种复杂数据类型Object. JS是不支持任何创建自定义类型的机制,所有值最终都将是上述6种数据类型之一. 对于上述6种类型的变量,可以利用typeof操作符来检测. typeof操作符可能返回下列六个字符串: "undefined"--这个值未定义,对应Undefin

Javascript之类型检测

一.检测原始(基本数据:字符串.数字.布尔.null.undefined)类型. 用typeof检测原始类型:1.对于字符串,typeof返回"string"; 2.对于数字,typeof返回"number"; 3.对于布尔型,typeof返回"boolean"; 4.对于undefined,typeof返回"undefined"; 5.对于null,typeof返回"object". 所以检测前面四种类型

复习javascript之类型检测

昨天面了阿里一面,有一个检测类型问题,虽然当时给了答案,但是感觉自己还是不够确信,事实的结果是我给的答案有几个的确是错的~~唉~~有道是信誓旦旦不思其反.面试的时候脑子进水~~ typeof null 返回object,这是因为特殊值null被认为是一个空的对象引用. typeof 123 返回number typeof NaN 返回number .NaN,非数值是一个特殊的数值. 这个数值用来表示一个本来要返回数值的操作数未返回数值的情况. typeof new Number(123) 返回o

【JS学习】慕课网8-17编程练习 网页的返回与跳转

编程练习 制作一个跳转提示页面: 要求: 1. 如果打开该页面后,如果不做任何操作则5秒后自动跳转到一个新的地址,如慕课网主页. 2. 如果点击“返回”按钮则返回前一个页面. 代码如下: 需要注意的是23行要用window.location.href来指定  用window.open 的话是在新页面打开 27行用计时器setInterval来调用函数  也可以用setTimeout 但此时函数内外都要加上即注释掉的25行 10行超链接指向必须是javascript:跳转函数 1 <!DOCTYP

Javascript 常用类型检测

1.判断变量是否为数组的数据类型? 方法一 :判断其是否具有"数组性质",如slice()方法.可自己给该变量定义slice方法,故有时会失效. 方法二 :obj instanceof Array ,但是在某些IE版本中不正确 方法三 :来自于zepto.js源码 , function isArray(arg){ return Object.prototype.toString.call(arg) === "[object Array]" }    对于支持ECMA

【JS学习】慕课网7-23编程练习 有关字符串数组

要求:1.显示打印的日期. 格式为类似“2014年03月21日 星期三” 的当前的时间.2.计算出该班级的平均分(保留整数).同学成绩数据如下:"小明:87; 小花:81; 小红:97; 小天:76;小张:74;小小:94;小西:90;小伍:76;小迪:64;小曼:76" 首先要知道日期对象的使用与返回函数 然后下面遇到一点问题,一定要认真看各个函数的说明,很多错误就是函数声明没仔细看, 如30行的substring函数终止位置记得要加1!! 如19行的spit函数分隔开以后返回的本身

【JS学习】慕课网4-10 编程练习

在一个大学的编程选修课班里,我们得到了一组参加该班级的学生数据,分别是姓名.性别.年龄和年级,接下来呢,我们要利用JavaScript的知识挑出其中所有是大一的女生的的名字哦. 学生信息如下: ('小A','女',21,'大一'),  ('小B','男',23,'大三'), ('小C','男',24,'大四'),  ('小D','女',21,'大一'), ('小E','女',22,'大四'),  ('小F','男',21,'大一'), ('小G','女',22,'大二'),  ('小H','女'

慕课网JavaScript深入浅出学习笔记之数据类型

JavaScript数据类型 六种数据类型(五种原始类型,一种对象类型) number sttring boolean null undefined object #对象 Function Array Date ... javascript数据类型是弱数据类型,在定义变量时无需指定数据类型. var num = 32; num = "this is a string"; 32 + 32 // 64 #加法运算 //"+"理解为字符串拼接,"-"理

JavaScript进阶--慕课网学习笔记

                     JAVASCRIPT-进阶篇 给变量取个名字(变量命名) 变量名字可以任意取,只不过取名字要遵循一些规则: 1.必须以字母.下划线或美元符号开头,后面可以跟字母.下划线.美元符号和数字.如下: 正确: mysum _mychar $numa1 错误: 6num  //开头不能用数字 %sum //开头不能用除(_ $)外特殊符号,如(%  + /等) sum+num //开头中间不能使用除(_ $)外特殊符号,如(%  + /等) 2.变量名区分大小写,