javascript 为什么string.replace()在函数内部不能正常工作,而在函数外部却能正常工作?[duplicate]

rlcwz9us  于 2022-11-20  发布在  Java
关注(0)|答案(1)|浏览(115)

此问题在此处已有答案

Why does instanceof return false for some literals?(共10个答案)
14小时前就关门了。
我尝试使用以下函数将给定字符串中的“...”替换为存储在数组中的其他不同字符串:
`

function addTokens(input, tokens) 
{
  let returnInput = input;

  if ((typeof input === 'string') || (input instanceof String)) 
  { 
      if(input.length >= 6)
      {
          for (let i = 0; i < tokens.length; i++) 
          {
              if((tokens[i].tokenName === 'string') || (tokens[i].tokenName instanceof String))
              {
                  returnInput = returnInput.replace("...",`${tokens[i].tokenName}`);
              }   
              else
              {
                  //throw new Error("Invalid array format");
              }
          }
      }
      else
      {
          //throw new Error("Input should have at least 6 characters"); 
      } 
  }
  else
  {
      //throw new Error("Input should be a string");
  } 

  return returnInput;
}

`
我甚至对这些错误进行了注解,这样它们就不会以任何方式进行干扰,但这似乎不起作用;如果我打电话

result = addTokens('User ...', [{ tokenName: 'user' }])
console.log(result)

,它只返回初始的“User...”,而不是我希望它返回的“User ${user}”。
然而,当我运行这段代码时:
`

let str = "User ...";
let tok = [{ tokenName: "user" }]
str = str.replace("...", `${tok[0].tokenName}`);
console.log(str);

`
它本身就完成了我想让它做的事情。
有谁能帮我找出问题所在吗?很抱歉,我是Javascript新手。谢谢!

ql3eal8s

ql3eal8s1#

您有一个打字错误:

(tokens[i].tokenName === 'string')

应该是

(typeof tokens[i].tokenName === 'string')

更新后的工作代码如下:

function addTokens(input, tokens) 
{
  let returnInput = input;

  if ((typeof input === 'string') || (input instanceof String)) 
  { 
      if(input.length >= 6)
      {
          for (let i = 0; i < tokens.length; i++) 
          {
              if((typeof tokens[i].tokenName === 'string') || (tokens[i].tokenName instanceof String))
              {
                  returnInput = returnInput.replace("...",`${tokens[i].tokenName}`);
              }   
              else
              {
                  //throw new Error("Invalid array format");
              }
          }
      }
      else
      {
          //throw new Error("Input should have at least 6 characters"); 
      } 
  }
  else
  {
      //throw new Error("Input should be a string");
  } 

  return returnInput;
}

result = addTokens('User ...', [{ tokenName: 'user' }])
console.log(result)

相关问题