为什么不能在JavaScript循环中更改变量,而该变量只是在变量外声明的]]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么不能在JavaScript循环中更改变量,而该变量只是在变量外声明的]]相关的知识,希望对你有一定的参考价值。

var maskPII = function(S) {
    var ans = "";
    if(S.includes("@")){
        S = S.toLowerCase();
        var parts = S.split("@");
        var first = parts[0];
        for(var i=0;i<parts[0].length;i++){
            if(i!=0 && i!=parts[0].length - 1)
                first[i] = '*';
        }
        ans = first +"@" +parts[1];
    }else{

    }
    return ans;
};

我的目标是编辑字符串(包含电子邮件)以掩盖第一部分,例如说电子邮件为johndoe@abc.com,那么我应该输出j*****e@abc.com

但是在循环中,我无法将字符更改为星号。

执行后,我看到first的值仍然与parts[0]相同并且没有星号,有人可以解释为什么吗?另外,我该怎么做才能在循环内修改变量?

var maskPII = function(S){var ans =“”; if(S.includes(“ @”)){S = S.toLowerCase(); var parts = S.split(“ @”); var first = parts [0]; for(var i = 0; i ] >>>

答案

要回答您的问题... javascript允许您使用[]索引访问字符串的值..但是这是只读访问...您不能使用该运算符插入/替换值。

参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String

When using bracket notation for character access,
attempting to delete or assign a value to these properties will not succeed.
The properties involved are neither writable nor configurable.
(See Object.defineProperty() for more information.)
另一答案

嗯,这就是您要寻找的,这将是输出j*****e@abc.com

另一答案

这是您使用的方法的代码:

以上是关于为什么不能在JavaScript循环中更改变量,而该变量只是在变量外声明的]]的主要内容,如果未能解决你的问题,请参考以下文章

如何在循环内声明一个新变量而不是错误?

如何在 django 模板中为循环创建唯一的 javascript 变量名?

如何在循环中更改php变量名?

在 javascript 警报或提示中创建循环

为啥我不能在 Javascript 中滚动循环?

为啥我不能在“foreach”循环中取消设置变量?