为什么当索引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
,""
,NaN
,null
,undefined
,当然还有false
;所有其他价值观都是真实的。关于javascript - 为什么charAt无法检测到字符串?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40205417/