我最近遇到了以下代码:
function baseClamp(number, lower, upper) {
if (number === number) {
if (upper !== undefined) {
number = number <= upper ? number : upper;
}
if (lower !== undefined) {
number = number >= lower ? number : lower;
}
}
return number;
}
函数开头的条件很有趣。
if (number === number) {
我在Chrome中测试了以下内容:
var number = undefined;
number === number
true
number = null
number === number
true
number = NaN
number === number
false
number === number
只是检查NaN还是还有更多内容?
答案 0 :(得分:2)
number === number
只检查number
是否不是NaN
。 NaN
是唯一不等于自身的值。
number === number
可以替换为!Number.isNaN(number)
(请参阅MDN docs)。
答案 1 :(得分:1)
NaN
是ECMAscript中唯一不相等的值。
此功能相当于Math.min(Math.max(number, lower), upper)
,似乎表现相同。如果number
为NaN
,则会跳过任何处理。
function baseClamp(number, lower, upper) {
if (number === number) {
if (upper !== undefined) {
number = number <= upper ? number : upper;
}
if (lower !== undefined) {
number = number >= lower ? number : lower;
}
}
return number;
}
function mathClamp(number, lower, upper) {
return Math.min(Math.max(number, lower), upper);
}
console.log([-10, 0, 10, NaN].map(it => [baseClamp(it, 0, 10), mathClamp(it, 0, 10)]));
&#13;