分两大部分来说一下js有哪些数据类型,并且这两大数据类型有什么区别,如何进行类型判断
答:
- 所有数据类型:String Number unll undefined Object Symbol Boolean
基本数据类型和引用数据类型
区别
- 基本数据类型中保存的是准确的值
- 复杂数据类型中保存的地址值
- 使用typeof来判断
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var a = '张三'
var b = 20
var c = [10,20,30]
var d = null
var e = undefined
var f = {
a,
b
}
var g = function() {
}
var h = true
console.log(typeof a) //string
console.log(typeof b) //number
console.log(typeof c) //object
console.log(typeof d) //object
console.log(typeof e) //undefined
console.log(typeof f) //boject
console.log(typeof g) //function
console.log(typeof h) //boolean- 使用instanceof来判断
1
2
3
4
5
6
7
8
9//instanceof 检测的是原型
console.log(a instanceof String);//false
console.log(b instanceof Number);//false
console.log(c instanceof Object);//true
console.log(d instanceof Object);//false
console.log(e instanceof Object);//false
console.log(f instanceof Object);//true
console.log(g instanceof Object);//true
console.log(h instanceof Object);//false注:instanceof 只能用来判断两个对象是否属于实例关系, 而不能判断一个对象实例具体属于哪种类型。
- 使用toString来判断
1 | console.log(Object.prototype.toString.call(a))//[object String] |
原理:
1.toString() 是 Object 的原型方法,调用该方法,默认返回当前对象的 [[Class]] 。这是一个内部属性,其格式为 [object Xxx] ,其中 Xxx 就是对象的类型。
2.对于 Object 对象,直接调用 toString() 就能返回 [object Object] 。而对于其他对象,则需要通过 call / apply 来调用才能返回正确的类型信息。
null和undefined
- null 表示被赋值过的对象,可以把一个对象赋值为null,故意表示其为空,不应该有值
- undefined 表示缺少值,此处应该有一个值,但是还未定义