基础类型和引用类型
数据类型:number/string/boolean/undefined/object/function
数据类型:number/string/boolean/undefined/null/{}/[]/function
在js中没有null类型,没有数组类型,数据类型:object类型
根据每种数据类型存储方式和赋值方式的不同,将所有数据类型分成2大类:
1.基础类型:number/string/boolean/undefined/null
2.引用类型:{}/[]/function
基础类型
var a = 10
在内存中开辟空间a,给其中放入数据10
我们在内存中存储数据,内存空间会被划分成多个区域,每个区域各司其职,例如,内存会专门划分一片区域用来运行我们的系统,内存会划分专门的区域用来执行js代码。
存储数据,也是会在内存中有专门的一片空间,用来存储数据,这个空间的名称叫做 栈
从存储的角度来看待不同的数据类型:
基础数据类型会将数据存储在栈中,引用数据类型会将数据存储在堆中,将堆的地址存储在栈中
引用类型
var arr = ['a', 'b', 'c']
会在栈中开辟空间arr,将数据存放在另一个内存空间 堆 中,堆中存放数据的内存地址,放在栈中arr的空间
通过赋值角度来看待不同的数据类型:
// 基础类型的赋值,是将其中一个值复制到另一个变量容器中,引用类型的赋值是将一个栈中的内存地址复制一份放到另一个变量容器中,改变其中一个的值,另一个也会发生改变
// 基础类型:var a = 10
// var b = a // 将a中的值复制一份放到了b中,复制以后,有两个独立的值
// a = 20 // 改变其中一个,另一个不会发生改变的
// console.log(b); // 10
// 引用类型: var arr = ['a', 'b', 'c']
// var brr = arr // 将arr在栈中存储的地址复制了一份给brr,此时arr和brr共享同一个值的内存地址
// arr[1] = 'd' // 将arr存储的地址中的值的b改成d
// 没有改变arr在栈中存储的内存地址
// console.log(brr); // brr也就跟着发生了改变
// 注意事项:
// var arr = ['a', 'b', 'c']
// var brr = arr
// arr = [1,2,3] // 重新给arr赋值,就会将arr在栈中存储的内存地址改掉
// console.log(brr);
在进行全等比较的时候:
基础类型先比较类型是否相同,如果类型相同了,再比较值是否相等;引用类型,会比较内存地址是否相同
基础类型的全等比较 - 比较类型和值
var a = 1
var b = 1
console.log( a === b ); // true
引用类型的全等比较:
var arr = [1,2,3]
var brr = [1,2,3]
console.log(arr === brr); // false
引用类型在进行全等比较的时候,在比较栈中存储的内存地址是否相同
1022

被折叠的 条评论
为什么被折叠?



