JavaScript numeric self-determination

I recently came across the following code:

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;
}

The conditional at the beginning of the function is interesting.

  if (number === number) {

In Chrome, I tested the following:

var number = undefined;
number === number
true
number = null
number === number
true
number = NaN
number === number
false

Does it check number === numberfor NaN or is there more?

+4
source share
2 answers

number === numberjust checking, not numbernot NaN. NaN- the only meaning that is not equal to itself.

number === numbercan be replaced with !Number.isNaN(number)in modern browsers (see MDN docs ).

+2
source

NaN is the only value in ECMAscript that is not equal to itself.

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)]));
Hide result
+1

Source: https://habr.com/ru/post/1654596/


All Articles