【问题标题】:Receiving TypeError: Cannot read property 'length' of undefined - why?接收类型错误:无法读取未定义的属性“长度” - 为什么?
【发布时间】:2021-04-08 17:12:54
【问题描述】:

我正在尝试返回一个简单的问候消息,该消息采用输入的名称,而如果字符串为空,将返回一个通用的“你好,世界!”信息。它还会查找大小写错误,并将编辑名称输入以确保其正确大写。这就是我目前所得到的。

   function hello(name) {
  if (name.length > 0 && typeof name == 'string') {
    let fixed = name.charAt(0).toUpperCase() + name.slice(1).toLowerCase();
    return "Hello, " + fixed + "!";
  }
  else {
    return "Hello, World!";
  }
}

它似乎没有占用 name 参数的长度,并且是唯一失败的测试!

【问题讨论】:

  • 请分享您如何调用此方法来澄清您的问题。

标签: javascript string string-length


【解决方案1】:

先判断是否是字符串

function hello(name) {
  if (typeof name == 'string' && name.length > 0) { // Changed
    let fixed = name.charAt(0).toUpperCase() + name.slice(1).toLowerCase();
    return "Hello, " + fixed + "!";
  }
  else {
    return "Hello, World!";
  }
}

【讨论】:

  • 那是完美的答案,非常感谢!
【解决方案2】:

据我了解,您的 undefined | null 案例失败了。 我们可以通过添加默认值来处理。

function hello(name = '') { //changed
  if (typeof name == 'string' && name.length > 0) { //changed
    let fixed = name.charAt(0).toUpperCase() + name.slice(1).toLowerCase();
    return "Hello, " + fixed + "!";
  }
  else {
    return "Hello, World!";
  }
}

【讨论】:

    【解决方案3】:

    您可以使用像 lodash 这样的 3rd 方库来简化操作

    const { capitalize } = require('lodash');
    `Hello ${capitalize('YOU')}`;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-25
      • 2018-04-25
      • 1970-01-01
      • 2022-11-12
      • 2021-06-02
      • 2013-11-24
      相关资源
      最近更新 更多