JavaScript数据类型、类型检测函数——慕课网ArraysSimilar编程练习
[Web Development]
基本类型
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; } }