为什么输出显示未定义,我如何摆脱它?

时间:2020-10-25 22:46:51

标签: javascript

我有3个功能:

  1. reverseCharacter->反转字符
  2. checkType->检查字符串或数字类型并将其取反
  3. newFunction->在数组(arrayTest1,arrayTest2和arrayTest3)中运行,反转并检查字符的类型
function reverseCharacters(stringToReverse){
  return stringToReverse.split('').reverse().join('');
}

function checkType(stringToCheck){
  if(typeof (stringToCheck) === 'string'){
    console.log(reverseCharacters(stringToCheck));
  }
  else if(typeof (stringToCheck) === 'number'){
    console.log(reverseCharacters(String(stringToCheck)));
  }
}

let arrayTest1 = ['apple', 'potato', 'Capitalized Words'].reverse();
let arrayTest2 = [123, 8897, 42, 1168, 8675309].reverse();
let arrayTest3 = ['hello', 'world', 123, 'orange'].reverse();

function newFunction(x){
  for(let i = 0; i <= x.length; i++){
    console.log(checkType(x[i]));
  }
}

newFunction(arrayTest3);
newFunction(arrayTest2);
newFunction(arrayTest1);

运行代码时,在每个值之后我都无法定义:

egnaro
undefined
321
undefined
dlrow
undefined
olleh
undefined
undefined
9035768
undefined
8611
undefined
24
undefined
7988
undefined
321
undefined
undefined
sdroW dezilatipaC
undefined
otatop
undefined
elppa
undefined
undefined

我的问题是为什么它在输出中显示未定义,我该如何摆脱它?

2 个答案:

答案 0 :(得分:3)

您的函数没有显式的return语句,因此其返回值是不确定的。您可以通过添加返回值“ see-no more undefined”来证明这一点;作为checkType()函数的最后一行。

或者,只需删除对console.log()的调用中的checkType()

function reverseCharacters(stringToReverse){
  return stringToReverse.split('').reverse().join('');
}

function checkType(stringToCheck){
  if(typeof (stringToCheck) === 'string'){
    console.log(reverseCharacters(stringToCheck));
  }
  else if(typeof (stringToCheck) === 'number'){
    console.log(reverseCharacters(String(stringToCheck)));
  }
  return 'See, no more undefined';

}

let arrayTest1 = ['apple', 'potato', 'Capitalized Words'].reverse();
let arrayTest2 = [123, 8897, 42, 1168, 8675309].reverse();
let arrayTest3 = ['hello', 'world', 123, 'orange'].reverse();

function newFunction(x){
  for(let i = 0; i <= x.length; i++){
    console.log(checkType(x[i]));
  }
}

newFunction(arrayTest3);
newFunction(arrayTest2);
newFunction(arrayTest1);

答案 1 :(得分:1)

只需这样重写您的newFunction()

function newFunction(x){
  for(let i = 0; i <= x.length; i++){
    //console.log(checkType(x[i]));
    checkType(x[i])
  }
}

发生错误是因为您试图从console.log()checkType()的值。由于checkType()没有任何返回值,它仅记录reverseCharacters()返回值,因此您将获得未定义的打印结果。