[英]Why type errors are not caught by IF Statement parameters in JavaScript?
为什么比较运算符不将空字符串或非整数视为错误?
例子:
var x = “”;
if (x>=1 && x<=10){
console.log(x); //validation code: error is expected to be thrown as variable x is not an integer
} else {
console.log(“Error: ” + x);
}
编码语言:JavaScript(香草)
技能水平:初级
编辑器:Visual Studio Code
操作系统:Windows 7
来自MDN :“JavaScript 是一种松散类型的动态语言。JavaScript 中的变量不直接与任何特定值类型相关联,并且可以为任何变量分配(和重新分配)所有类型的值”
在比较的情况下,这会产生副作用:“在大多数情况下,如果两个操作数的类型不同,JavaScript 会尝试将它们转换为适合比较的类型。”
将字符串与数字进行比较时,Javascript 会尝试将该字符串转换为数字值以进行比较。 空字符串被认为具有数值0
。
如果将 if 语句分成两个单独的比较,您会看到:
x >= 1
为false
(因为0
小于1
)
x <= 10
为true
(因为0
小于或等于10
)
这种隐式类型转换是您不会收到类型错误的原因。 但是由于你的 if 语句的两个条件对于一个空字符串不能同时为true
,你会得到你从else
分支记录的错误。
在我看来,与 NULL 类似的 x 值和比较运算符不考虑条件 x >=1 && x<=10 与 NULL 进行比较。同样,这只是我的意见。
var x = “”; // x is similar to NULL here
if (x>=1 && x<=10){
console.log(x); //validation code: error is expected to be thrown as variable x is not an integer
} else {
console.log(“Error: ” + x);
} here
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.