Return 字母数字 - 合并函数片段的问题

Return Alphanumerics -issue with combining pieces of the function

早先提交过这个,此时所有的部分都是分开工作的,而不是一起工作的。我试过四处移动,看看是否只是订单问题,但这并没有解决问题。试图将它们放在一个大 if/else 中似乎也没有用。我可以让字符串仅显示字母数字字符或显示 'not a string',但我无法让代码同时执行这两项操作。 本节将 return 仅显示正确的字母数字:

function nothingSpecial(str) {
  var re = /[A-Z\s0-9]/i;
  var newStr = '';

  for(var i=0; i<str.length; i++){
    if (re.test(str[i])){
      newStr = newStr + str[i];
    }
  }
   return newStr;
   if(str.length <= 0) {
    return ("Not a string!");
  }

      if (typeof str !== String) {
        return "Not a string!"} 

    }

nothingSpecial("asdfalsd@#$#")

这将 return "not a string!",即使它应该显示字母数字,但对于数字和“”[=13= 是正确的或看似如此]

function nothingSpecial(str) {

  var re = /[A-Z\s0-9]/i;
  var newStr = '';

    if(str.length <= 0) {
    return ("Not a string!");
  }

  if (typeof str !== String) {
    return "Not a string!"} 

  for(var i=0; i<str.length; i++){
    if (re.test(str[i])){
      newStr = newStr + str[i];
    }
  }
   return newStr;

    }
nothingSpecial(23)

我做错了什么? -先感谢您!

编辑:好的,根据您的评论,开始吧:

这是你的问题:

if (typeof str !== String)

您正在比较 typeof str 的结果,它是一个字符串,object constructor 是字符串 String,它是一个函数。它失败了,因为您实际上并没有检查字符串,而是在将字符串(typeof 的输出,无论您检查的类型如何,它始终是一个字符串)与一个函数进行比较。您的比较应如下所示:

if (typeof str !== 'string')

编辑:这是 JSFiddle

要接受任何类型的参数,转换为字符串并仅保留字母数字字符:

function nothingSpecial(str) {

  str += '' // convert any argument to string

  str = str.replace(/[^A-Z\s0-9]/gi, "") // remove all characters except alphanumeric and any kind of space (newlines too)

  return str
}