zoukankan      html  css  js  c++  java
  • 3/1 JavaScript原始值和引用值

    写在前面

      开学了, 慢慢学习

      ...


    原始值&引用值

      原始值

      原始值 就是 一般的数据 

      Undefined 、 Null 、 Boolean 、 Number 、 String 、 Symbol

      这些都是 原始值 

      某种程度上来说  不是对象的 都是原始值

      在访问的时候 是 by value 按值访问的

      ( 对于 其他语言,String 一般是一个对象(数组对象) 但是 js 不是 )

      引用值

      某种意义上来说 对象就是引用值

      ( JavaScript 来说 一切又是对象... // 只要 new 的话)

      引用值 在访问的时候 是 by reference 按引用访问的

    动态属性

      对于 对象来说,我们可以直接添加或删除某个 或某些属性

      但是 对于 原始值 来说,我们不能 给他们添加 动态属性

      

       

      对 string_a 添加属性 并不会报错,但是 当我们访问的时候 却找不到

      对于 对象来说,我们就可以 添加 属性

      再比如如下的 例子

      

      

      打开一看

      

      我们也可以访问到里面的数值

      这是因为 new String() 是一个 创建对象实例的操作 

      本身就是一个 对象 即 一个 引用值

    复制

      对于 学过 python 的朋友来说,对于 浅复制 和 深复制 一定很清楚

      js 也有如此的说法,

      对于原始值

      原始值 就是 相当于 一个全新的副本 彼此 互相不影响

      

      对于 引用值 来说

      js 引擎 不允许 我们直接对 内存进行修改,所以我们对 内存中的值 只能靠 by reference 来访问 操作的并非是 对象本身

      

    传递参数

      这里 必须强调一点 函数中 传参 都是 按值传递 的

      意思是 原始值 和 引用值 都是 给 局部变量赋值 

      相当于 上面说的复制

      根据 红宝书 上面写的

      

      我们来分析一下

      如果是 按引用传递

      可以这么 理解 ( 可能会有错误 )

      就是 局部变量 obj 在某种程度上 就是 aMan

      函数内部 就是

      1. 先对 aMan指向的对象 增加 一个name属性 “ shitty "

      2. 然后将 aMan 指向 另外一个新的 对象

      3. 最后给 aMan新指向的对象 一个 name属性 “ shitty "

      所以 结果 应该是

      输出 nonono

      

      

         相反 如果是 按值传递的话

      我们得到的是 一个 aMan 指针的 副本

      函数内部 就是

      1. 先对 obj 指向的对象 增加 一个name属性 “ shitty "

      2. 然后将 obj 指向 另外一个新的 对象

      3. 最后给 obj 指向的新的对象 一个 name属性 “ shitty "

      最后 局部变量 obj 被销毁

      所以 结果 应该是

      输出 shitty

      

       

       然后输出是

       

      说明了 是 按值传递 的


    参考文献

      js 红宝书

    总结

      今天水了一篇随笔

    Let it roll
  • 相关阅读:
    Codeforces Round #632 (Div. 2)
    Educational Codeforces Round 83 E. Array Shrinking
    Codeforces Round #626 D. Present
    I
    java学习-get和post请求
    java学习-MD5消息摘要算法
    分销系统数据库设计
    java获得当前日期是今年的第几周,以及这周的开始日期的方法
    分销系统的用户关系,用户与推广链接的数据库设计。设计思路
    git工具,conflict冲突解决方法
  • 原文地址:https://www.cnblogs.com/WaterMealone/p/14466129.html
Copyright © 2011-2022 走看看