1.数据类型
1.定义
1.分类
1.基本(值)类型
- String:任意字符串
- Number:任意的数字
- Boolean:true/false
- undefined:undefined
- null:null
2.对象(引用)类型
- Object:任意对象
- Function:一种特别的对象(可以执行)
- Array:一种特别的对象(通过数值下标寻找,内部数据是有序的)
2.判断
-
typeof:可以判断:undefined/Number/String/Boolean类型以及Function类型
-
instanceof:判断对象的具体类型,返回值是布尔值
-
===:可以判断undefined/null类型
疑问:为什么typeof方法不能判断null类型?
typeof null 返回一个object,typeof null返回Object是一个不能去修正的的bug,因为这会破坏现有的代码。
第一代JavaScript引擎中的JavaScript值表示为32位的字符。最低的3位作为一种标识,表示值是对象、整数、浮点数或者布尔值。
对象的标示是000。而为了表现null值,引擎使用了机器语言NULL指针,该字符的所有位都是0。而typeof就是检测值的标志位,这就是为什么它会被认为是一个对象的原因。
2.示例
定义基本类型和对象类型
const a = new Number(2)
const b = new String(3)
const c = new Boolean('assa')
const d = undefined
const e = null
console.log(a); //2
console.log(b); //'3'
console.log(c); //true 当值为0或false时打印false,其余有效值均为true
console.log(d); //undefined
console.log(e); //null
const obj = new Object()
const fun = new Function()
const array = new Array()
console.log(obj); //{}
console.log(fun); // ƒ anonymous(){}
console.log(array);//[]
判断基本类型和对象类型(定义的变量与上例相同)
//判断基本类型和对象类型
console.log(typeof a);//'number'
console.log(typeof b);//'string'
console.log(typeof c);//'boolean'
console.log(typeof d);//'undefined'
console.log(typeof e);//'object'
console.log(typeof obj);//'object'
console.log(typeof fun);//'function'
console.log(typeof array);//'object'
console.log(obj instanceof Object);//true
console.log(fun instanceof Function);//true
console.log(array instanceof Array);//true
console.log(d === undefined);//true
console.log(e === null);//true
const obj1 ={
b1:[1,'abc',console.log],
b2:{name:'zzm',age:'19'},
b3:function(){
return '我是一个函数'
},
b4:function(){
return function(){
return '我是b4函数中的函数'
}
}
}
console.log(window.console.log === obj1.b1[2]);//true
obj1.b1[2]('输出xxx')//与console.log('输出xxx')是一样的
console.log(obj1.b2.name);//'zzm'
console.log(obj1.b3());//'我是一个函数'
console.log(obj1.b4()());//'我是b4函数中的函数' 使用函数需要在 函数名+'()' ,b4函数的返回值仍是一个函数,所以要使用obj1.b4()+'()'来调用这个嵌套的函数
3.相关问题
1.undefined与null的区别?
- undefined代表定义了但没有赋值
- null代表定义且赋值了,值为null
2.什么时候给变量赋值为null?
- 初始赋值,表明将要赋值类型为对象
- 结束前,让对象成为垃圾对象(被垃圾回收器回收
const obj = null//初始赋值表明将要赋值为对象
obj = {a:1,b:2}//使用时将obj赋值为对象
obj = null//结束前,让对象成为垃圾对象(被垃圾回收器回收
3.严格区别变量类型·与数据类型?
- 数据的类型
- 基本类型
- 对象类型
- 变量的类型(变量内存值的类型)
- 基本类型:保存的就是基本类型的数据,例如const a=1
- 引用类型:保存的是地址值,例如const b = {a:1},b保存的是对象在内存中的地址值,而不是对象本身
我们将蓝色内存块中的对象数据赋值给a时,a中保存的实际上是对象的地址值