gpt4 book ai didi

javascript - 为什么在 for.Each 中处理后数组中的值没有改变?

转载 作者:行者123 更新时间:2023-12-01 00:45:47 24 4
gpt4 key购买 nike

我在 JavaScript 中有 4 个不同的值(字符串)。我需要检查这些值之一是否不是数字。如果是,则将该值替换为“---”,如果不是,则不执行任何操作。所以我将这些值放入一个数组中并调用 forEach 函数进行检查。所以我实际上希望我的预定义变量(在将它们放入数组之前)如果它们不是数字而改变,而只是数组的元素发生变化。

所以我做了一些研究,发现了按引用调用和按值调用之间的区别。所以我将变量更改为字符串对象,但它不起作用。我知道,调用数组的元素也可以,但我想了解为什么我的实际变量没有改变?


var first = new String("1");
var second = new String("2");
var third = new String("3");
var fourth = new String("test");

var testArr = [first, second, third, fourth];
testArr.forEach(function (value, index) {
if (isNaN(value)) {
this[index] = "---";
}
}, testArr);

console.log(fourth);
//*here I expect "---" but it is "test"*
//I know that testArr[3] is now "---", but why not the variable fourth as well?


最佳答案

存储在变量中的值永远不会改变,因为在您的情况下变量主机值本身,而不是引用。如果你想应用这种魔法,你应该:

  1. 将初始值放入数组/对象
  2. 使用对象而不是类型变量,例如:

    var first = {value:'1'};
    var second = {value:'2'};
    var third = {value:'3'};
    var fourth = {value:'replaceme'};

    var testArr = [first, second, third, fourth];
    testArr.forEach(function (obj, index) {
    if (isNaN(obj.value)) {
    obj.value = "---";
    }
    });

    console.log(fourth);

关于javascript - 为什么在 for.Each 中处理后数组中的值没有改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57378362/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com