js值类型与引用类型

一个经典的问题:以下两个输出结果为何不一致?

    // 情况1:值类型
    let a = 100
    let b = a
    b = 20
    console.log(a)  // 100

    // 情况2:引用类型
    let a = { age: 100 }
    let b = a
    b.age = 20
    console.log(a.age)  // 20

解答:
情况1中的b为值类型,而情况2中的b为引用类型

值类型:

  • 值类型的变量占用空间固定,保存在栈中。
  • 值类型的变量b可以看作是和a不相关的变量。
  • b的改变不会影响到a的值,保存与复制的是值本身。
  • 使用typeof检测数据的类型

引用类型:

  • 引用类型的变量占用空间不固定,保存在堆中。
  • 引用类型的变量b同a指向同一个内存地址。
  • b的改变会影响到a的值,保存与复制的是指向对象的一个指针。
  • 使用instanceof检测数据类型

引申出的问题:js中哪些变量是值类型,哪些变量是引用类型?

常见的值类型:

let a  // undefined,注意:未定义的变量不可用const定义
const s = 'abc'  // 字符串
const n = 100  // 数字
const b = true  // bool
const s = Symbol('s')  // symbol

常见的引用类型:

const obj = { x: 100 }  //对象
const arr = ['a', 'b', 'c']  //数组
const n = null  // 特殊引用类型,指针指向空地址
发布了673 篇原创文章 · 获赞 644 · 访问量 38万+

猜你喜欢

转载自blog.csdn.net/zhaohaibo_/article/details/104465989
今日推荐