Проверка наличия NaN в коде asm.js

Как я могу эффективно проверить в коде asm.js, является ли значение с плавающей точкой NaN?

Принцип, который работает в принципе, это импортировать глобальный isNaN Функция JavaScript как сторонняя функция в модуле asm.js. Поскольку вызов внешней функции дорог, тем не менее, это не даст оптимального кода.

Сравнивать со значением NaN (которое является частью стандартной библиотеки) невозможно, так как сравнение NaN с другим NaN всегда дает ложь по семантике JavaScript.

Изучение битов в куче также не вариант, потому что не указан порядок байтов.

Почему isNaN не является частью стандартной библиотеки в asm.js?

2 ответа

Решение

Это свойство NaN обычно используется для его идентификации:

var isNaN = a!=a; 

Из Википедии:

Предикаты равенства и неравенства не сигнализируют, поэтому x = x, возвращающий false, можно использовать для проверки, является ли x спокойным NaN

if (value !== value) {
    // Definitely NaN
}

Вы можете сделать это как функцию, как это

function isNaN(inputValue) {
    return inputValue !== inputValue;
}
Другие вопросы по тегам