繁体   English   中英

为什么JavaScript中的IF语句参数没有捕捉到类型错误?

[英]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 >= 1false (因为0小于1
x <= 10true (因为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM