js 引用数据类型和值数据类型
引用数据类型:对象(Object)、数组(Array)、函数(Function)、正则(RegExp)、日期(Date)等
值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol。
栈内存中保存了变量标识符和指向堆内存中该对象的指针,堆内存中保存了对象的内容
值数据类型存放在栈中,而引用数据类型存放在堆中,栈中存放的是对象的引用内存地址
如果变量引用了同一块内存地址,修改其中一个变量的值,其他变量也会跟着修改
对象
let obj1 = obj2 = { name: 'jerry', age: 2 };
obj2['age'] = 10;
console.log(obj1, obj2); // {name: "jerry", age: 10} {name: "jerry", age: 10}
数组
let arr1 = [1, 2, 3];
let arr2 = arr1;
arr2[0] = 999;
console.log(arr1, arr2); // [999, 2, 3] [999, 2, 3]
函数
函数在js中是一个对象,函数体是保存在函数对象的属性上的,可以使用valueOf修改函数体
let f1 = function () { console.log('function'); }
let f2 = f1
f2.valueOf = function () { return 'new funciton' }
console.log(f1.valueOf()); // new funciton
console.log(f2.valueOf()); // new funciton
栈内存中包括了变量的标识符和变量的值。
如下所示,其实是分配了两块地址,修改其中一个变量,另一个变量不会随之修改
let str1 = str2 = 'hello';
str2 = 'world';
console.log(str1, str2); // hello world
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 289211569@qq.com