Все они являются свойствами глобального объекта, но они не зарезервированы; вы можете синтаксически объявлять переменные с этими именами (если только вы не на верхнем уровне - на верхнем уровне идентификаторы ссылаются на значения глобального объекта и не могут быть переназначены):
console.log(
window.hasOwnProperty('undefined'),
window.hasOwnProperty('NaN'),
window.hasOwnProperty('Infinity'),
);
(() => {
const undefined = 'foo';
const NaN = 'bar';
const Infinity = 'baz';
console.log('No error');
})();
Зарезервированные ключевые слова, с другой стороны, не могут использоваться в качестве идентификаторов (имен переменных).