Один проект, о котором я знаю, который обеспечивает подобные функции (встроенное графическое изображение, настраиваемый рендеринг) , Повторно взаимодействуют . Другой (хотя возможно немного тяжеловес для общего использования) SAGE, который обеспечивает функциональность для веб- ноутбуки .
Это не вполне оболочки - они разработаны больше как математический ноутбук (так, например, можно изменить более ранний результат и иметь изменение propogate к более поздним вычислениям), но они близко к тому, что Вы ищете и могли, вероятно, быть изменены, чтобы использоваться как таковые.
Мне нравится использовать Lodash для разнообразия оборона, кодирующая причины, а также удобочитаемость. ES6 Number.isFinite
является большим и не имеет проблем с нечисловыми значениями, но если ES6 не возможен, Вы уже имеете lodash или хотите более краткий код: _ .isFinite
_.isFinite(Infinity); // false
_.isFinite(NaN); // false
_.isFinite(-Infinity); // false
_.isFinite(null); // false
_.isFinite(3); // true
_.isFinite('3'); // true
Я имею, столкнулся со сценарием, который потребовал, чтобы я проверил, имеет ли значение NaN
или Infinity
тип, но строки передачи как допустимые результаты. Поскольку много текстовых строк произведут ложно-положительный NaN
, я сделал простое решение для хитрости этого:
const testInput = input => input + "" === "NaN" || input + "" === "Infinity";
вышеупомянутый код преобразовывает значения в строки и проверки, строго ли они равны NaN или Бесконечности (необходимо будет добавить другой случай для отрицательной бесконечности).
Так:
testInput(1/0); // true
testInput(parseInt("String")); // true
testInput("String"); // false