2011-05-19 259 views
1
function compare(a, b) { 
    return isNaN(a) || isNaN(b) ? a > b : +a > +b; 
} 
var c = compare(10,5); 
alert("C value ==?"+c); 

我在理解上述脚本时遇到了困难。如何从compare()返回布尔值truefalse。如何生成布尔值true。请解释。布尔值如何从此语句返回true或false

+0

条件写入是否正确?它似乎说,如果a或b不是数字,如果a大于b似乎没有道理,或者我在这里丢失了某些东西,那么返回true? – 2011-05-19 01:32:15

回答

2
return isNaN(a) || isNaN(b) ? a > b : +a > +b; 

这检查,看看是否任何ab不是数字(IsNan)。如果任一测试结果为真,则返回a > b的结果;如果它们都不是NAN,则返回+a > +b的结果。阅读Javascript的ternary(有条件)运营商的文档。

,以确保它很清楚,测试是:

如果不是数字或B不是 号,返回true,如果一个大 比B,否则尝试转换和 b都为数字并返回是否 比b

注意,整个表达式是没有意义的,因为它要返回相等测试,即使是试图转换后有什么可能不是数字更大。

+0

这是不正确的。 '+'运算符被重载,在OP的上下文中它充当*一元加运算符*(ECMA-262§11.4.6)。它将以下标识符转换为数字(如果可以),它不一定会将其转换为正值。 – RobG 2011-05-19 02:11:34

+0

@RobG:感谢您的纠正。我会尝试纠正我的答案以反映它。 – 2011-05-19 02:59:11

1

那么return语句有两种可能的方式返回值,两者都是布尔:

return isNaN(a) || isNaN(b) ? a > b : +a > +b; 

可以返回这个(一个布尔值)

isNaN(a) 

还是这个(也是布尔 - 它是一个比较运算符)

+a > +b; 
+2

它不会返回'isNan(a)'。该表达式仅用于确定是否返回'a> b'或'+ a> + b'的结果。 – RobG 2011-05-19 02:14:37

1

这是普通的javascript(而不是jQuery)代码。

这可以被改写为

if (isNaN(a) || isNaN(b)) { 
    return a > b; 
} else { 
    return +a > +b; 
} 

如果任何一个参数是不是一个数字(如果条款),则该函数将仍然尝试着做一些比较,并返回结果。否则它会将它们强制为数字,然后进行比较。也许参数的顺序应该改变...

+1

是否有任何地方提及jQuery? :) – alex 2011-05-19 01:33:17

+0

@alex:问题最初是用'jquery'和'jquery-ui'标记的。 – Jeremy 2011-05-19 01:38:43

+0

@Jeremy我应该看看未来的编辑历史:) – alex 2011-05-19 01:47:47