为什么以下函数在索引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
答案 0 :(得分:3)
在JavaScript(以及所有其他语法相似的语言)中,这一行:
$date = new DateTime('2016-10-22 01:39:53 +5:30');
$date->setTimezone(new DateTimeZone('+13:40'));
echo $date->format('Y-m-d H:i:s');
装置
这并不意味着
在很多语言中你都会收到错误,因为if (name.charAt(2) === "a" || "i" || "o" || "u")
不是布尔值,所以"i"
是个奇怪的说法;但是JavaScript很乐意进行类型强制,因此|| "i"
会导致false || "e"
,因为true
是一个“真理” 1 值。
要使它意味着你想要的意思,你必须重复左手操作数:
"e"
您可能希望使用变量来避免重复调用if (name.charAt(2) === "a" ||
name.charAt(2) === "i" ||
name.charAt(2) === "o" ||
name.charAt(2) === "u")
,或者查看其他内容,例如这种典型的“Y in Y”方法:
charAt
旁注:你是不是错过了“e”(有时是“y”)? ; - )
1 “truthy value” - 用作布尔值时强制为if ("aiou".indexOf(name.charAt(2) !== -1)
的值为 truthy ;那些强迫true
的人是“虚假的”。虚假值为false
,0
,""
,NaN
,null
,当然还有undefined
;所有其他价值都是真实的。
答案 1 :(得分:2)
JS中的non-empty string is treated as a truthy value所以if语句总是true
。如果第一个条件name.charAt(2) === "a"
失败,它将检查第二个条件"i"
,它将始终被视为真实,因为它是非空字符串。
相反,您可以使用String#indexOf
方法执行此类简单操作。
if ("aiou".indexOf(name.charAt(2)) > 1)
答案 2 :(得分:1)
将if条件更改为 name.charAt(2)==='一个' || name.charAt(2)==='我' || name.charAt(2)==='○' || name.charAt(2)===' U'
答案 3 :(得分:1)
您需要通过一次比较检查每个字母。
function isVowel(name) {
console.log("The third letter of " + name + " " + "is " + name.charAt(2))
if (name.charAt(2) === "a" || name.charAt(2) === "i" || name.charAt(2) === "o" || name.charAt(2) === "u") {
console.log("3rd letter is vowel");
} else {
console.log("3rd letter is NOT vowel");
}
}
isVowel("abcdefg");

较短的ocde可能是用元音检查字符串并获取字母的位置,以进行检查。
function isVowel(name) {
console.log("The third letter of " + name + " " + "is " + name.charAt(2))
if ('aeiou'.indexOf(name[2]) !== -1) {
console.log("3rd letter is vowel");
} else {
console.log("3rd letter is NOT vowel");
}
}
isVowel("abcdefg");

答案 4 :(得分:1)
您可以使用Object
作为hash map
来检查角色是否为元音(您的元音检查条件错误,它总是返回true
)
var vowels = {
a: true,
i: true,
e: true,
o: true,
u: true
}
if(name.charAt(2) in vowels) {
...
}
为什么您的病情总是在返回true
?
因为在你的情况下这些都是等价的:
if (name.charAt(2) === "a" || "i" || "o" || "u")
if ((name.charAt(2) === "a") || ("i" || "o" || "u"))
if ((name.charAt(2) === "a") || true)
if (THIS_CAN_BE_ANYTHING || true)
if (true) // So, your condition is always true
答案 5 :(得分:1)
||
运算符不能那样工作:
if (name.charAt(2) === "a" || "i" || "o" || "u")
在语法上是正确的,但它不会做你期望的。你需要对每个元音进行单独的比较。或者,您可以将元音保留在字符串中,然后通过搜索或查找进行检查:
if ("aeiou".indexOf(name.charAt(2)) >= 0)
或
if ("aeiou".includes(name.charAt(2)))
(后一个例子中使用的.includes()
函数尚未获得广泛的支持。)