js 中的值类型和引用类型是什么有什么区别

「爱情、让人受尽委屈。」 2022-12-01 14:13 309阅读 0赞

1、 javascript中变量类型分为值类型(基本数据类型)和引用类型
值类型:String(字符串),Number(数值),Boolean(布尔值),Undefined,Null
引用类型:Array(数组),Object(对象),Function(函数)

2、 值类型和引用类型的区别
(1) 存储位置不一样
值类型占用空间固定,保存在栈中,保存与复制的是值本身,可以使用 typeOf()检测值的类型.
引用类型占用空间不固定,保存在堆中,保存与复制的是指向对象的一个指针,需要使用 instanceof() 检测数据类型,使用 new() 方法构造出的对象是引用型.

(2) 复制方式不一样
值类型的变量直接赋值就是深复制,如 var a = 10; var b = a;那么a的值就复制给b了,b修改值不会影响a,两份数据在内存中是完全独立的。
引用类型的变量直接赋值实际上是传递引用,只是浅复制.是将变量中的存储的地址赋值一份单独存储,但是两个变量中修改其中一个对象,另外一个引用来访问的时候,也会访问到修改后的值。

(3) 值类型无法添加属性和方法,引用类型可以添加属性和方法。

(4) 值类型的比较是值的比较,只有当它们的值相等的时候它们才相等。引用类型的比较是引用地址的比较
比较的时候注意双等号在做比较的时候做了类型转换,而全等号是值和类型相等是才能相等.

(5) 在函数中的使用

  1. // 值类型
  2. var num = 10;
  3. function print(num) {
  4. num = 100;
  5. console.log(num); // 100
  6. }
  7. console.log(num); // 10
  8. // 引用类型
  9. var obj = {
  10. name: 'jone'
  11. }
  12. function printObj(obj) {
  13. obj.name = 'lucy';
  14. console.log(JSON.stringify(obj)); // {"name":"lucy"}
  15. }
  16. console.log(JSON.stringify(obj)); // {"name":"lucy"}

值类型变量在函数中被修改时只在函数作用域内部生效,当函数被销毁时此次修改立即失效;而引用类型在函数中被修改时修改的是运行时数据区中的值,即使函数被销毁,变量的值依旧被改变。

发表评论

表情:
评论列表 (有 0 条评论,309人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JS 基本类型引用类型

    JS 中基本类型和引用类型值 引入概念:基本类型和引用类型 1、可以感受到,JS 的变量及其松散,那么,正是 JS 变量松散 的本质,决定了:JS 变量名只是 一个在特定...