开发者问题收集

.toUpperCase() 不是一个函数

2017-02-22
42374

当 name 全部大写时,函数应该向用户发出回声。例如,当 name 为“JERRY”时,函数应该返回字符串“HELLO, JERRY!”控制台记录错误:.toUpperCase() 不是函数。

var hello = "Hello, ";

function greet(name) {

  if (name == null) {
    console.log(hello + "my friend")
  } else if (name == name.toUpperCase()) {
    console.log(hello.toUpperCase() + name.toUpperCase())
  } else {
    console.log(hello + name);
  }
}

var names = ["jack", "john"]
greet(names);
3个回答

names 是一个数组。数组没有这样的函数。

您可能希望对数组的每个元素调用 greet 函数:

names.forEach(greet);

如果您希望 greet 函数接受数组作为参数,那么您可以这样做:

function greet(name) {
      if (Array.isArray(name)) {
            name.forEach(greet);
            return;
      }
      ...

但这种多态性通常被视为一种不好的做法。

2017-02-22

您可以先应用 .toString() ,然后使用 .toUpperCase()

if (name === name.toString().toUpperCase())
Oranit Dar
2019-01-30

names 是数组声明,因此不能使用该类型的函数,如果您想使用 for 循环或使用 names[1] 类型打印该数组

<script>
  var hello = "Hello, ";

  function greet(name) {

    if (name == null) {
      document.write(hello + "my friend")
    } else if (name == name.toUpperCase()) {
      document.write(hello.toUpperCase() + name.toUpperCase())
    } else {
      document.write(hello + name);
    }
  }

  var names = ["jack", "john"]
  greet(names[0]);
  greet(names[1]);
</script>
Gopinath Sooriyakumar
2019-01-30