function compare(a, b) {
return isNaN(a) || isNaN(b) ? a > b : +a > +b;
}
var c = compare(10,5);
alert("C value ==?"+c);
我在理解上述脚本时遇到了困难。如何从compare()返回布尔值true
或false
。如何生成布尔值true
。请解释。布尔值如何从此语句返回true或false
function compare(a, b) {
return isNaN(a) || isNaN(b) ? a > b : +a > +b;
}
var c = compare(10,5);
alert("C value ==?"+c);
我在理解上述脚本时遇到了困难。如何从compare()返回布尔值true
或false
。如何生成布尔值true
。请解释。布尔值如何从此语句返回true或false
return isNaN(a) || isNaN(b) ? a > b : +a > +b;
这检查,看看是否任何a
或b
不是数字(IsNan
)。如果任一测试结果为真,则返回a > b
的结果;如果它们都不是NAN,则返回+a > +b
的结果。阅读Javascript的ternary(有条件)运营商的文档。
,以确保它很清楚,测试是:
如果不是数字或B不是 号,返回true,如果一个大 比B,否则尝试转换和 b都为数字并返回是否 比b
注意,整个表达式是没有意义的,因为它要返回相等测试,即使是试图转换后有什么可能不是数字更大。
这是不正确的。 '+'运算符被重载,在OP的上下文中它充当*一元加运算符*(ECMA-262§11.4.6)。它将以下标识符转换为数字(如果可以),它不一定会将其转换为正值。 – RobG 2011-05-19 02:11:34
@RobG:感谢您的纠正。我会尝试纠正我的答案以反映它。 – 2011-05-19 02:59:11
那么return语句有两种可能的方式返回值,两者都是布尔:
return isNaN(a) || isNaN(b) ? a > b : +a > +b;
可以返回这个(一个布尔值)
isNaN(a)
还是这个(也是布尔 - 它是一个比较运算符)
+a > +b;
它不会返回'isNan(a)'。该表达式仅用于确定是否返回'a> b'或'+ a> + b'的结果。 – RobG 2011-05-19 02:14:37
这是普通的javascript(而不是jQuery)代码。
这可以被改写为
if (isNaN(a) || isNaN(b)) {
return a > b;
} else {
return +a > +b;
}
如果任何一个参数是不是一个数字(如果条款),则该函数将仍然尝试着做一些比较,并返回结果。否则它会将它们强制为数字,然后进行比较。也许参数的顺序应该改变...
条件写入是否正确?它似乎说,如果a或b不是数字,如果a大于b似乎没有道理,或者我在这里丢失了某些东西,那么返回true? – 2011-05-19 01:32:15