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

Javascript 接收类型错误:无法读取属性';长度';未定义的-为什么?,javascript,string,string-length,Javascript,String,String Length,我试图返回一条简单的问候语,它使用输入的名称,而如果字符串为空,则会返回一个通用的“Hello,World!”消息它还会查找大写错误,并将编辑名称输入以确保其正确大写。这就是我到目前为止得到的 function hello(name) { if (name.length > 0 && typeof name == 'string') { let fixed = name.charAt(0).toUpperCase() + name.slice(1).toL

我试图返回一条简单的问候语,它使用输入的名称,而如果字符串为空,则会返回一个通用的“Hello,World!”消息它还会查找大写错误,并将编辑名称输入以确保其正确大写。这就是我到目前为止得到的

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

首先检查是否为字符串

函数hello(名称){
如果(typeof name=='string'&&name.length>0){//已更改
设fixed=name.charAt(0.toUpperCase()+name.slice(1.toLowerCase();
返回“Hello,”+修复+“!”;
}
否则{
返回“你好,世界!”;
}
}

据我所知,您的
未定义| null
案例失败。 我们可以通过添加默认值来处理这个问题

函数hello(name=''){//已更改
如果(typeof name=='string'&&name.length>0){//已更改
设fixed=name.charAt(0.toUpperCase()+name.slice(1.toLowerCase();
返回“Hello,”+修复+“!”;
}
否则{
返回“你好,世界!”;
}

}
您可以使用第三方库,如
lodash
,使其更简单

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

请分享你如何使用这种方法来澄清你的问题。这是一个完美的答案,非常感谢!