收藏
回答

云函数 在压入数组的时候,没有再次压入数据会莫名奇妙的多了一个数据起来?

var arr = [ 'oIouB4s-1584018124859',

  '你',

  '15564985985',

  '上海市上海市黄浦区哈哈哈哈哈哈222',

  '',

  '',

  '',

  '2020-03-12 21:02:04
]

变量arr刚开始的数据如上所示,也没有什么地方再次去修改它,循环了一圈后,怎么就多了一个数据????????

打印的数据如下

好尴尬,截图的时候刚好歌词也是那句,没错我的逻辑被颠覆了!!!

为了追求真理,我在小程序端控制台又试了一下,也是这样,难道真的是我错了??

莫非这个变量间的赋值是附地址?

特意附上小程序端代码

var k = [
      1,
      2,
      6,
      8,
      9
    ]
    for(let i =0;i<3;i++){
      let m = k
      console.log(k)
      m.push(144)
      for(let j=0;j<4;j++){
        // console.log(j)
      }
    }

我觉得是我错了,一直理解成变量值传递,原来这些结构是地址传递,刚用python试了一下,也是这样的。


所以各位童鞋,避免再走我的这个坑,由我系统的给大家解释下这个现象

解惑

首先需要理解JavaScript中给变量赋值,是引用还是复制。


1、JavaScript中值的类型

JavaScript中的值分为2大类:基本类型和引用类型。


基本类型:

Number(数字类型)、String(字符串类型)、Boolean(布尔类型)、Undefined、Null


引用类型:

函数(Function)、数组(Arrary)、日期(Date)、正则(RegExp)、错误(Error)


注意:所有的引用类型都是对象,也就是Object对象下的一个类。



2、值和引用

在将一个值赋给变量时,解析器必须确定这个值是基本类型值还是引用类型值。


对基本类型,是按值访问的,即通过值复制的方式来赋值和传递。

对引用类型,是按引用访问的,即通过引用复制的方式赋值和传递。在操作对象时,实际上是在操作对象的引用,而不是实际的对象。

说到这里整篇文章就结束了,希望对大家有所帮助


最后一次编辑于  2020-03-13
回答关注问题邀请回答
收藏

1 个回答

  • 百熟优质果~运营合作
    百熟优质果~运营合作
    2020-03-13

    已经把答案写在了上面的文末,希望对大家有所帮助,记得回来点赞噢~

    2020-03-13
    有用
    回复 8
    • 百熟优质果~运营合作
      百熟优质果~运营合作
      2020-03-13
      本来我想 公有数据私有数据分离的,不行就算了。我用回老方法了
      2020-03-13
      回复
    • Mr.Zhao
      Mr.Zhao
      2020-03-13
      const 基本数据类型才不会被改变,比如字符串和number
      2020-03-13
      回复
    • 百熟优质果~运营合作
      百熟优质果~运营合作
      2020-03-13回复Mr.Zhao
      const 后,再赋值会报错的啊。语法里面不是规定赋值之后不能再改变的吗 我试过是这样的
      2020-03-13
      回复
    • Mr.Zhao
      Mr.Zhao
      2020-03-13回复百熟优质果~运营合作
      对啊 就这样 ,只是对基本类型说的
      2020-03-13
      回复
    • 百熟优质果~运营合作
      百熟优质果~运营合作
      2020-03-13回复Mr.Zhao
      const k =5
      k =6
      这样子也会报错的啊
      2020-03-13
      回复
    查看更多(3)
登录 后发表内容
问题标签