一.区分undefined,null,NAN
1.undefined代表没有赋值(这里的没赋值,是指我们编码人员没有赋值)
2.null代表赋值了,但是这个值很特殊,为null
什么时候给变量赋值为null呢?
- 1).初始化的时候:var a = null a指向一个对象,但对象此时还没有确定
- 2).使用完毕的时候:a = null 让a指向的对象为垃圾对象
3.NAN全称not a number
- 1).NAN属于number类型的一个值,
- 2).NAN不与任何值相等,包括自身。
- 3).什么时候出现NAN?
-
- 1.转换数字时本身就没办法往数字转 console.log(parseint(abc123)) // NAN
-
- 2.undefined参与数学运算时就会显示NAN console.log(1+undefined) // NAN undefined 参与数学计算时就会显示NAN
二.数据类型----数据类型分为两大类
1.基本数据类型
Number:任意数值1 2 3 4 5 6 7
String:任意文本 'zunzun' 'quanquan' 'kangkang'
Boolean:true/false
Undefined:undefined
null:null
2.对象(引用)类型
Object:任意对象(一般对象){}
Array:一种特别的对象[](1.可以通过下标取值 2.内部数据有序)
Function:一种特别的对象类型(可执行)
备注:Object Array Function其实不是并列关系
三.数据类型的判断typeof instanceof ===
1.typeof
- 1.可以判断:数值,字符串,布尔值,undefined,function
- 2.不能区分:null与对象,null与数组,数组与对象,因为返回的都是object
- 3.对于typeof
-
- 3.1 一个不正确(对于null):typeof null 的结果是object
-
- 3.2 一个不精确(对于数组):typeof [] 的结果是object
-
- 3.3 一个没问题 (对于一般对象):typeof{} 的结果是object
-
-
-
- 备注:typeof的返回值是该类型的字符串名称,且首字母小写。
举例:
//判断数值
var b = 1
console.log(typeof b) // 黑色字符串的 number
//判断字符串
var c = 'zunzun'
console.log(typeof c) //黑色字符串的 string
console.log(typeof c === 'string') //true
console.log(typeof c === 'String') //false 原因是typeof返回的是该类型的字符串名称,且首字母小写
//判断布尔值
var d = false
console.log(typeof d) //黑色字符串的 boolean
console.log(typeof d === 'boolean') //true
console.log(typeof d === 'Boolean') //false
//判断function
var e = function () {}
console.log(typeof e) // 黑色字符串的 function
console.log(typeof e === 'function') //true
console.log(typeof e === 'Function') //false
//判断undefined
var a
console.log(a) // 灰色代表数据类型 undefined类型表示未赋值
console.log(typeof a) //黑色代表字符串 undefined
console.log('abc') // 黑色字符串的 abc
console.log(typeof a==='undefined') //true undefined的值
console.log(typeof a=='undefined') //true undefined的值
console.log(typeof a===undefined) //false undefined类型
console.log(typeof a==undefined) //false undefined类型
//判断null 数组[] 对象 {}
var f = null
console.log(typeof f) //黑色字符串的 object 是由于js底层'缺陷'造成的
console.log(typeof null) //黑色字符串的 object
console.log(typeof []) //黑色字符串的 object
console.log(typeof []) //黑色字符串的 object
2.instanceof
- 1.专门用来判断对象类型的具体类型,如:Object Array Function
- 2.A instanceof B ==> 判断A是否是B的实例对象(即:B是构造函数名 注意:构造函数名首字母大写)
//判断a1是不是由Object缔造的
var a1 = {name:'zunzun',age:1.3}
console.log(a1 instanceof Object) //true 此处需注意构造函数名首字母需大写
//判断a2是不是由Function缔造的
var a2 = function () {
console.log(1)
}
console.log(a2 instanceof Function) //true
//判断a3是不是由Array缔造的
var a3 = [1,2,3,4,5]
console.log(a3 instanceof Array) //true
画重点:大公司面试题 (想进大厂的必备技能)
var b1 = {
b2:[1,'zunzun',console.log],
b3:function () {
console.log('我是b3')
}
}
console.log(b1 instanceof Object) // true
console.log(b1.b2 instanceof Array) //true
console.log(b1.b3 instanceof Function) //true
console.log(typeof b1.b2[2]) //function
console.log(typeof b1.b2[2]('zunzun')) //两个输出 1.'zunzun' 2.'undefined'
console.log(typeof console.log('zunzun')) //这里先打印出zunzun 然后再打印console.log的返回值 返回值为undefined然后再判断undefined的类型
console.log(b1.b2[2]('quaner')) //quaner 灰色 undefined
console.log(b1.b3()) // 我是b3 灰色undefined
//举例一:
function demo1() {
}
var a = demo1()
console.log(a) //灰色 undefined类型
//备注:函数体有return 返回值为return的内容 函数体没有return返回值为undefined
function demo2() {
console.log(1)
}
var b = demo2()
console.log(b) //显示两个 1 undefined
//举例二:
var s = console.log(2)
console.log(s) //控制台显示两个 2 undefined
3. 使用===判断(全等判断:不仅类型要一致而且值也要一致)
- 1.可以判断:undefined 和null
- 备注:因为undefined和null 的值只有一个
console.log(undefined === undefined) //true
console.log(null === null) //true