js 引用数据类型和值数据类型

  1. js 引用数据类型和值数据类型
  2. 对象
  3. 数组
  4. 函数

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