- 图解
基本类型数据的变量直接存在栈中,而引用数据类型的变量,其地址存在栈中,数据存在堆中,通过栈中的这个地址访问堆内的数据。
基本数据类型
- 包含:number,string,boolean,undefined,null。js基本数据类型-掘金手记
引用数据类型
- 常见有:Array(数组),Object(对象)
上述图解内容配有以下代码段:
<script>
var a=1;
var b=a;
b=3;
console.log('a='+a,'b='+b);
// a=1 b=3
var arr1 =[1,2,3];
var arr2=arr1;
arr2=[5,4,3,2,1];
console.log('arr1:',arr1);
console.log('arr2:',arr2);
// arr2=arr1=[5,4,3,2,1]
var obj1 ={
name :'xiaoming',
age: 18,
}
var obj2 =obj1;
obj2.age=20;
console.log('obj1:',obj1);
console.log('obl2:',obj2);
// obj1.name=obj2.name='xiaoming'
// obj1.age=obj2.age=20
</script>
- 即引用数据类型的变量,其变量名实际上是一个指针,和基本数据类型的变量一起存放在栈内存中,而这个指针指向堆内存中的一块内存,对引用数据类型的变量的操作实际上是通过指针,对堆内存的这些数据进行修改。所以通过赋值符号进行赋值的引用数据类型变量,实际上只是将指针赋值给了这个新的变量,使其指向同一块堆内存而已。
如果使用赋值符号(=)进行了重新赋值,即改变了引用数据类型变量的地址
var obj1={
name: 'qiqi',
age: 17
}
var obj2 = obj1
obj1 = {
name: 'xiaosi'
age: 19
}
console.log(obj1)
//obj1 = {name: 'xiaosi',age: 19 }
//obj2 = {name: 'qiqi',abe: 17}
补充:
js 弱数据类型的语言 / php
java c c++ go 强数据类型的语言
用var关键字定义一个变量
- var定义的变量会变量提升 js变量提升-掘金手记
typeof 判断基本数据类型/引用数据类型 返回的是一个字符串
- undefined 变量声明以后未赋值 typeof -> undefined
- null 空对象 typeof -> object
var num_1 = 1;
var str = 'dnf';
console.log(typeof num_1) // number
console.log(typeof str) // string
判断数组/对象的方法
- 由于type(Object/Array) => Object 所以判断数组还是对象时,用下面两种方法
- obj.constructor =>判断是通过什么构造方法创建的(reutrn Object/Array)
- arr instanceof Array 判断 arr 是否是 Array的 一个实例化对象(return true/false)浅拷贝&深克隆-掘金手记