为什么当索引2不是元音时,以下函数为什么在索引2处返回元音?

 function isVowel(name) {
   console.log("The third letter of " + name + " " + "is " + name.charAt(2))
   if (name.charAt(2) === "a" || "i" || "o" || "u")
   console.log("3rd letter is vowel")
   else
   console.log("3rd letter is NOT vowel")
}

isVowel("abcdefg")

/*Outputs:*/ The third letter of abcdefg is c
3rd letter is vowel

最佳答案

在JavaScript(以及所有其他具有类似语法的语言)中,以下行:

if (name.charAt(2) === "a" || "i" || "o" || "u")


手段


如果name.charAt(2)===“ a”
或“ i”
或“ o”
或“ u”


这并不意味着


如果name.charAt(2)===“ a”
或name.charAt(2)===“ i”
或name.charAt(2)===“ o”
或name.charAt(2)===“ u”


在许多语言中,您会遇到错误,因为"i"不是布尔值,所以说|| "i"有点奇怪。但是JavaScript很乐意输入强制类型,因此false || "e"会产生true,因为"e"是一个“真实的” 1值。

要使其含义如您所愿,您必须重复左侧操作数:

if (name.charAt(2) === "a" ||
    name.charAt(2) === "i" ||
    name.charAt(2) === "o" ||
    name.charAt(2) === "u")


您可能希望使用变量来避免重复调用charAt,或者考虑做其他事情,例如这种典型的“是X在Y中”方法:

if ("aiou".indexOf(name.charAt(2) !== -1)




旁注:您不错过“ e”(有时还缺少“ y”)吗? ;-)



1个“真实值”-当用作布尔值时强制转换为true的值是真实的;强迫false的人是“虚假的”。伪造的值是0""NaNnullundefined,当然还有false;所有其他价值观都是真实的。

关于javascript - 为什么charAt无法检测到字符串?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40205417/

10-11 12:27