数据类型
1)基本数据类型:number,string,bollean,undefined,null,symbol
2)引用数据类型:Object(function,array两种特殊的对象)
区别
1)声明变量时候的存储分配
基本数据类型存储在栈中
引用数据类型存储在堆中
2)不同的内存分配机制也带来了不同的访问机制
- 不可以直接访问堆内存空间的位置以及直接操作堆内存空间,只能操作对象在栈内存中引用地址
- 基本数据类型直接访问,引用数据类型访问引用地址,根据引用地址找到堆中实体
3)复制变量时的不同
- 基本数据类型:将原始值的副本赋值新的变量
- 引用数据类型,将引用地址复制给新的变量
相关问题
-
null和undefined的区别
null:定义了并赋值为null
undefined:定义未赋值
转为数值也不同,number(null),为0,number(undefined),为NaN(不是一个数字)
-
什么时候给变量赋值为null
1)初始赋值,声明将要赋值为对象
2)结束前,让指向的对象成为垃圾对象(被垃圾回收器回收) -
什么时候会出现null
1)作为函数的参数,表示该函数的参数不是对象
2)作为对象原型链的终点 -
为什么null的数据类型判断为object
是浏览器的一个bug,因为所有的值在计算器中都是一个二进制编码来进行存储,浏览器把前三位都是0的就当作为对象,而null都为0,可以将他看做一个空对象的指针,表明该变量将要赋值为对象 -
什么时候会出现undefined
1)变量被声明了,但是没有赋值
2)调用函数时,应该提供的参数没有提供,该参数就等于undefined
3)对象没有赋值的属性,该属性的值为undefined
4)函数没有返回值,默认返回undefined -
严格区分变量类型和数据类型
1)数据类型:基本类型、对象类型(七种数据类型)
2)变量类型(变量内存类型):基本类型(保存的是基本类型的数据)、引用类型(保存的是地址值) -
JS中typeof NaN的结果是什么?
1)NaN不是一个数字,表示是否属于number类型的一种状态:是或者否,不是确切的值
2)JS中number除了浮点型和整数型,还与一个特殊值NaN
3)下面NaN表达式中存在不可转化的变量,返回了无效的结果,不是返回确切的值
var a="abc"
console.log(Number(a))
4)NaN不等于它本身,因为他不是确切的值,代表一个范围