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
与包括自身在内的任何东西相比总是错误的,尽管我同意显式强制转换,但显式检查是不必要的。这是一个好的观点,但实际上我还是想建议扔到那里。我会在那里加上这个。