JavaScript数组值转换为变量

时间:2018-06-22 12:11:50

标签: javascript arrays reference

我正试图进入Fuse来创建移动应用程序,并且它们使用JavaScript作为其逻辑。我以前从未使用过JavaScript,最近才完成他们的入门课程。大部分内容都很容易理解,但是我在它们使用变量的方式上遇到了麻烦。如果有人可以解释变量在JavaScript中的行为,那将是很好的。

所以我遇到的问题如下:

    for (var i = 0; i < hikes.length; i++){
        // A new variable gets the value of the array
        var hike = hikes[i];

        if (hike.id == id){
            // The variable gets a new value
            hike.name = "foo";
            break;
        }
    }

因此,据我对编程的理解,数组加长应保持不变,只有变量加长应具有foo作为名称值。但是实际上,该数组现在还具有名称foo。

我猜该变量可以用作指向数组值地址的指针,但是也许有人可以帮助我更好地理解该概念。

5 个答案:

答案 0 :(得分:1)

是的,对象和数组始终作为引用传递:

a = {}; // empty object
b = a; // references same object
b.foo = 'bar';
a.foo; // also 'bar'

答案 1 :(得分:1)

您可以使用JSON.parse(JSON.stringify(hikes));创建该数组的深层副本,然后使用该复制的数组进行操作:

var hikes = [
  {
    'id': 10
  }
];
var id = 10;
var tempHikes = JSON.parse(JSON.stringify(hikes));
for (var i = 0; i < tempHikes.length; i++){
    // A new variable gets the value of the array
    var hike = tempHikes[i];
    if (hike.id == id){
        // The variable gets a new value
        hike.name = "foo";
        console.log('hike is ', hike);
        break;
    }
}
console.log(hikes);

答案 2 :(得分:1)

javascript中的

数组是通过引用传递的,每当您修改数组中的元素时,更改都会在您访问该数组的任何地方发生,为避免此类问题,您必须使用Array.from(arg)来创建一个来自的新数组arg参数。这也适用于对象,为避免对象发生此类问题,无论何时进行任何修改,都必须使用Object.create(obj)obj参数创建新的obj,或者可以使用let newObj = Object.assign( {} , obj )对于newObj的成员,obj对象看不到它,换句话说,这两个对象之间没有直接链接,同样的情况适用于数组

答案 3 :(得分:0)

BooleannullundefinedStringNumber的值称为原始类型

当您分配不是 基本类型的东西时,即数组函数对象,您就是存储对此的引用。 这意味着hikes[i]包含对该对象的引用,其中 reference 大约表示指向其在内存中位置的指针。

当您分配hike = hikes[i]时,您将复制引用而不是实际对象。因此实际上hike仍与hikes[i]指向同一对象,因此对该对象的任何更改在两种情况下都是可见的。

如果您要复制基础对象,则有不同的方法。其中之一是Object.assign

var hike = Object.assign({}, hikes[i])

答案 4 :(得分:0)

这是因为通过引用传递。您需要做的就是创建一个可以使用的新对象(字符串,数字...)。

 for (var i = 0; i < hikes.length; i++){
    var hike = hikes.slice(i,i+1)[0];
    if (hike.id == id){
        hike.name = "foo";
        break;
    }
}

切片还会创建一个深层副本。您可以使用拼接或分配或(((key1,key2)=>(key1,key2))(obj)等。