Javascript 竞争未定义、空和空值
我想在我的代码中运行这个:Javascript 竞争未定义、空和空值,javascript,Javascript,我想在我的代码中运行这个:if(a>b){do something}其中a和b有时是未定义的或空的,有时是可比较的(例如,两者都是数字)。 在javascript中可以这样做吗? 我只希望如果它们是可比较的,那么是真的。一般来说,在没有定义您希望如何比较它们的规则的情况下,您不应该尝试比较不同类型的事物。虽然JS标准中定义了一组非常严格的规则来比较不同类型的值,但如果您试图围绕这组规则来设计代码,那么您就打开了一个巨大的漏洞 你可以考虑的是从比较操作中分离类型的铸造操作。例如: function
if(a>b){do something}
其中a和b有时是未定义的或空的,有时是可比较的(例如,两者都是数字)。
在javascript中可以这样做吗?
我只希望
如果它们是可比较的,那么是真的。一般来说,在没有定义您希望如何比较它们的规则的情况下,您不应该尝试比较不同类型的事物。虽然JS标准中定义了一组非常严格的规则来比较不同类型的值,但如果您试图围绕这组规则来设计代码,那么您就打开了一个巨大的漏洞
你可以考虑的是从比较操作中分离类型的铸造操作。例如:
function firstIsGreater(numA, numB) {
if (typeof numA !== 'number') return false;
if (typeof numB !== 'number') return false;
return numA > numB;
}
严格地说,这里不需要这些检查。例如,当您与未定义的
进行比较时,将转换为NaN
,任何涉及NaN
的比较都会导致false
问题是,通常类型的混合是你的离层代码中更大的问题的一个标志,而不是返回false,你可能会考虑投掷错误,或者至少触发一些警告。
通常,您应该验证这些值,并将它们转换为您完全知道的类型,这些值是从一些外部组件(服务器端调用、用户输入等)传入系统的
if(typeof a == 'number' && typeof b == 'number' && a > b){ do something}
只有当a和b都是数字且a大于b时,才会运行“do something”(做点什么)。任何未定义的值与小于
或小于或等于或大于或等于的比较结果false
在类似数字的环境中,任何null
值都将转换为零
也许这张桌子有帮助:
if(未定义<3)console.log(“未定义<3”);
if(未定义>3)console.log('undefined>3');
if(undefined=3)console.log('undefined>=3');
if(null<3)console.log('null<3');
if(null>3)console.log('null>3');
if(null=3)console.log('null>=3')代码>那么如果a
和b
都没有定义,你认为a>b
应该是什么呢?是的,零被高估了。NaN
与包括自身在内的任何东西相比总是错误的,尽管我同意显式强制转换,但显式检查是不必要的。这是一个好的观点,但实际上我还是想建议扔到那里。我会在那里加上这个。