JS 数据类型
数据类型分类
数据类型
- 基本类型 Number、String、Boolean、Null、Undefined
- 引用类型 Object (Array、Function、Date)
判断数据类型
- typeof 判断基本的数据类型
- instanceof 可以判断稍微复杂的类型
- 例题1
解释:这是一个普通的函数,没有返回值,因此返回的是 undefined- 变式一
把var stu = Student("Lucy",20)
变成var stu = new Student("Lucy",20)
解释:通过new 关键字实例化出来的对象,把他作为构造函数,实例化对象来用,因此为 Object。
- 变式一
数据类型存储
变量与内存
- 变量声明
- 使用方便的标识符,用于引用计算机内存地址
- 变量声明指向一块内存空间,用于保存数据
- 变量赋值
- 向变量指向的内存空间中存放数据
两种内存空间
- 栈内存
- 存储值大小固定
- 由系统自动分配内存空间
- 空间小,运行效率高
- 堆内存
- 存储的值大小不定,可动态调整
- 由程序员通过代码进行分配
- 空间大,运行效率相对较低
* 栈结构,f1进,f1出
* 最终为 123
*/
function f1(){
console.log(1);
function f2(){
console.log(2);
function f3(){
console.log(3);
}
f3();
}
f2();
}
f1();
基本类型与引用类型的区别
内存分配方式不同
- 基本数据类型的临时变量分配在栈区
- 引用数据类型的变量的地址在栈区,指向的对象存储在堆区
- 栈区常用来存储函数局部临时变量,一般数据量较小
- 堆区常用来存储更为复杂的数据结构的对象
数据类型区别
基本类型与引用类型的区别
- 访问机制不同
- 基本类型的值直接访问
- 引用类型的值通过引用访问,不能直接访问
- 首先,从栈中获取该对象的地址引用
- 其次,再从堆内存中取得我们需要的数据
- 变量赋值不同
- 基本类型赋值,相互独立不影响
- 引用类型赋值,会影响
// 1-1基本类型赋值,互不影响 var a = 20; var b = a; b = 30; console.log(a); //20 // 1-2引用类型赋值,会产生影响 var a = {x:10,y:20}; var b = a; b.x = 5; console.log(a.x); //5
- 比较变量不同
-
对于“==”,比较的是值,“= = =” 比较的值和数值类型
-
基本数据类型判断的值是否相等
-
引用数据类型判断地址是否相同
-
// 2-1基本数据类型比较的是值 var a = 20; var b = 20; a === b; //true a = b; a === b; //true // 2-2引用类型判断的是 地址 是否相同 var a = {x:10,y:20}; var b = {x:10,y:20}; a === b; //false a == b; a === b; //true
-
练习1
解释:这是引用类型,最终指向的空间不一样
-
练习2
解释:其中x 和 z 都是基本类型,y是引用类型
-
- 参数传递不同
-
基本类型:把变量里的数据值传递给参数,之后参数和变量互不影响
-
引用类型:把对象的 地址 传递给参数,参数和对象都指向同一对象,互相影响
-
练习1
解释:shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值。因此a的值为[2,3,4]。 -
练习2
解释:此时 obj 相当于又开辟了一个新的地址空间,会改变之前的obj1 -
变式1
解释:此时为obj.value = "hello word"
只是单纯改变了obj.value
的值,不会影响obj1的值。 -
练习 3
解释: -
变式1
解释: