繁体   English   中英

接收类型错误:无法读取未定义的属性“长度” - 为什么?

[英]Receiving TypeError: Cannot read property 'length' of undefined - why?

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

   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 参数的长度,并且是唯一失败的测试!

首先检查是否是字符串

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!";
  }
}

据我了解,您undefined | null 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!"; } }

您可以使用lodash之类的 3rd 方库来简化操作

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM