基本数据类型指的是简单的数据段,存储在 栈(stack)中!!!
值传递:基本数据类型俩个变量相互(相等)赋值时进行的值传递
是将一个变量复制了一份,赋值给另外一个变量
在内部中俩个变量内存空间是独立的
所以当改变其中一个变量时,另外一个变量不会发生变化
举个栗子:
var num1 = 45;
console.log(num1);//45
var num2 = num1
console.log(num2);//45
num2 = 99;
console.log(num2);//99
console.log(num1);//45
var a = 10;
console.log(a);//10
function fn1(b) {
console.log(b);//10
b *= 10;
console.log(b);//100
}
fn1(a);
//基本数据类型在比较时,比较的是 值
var n1 = 100;
var n2 = 100;
console.log(n1 == n2); //100
引用数据类型指的是有多个值构成的对象,存储在 堆(heap)中
引用数据类型是存放在堆内存中的对象
变量其实就是保存在栈内存中的一个'指针'
保存的是堆内存中的引用地址
这个指针'指向'堆内存中的引用地址
引用传递:引用数据类型俩个变量相互(相等)赋值时进行的时引用传递
//是将一个变量的指针(存储在堆内存中的引用地址)赋值给了另外一个变量,
//俩个变量都指向内存中的同一个引用地址
//所以当该变其中一个变量的值时,另外一个变量也会发生该该变
举个栗子:
var arr1 = [1, 2, 3, 4];
console.log(arr1);//[1, 2, 3, 4];
var arr2 = arr1;
console.log(arr2);//[1, 2, 3, 4];
arr2[1] = true;
console.log(arr2);//[1, true, 3, 4];
console.log(arr1);//[1, true, 3, 4];
var obj1 = { name: '小明', age: 18 };
console.log(obj1);//{ name: '小明', age: 18 };
function fn2(obj2) {
console.log(obj2);//{ name: '小明', age: 18 };
obj2.age = 19;
console.log(obj2);//{ name: '小明', age: 19 };
}
fn2(obj1);
console.log(obj1);//{ name: '小明', age: 19 };
// 引用数据类型在比较时,比较的是 引用地址
var a1 = [1, 2, 3, 4];
var a2 = [1, 2, 3, 4];
console.log(a1 == a2);//false
console.log(arr1 == arr2);//true
//练习:
var num = 10;
function fn(n) {
n = 20;
console.log(n); //20
}
fn(num);
console.log(num); //10
var obj = {
name: '帅哥',
age: 18
}
function fn2(o) {
o.name = '男神';
console.log(o.name); //'男神'
}
fn2(obj)
console.log(obj.name); //'男神'