.toUpperCase()不是函数

时间:2017-02-22 14:26:54

标签: javascript

当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);

4 个答案:

答案 0 :(得分:5)

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

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

names.forEach(greet);

如果您希望greet函数接受数组作为参数,那么您可以执行

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

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

答案 1 :(得分:1)

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

if (name == name.toString().toUpperCase())

答案 2 :(得分:0)

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>

答案 3 :(得分:0)

var hello = "Hello, ";

function greet(names) {
  for (var i = 0; i < names.length; i++) {
    var name = names[i];
    if (name == null) {
      console.log(hello + "my friend")
    } else if (name) {
      console.log('toUpperCase works: ',hello.toUpperCase() + name.toUpperCase())
    } else {
      console.log(hello + name);
    }
  }
}

var names = ["jack", "john"]
greet(names);

如果将数组传递给函数,则该数组不起作用。现在好了。