为什么 "Number" 让 "else if" 在这里工作?
why does "Number" make the "else if" work here?
我有个任务要跟if/elseif玩一下。
我不明白为什么,当我像下面的示例一样编写代码时,“else if(age === 18)”部分不起作用。它显示为“未定义”。其他 2 个工作。
但是,当我在所有这些中添加 (Number(age)) 时,它起作用了。为什么会这样?为什么我可以使用 2/3 而不使用“Number”,但我需要它才能使用 3/3?
var age = prompt("Please type your age!");
if (age < 18) {
alert("Sorry, you are too young to drive this car. Powering off");
} else if (age === 18) {
alert("Congratulations on your first year of driving. Enjoy the ride!");
} else if (age > 18) {
alert("Powering On. Enjoy the ride!");
}
导致prompt
returns一个字符串。
但是 <
& >
运算符将字符串转换为数字
var age = prompt("Please type your age!");
if (age < 18) {
alert("Sorry, you are too young to drive this car. Powering off");
} else if (age === '18') {
alert("Congratulations on your first year of driving. Enjoy the ride!");
} else if (age > 18) {
alert("Powering On. Enjoy the ride!");
}
prompt
returns 一个字符串,不能严格等于数字 18
因为类型不同。但是,如果您使用松散相等 (==
)。
将其转换为数字的最简单方法是使用一元加号运算符,其功能与 Number
函数大致相同。
var age = +prompt("Please type your age!");
您需要将字符串转换为数字。最简单的方法是取 unary plus +
.
对于数字,您可以通过严格比较 Identity/strict equality operator ===
与数字进行检查,因为您至少具有相同的类型。
var age = +prompt("Please type your age!");
if (age < 18) {
alert("Sorry, you are too young to drive this car. Powering off");
} else if (age === 18) {
alert("Congratulations on your first year of driving. Enjoy the ride!");
} else {
alert("Powering On. Enjoy the ride!");
}
因为prompt
return是一个字符串
运算符 <
和 >
允许您将字符串与数字进行比较,方法是 pre-converting 将字符串与数字进行比较,然后再进行比较。阅读 this article 了解更多信息,在 JS 中称为“Type Coersion”。
===
运算符不会执行此类型 coercion/conversion,它会直接将 "18"
与 18
和 return 进行比较。
要解决此问题,您可以改用其他等于运算符 ==
,它包含类型强制转换。
但是,更好的方法是检查输入是否确实是一个数字,如下所示:
var age = Number(prompt("Please type your age!"));
if (Number.isNaN(age)) {
alert("Try again with a number");
} else if (age < 18) {
alert("Sorry, you are too young to drive this car. Powering off");
} else if (age === 18) {
alert("Congratulations on your first year of driving. Enjoy the ride!");
} else if (age > 18) {
alert("Powering On. Enjoy the ride!");
}
我有个任务要跟if/elseif玩一下。 我不明白为什么,当我像下面的示例一样编写代码时,“else if(age === 18)”部分不起作用。它显示为“未定义”。其他 2 个工作。 但是,当我在所有这些中添加 (Number(age)) 时,它起作用了。为什么会这样?为什么我可以使用 2/3 而不使用“Number”,但我需要它才能使用 3/3?
var age = prompt("Please type your age!");
if (age < 18) {
alert("Sorry, you are too young to drive this car. Powering off");
} else if (age === 18) {
alert("Congratulations on your first year of driving. Enjoy the ride!");
} else if (age > 18) {
alert("Powering On. Enjoy the ride!");
}
导致prompt
returns一个字符串。
但是 <
& >
运算符将字符串转换为数字
var age = prompt("Please type your age!");
if (age < 18) {
alert("Sorry, you are too young to drive this car. Powering off");
} else if (age === '18') {
alert("Congratulations on your first year of driving. Enjoy the ride!");
} else if (age > 18) {
alert("Powering On. Enjoy the ride!");
}
prompt
returns 一个字符串,不能严格等于数字 18
因为类型不同。但是,如果您使用松散相等 (==
)。
将其转换为数字的最简单方法是使用一元加号运算符,其功能与 Number
函数大致相同。
var age = +prompt("Please type your age!");
您需要将字符串转换为数字。最简单的方法是取 unary plus +
.
对于数字,您可以通过严格比较 Identity/strict equality operator ===
与数字进行检查,因为您至少具有相同的类型。
var age = +prompt("Please type your age!");
if (age < 18) {
alert("Sorry, you are too young to drive this car. Powering off");
} else if (age === 18) {
alert("Congratulations on your first year of driving. Enjoy the ride!");
} else {
alert("Powering On. Enjoy the ride!");
}
因为prompt
return是一个字符串
运算符 <
和 >
允许您将字符串与数字进行比较,方法是 pre-converting 将字符串与数字进行比较,然后再进行比较。阅读 this article 了解更多信息,在 JS 中称为“Type Coersion”。
===
运算符不会执行此类型 coercion/conversion,它会直接将 "18"
与 18
和 return 进行比较。
要解决此问题,您可以改用其他等于运算符 ==
,它包含类型强制转换。
但是,更好的方法是检查输入是否确实是一个数字,如下所示:
var age = Number(prompt("Please type your age!"));
if (Number.isNaN(age)) {
alert("Try again with a number");
} else if (age < 18) {
alert("Sorry, you are too young to drive this car. Powering off");
} else if (age === 18) {
alert("Congratulations on your first year of driving. Enjoy the ride!");
} else if (age > 18) {
alert("Powering On. Enjoy the ride!");
}