当前位置: 首页 > Web前端 > HTML

在JS中,只有传值

时间:2023-04-02 18:06:14 HTML

之前看《javascript高级程序设计》的时候遇到一个问题,就是函数传参的问题。书上说是passbyvalue,不是passbyreference。很多人认为在js中传值有两种方式,一种是复制,一种是通过引用传递数组、对象等。后来在知乎上看到上面的问题,发现并没有那么简单。我个人的理解是js中一切都是值传递。这是高级编程中的一个例子:可能很多人会疑惑,person.name不应该是Greg吗?为什么要出口尼古拉斯?因为setName函数其实相当于复制了person对象的地址,然后赋值给obj,但是obj=newObject()这句是给obj赋了另外一个地址,所以无论下面怎么修改obj,都不会影响人。这是另一个例子:vara=[1,2,3];varb=a;a=[1,2,3,4];console.log(b);//1,2,3按照正常的思路就是a和b指的是同一个数组对象。当a改变时,b也会改变,但b在这里没有改变。这是简单地将a的值复制到b吗?这类似于上面的示例。它还把a指向的对象的地址复制给了b,那么a=[4,5,6]就相当于a指向了另一个数组,所以b还是指向原来的数组,不会发生变种。这是另一个例子:vara=[1,2,3];varb=a;a.push(4);console.log(b);//[1,2,3,4]因为a的改变还是原来的数组,所以b也会随之改变。最后,我会提出一个我在笔试中做错的问题。vartest1=newBoolean("false");控制台日志(测试1);//true注意:如果逻辑对象没有初始值或者它的值为0、-0、null、""、false、undefined或NaN,那么该对象的值为false。否则,它的值为true(即使参数是字符串“false”)!