zoukankan      html  css  js  c++  java
  • js值类型和引用类型的区别

    1. javascript中变量类型分为值类型(基本数据类型)和引用类型

    (1) 值类型:String(字符串),Number(数值),Boolean(布尔值),Undefined,Null

    (2) 引用类型:Array(数组),Object(对象),Function(函数)

    2. 值类型和引用类型的区别

    (1) 存储位置不一样

    ① 值类型的变量会保存在栈内存中,如果在一个函数中声明一个值类型的变量,那么这个变量当函数执行结束之后会自动销毁

    ② 引用类型的变量名会保存在栈内存中,但是变量值会存储在堆内存中,引用类型的变量不会自动销毁,当没有引用变量引用它时,系统的垃圾回收机制会回收它

    栈内存

    堆内存

     a = 10,b = 20;

     arr

    [10,20,30,40,50]


    (2) 复制方式不一样

    ① 值类型的变量直接赋值就是深复制,如 var a = 10; var b = a;那么a的值就复制给b了,b修改值不会影响a

    ② 引用类型的变量直接赋值实际上是传递引用,只是浅复制

    输出结果arr和array都会是[1,20,30],要想实现深复制,必须在堆内存中再开辟一块空间

    (3) 值类型无法添加属性和方法,如

    结果都会返回undefined

    (4) 引用类型可以添加属性和方法

    结果person.age=18,person.eat返回一个函数

    (5) 值类型的比较是值的比较,只有当它们的值相等的时候它们才相等。比较的时候注意”==”和”===”,双等号(==)在做比较的时候做了类型转换,而全等号(===)是值和类型相等是才能相等

    结果返回true,两个相同字符串的比较,是值(‘{}’)的比较,完全相等

    (6)引用类型的比较是引用地址的比较

    结果返回false,两个空对象在堆内存中的地址不一样,所以即使两个一模一样的对象也不一定相等

     
  • 相关阅读:
    [Django]中间件
    Python装饰器的诞生过程-->和闭包的微妙关系
    Python实现经典算法之---斐波那契数列(兔子问题&走楼梯问题)
    二分查找---非递归算法和递归算法
    JavaScript的event对象
    input[type='submit']input[type='button']button等按钮在低版本的IE下面,去掉黑色边框的问题
    JavaScript 之 数据在内存中的存储和引用
    HTML5 之 简单汇总
    HTML5 Canvas——基础入门
    nodejs(14)express获取url中的参数
  • 原文地址:https://www.cnblogs.com/NanKe-Studying/p/14069556.html
Copyright © 2011-2022 走看看