Лично мое мнение, что это просто побочный эффект от преобразований, так как операторами > | >= | <= | < предпологается сравнение только чисел и больше ничего. Поэтому когда мы ими сравниваем:
рантайм вначале берет и преобразовывает все в числа (преобразовывает так, как эти самые преобразования прописаны для каждого типа), потом сравнивает и выдает нам результат которому мы удивляемся.
Операторы == | === | != | !== в свою очередь предназначены для различных типов, поэтому преобразований не происходит:
NodeJS и Java (да и Линукс то же) без портирования на эльбрусах не заработают.
Раз портировали, значит способны в принципе самостоятельно поддерживать их для себя (в части бакендов, платформозависимой части, во фронтендах не требуется).
NaN — это псевдочисло, любые арифметические операции с которымм всегда возвращают NaN, а операции сравнения всегда возвращают false.
Что бы проверить NaN на NaN, надо использовать функцию «isNaN()»:
let x = 1 * undefined; // NaN
isNaN(x); // true
(x.toString() === "NaN"); // true
Лично мое мнение, что это просто побочный эффект от преобразований, так как операторами > | >= | <= | < предпологается сравнение только чисел и больше ничего. Поэтому когда мы ими сравниваем:
рантайм вначале берет и преобразовывает все в числа (преобразовывает так, как эти самые преобразования прописаны для каждого типа), потом сравнивает и выдает нам результат которому мы удивляемся.
Операторы == | === | != | !== в свою очередь предназначены для различных типов, поэтому преобразований не происходит:
NodeJS и Java (да и Линукс то же) без портирования на эльбрусах не заработают.
Раз портировали, значит способны в принципе самостоятельно поддерживать их для себя (в части бакендов, платформозависимой части, во фронтендах не требуется).
Так что тут вполне себе замещение.
Что бы проверить NaN на NaN, надо использовать функцию «isNaN()»: