Я создаю транспилятор для нового языка программирования с именем Serif. Транспилятор выводит код JavaScript. Грамматика Serif не содержит нулевого литерала. Это создает проблему: Serif предназначен для взаимодействия с экосистемой JavaScript, а API-интерфейсы JavaScript иногда используют нулевое значение.
Я ищу надежный способ получить доступ к нулевому значению. В настоящее время я использую JSON.parse("null"), что ясно выражает мои намерения. Какие есть другие варианты? Я хотел бы найти подход, который не требует вызова функции.
В Serif null — это идентификатор. Если не затенено, null предоставляет доступ к нулевому значению JavaScript. Следующий код демонстрирует эквивалент Object.create(null) с засечками и вывод JavaScript.
example.serif (входной файл)
Object.create null;
example.js (выходной файл)
const null$ = globalThis.JSON.parse("null");
Object.create(null$);
Я ищу более простой способ определить null$ в выходном файле. (Я использую globalThis.JSON, а не JSON, поэтому JSON при желании можно использовать как переменную верхнего уровня в модуле Serif.)
вар myNull = недействительным (нуль); XD
Я хочу, чтобы люди, пишущие код Serif, могли использовать null, обычный идентификатор, для ссылки на нулевое значение. В коде JavaScript это обесценит null$, где null$ импортируется из прелюдии Serif (стандартная библиотека). Вопрос в том, как определить null в прелюдии, которая сама написана с засечками.
const null = символ («нуль»); const null$ = Symbol('null');
Изобретение нового нулевого значения не является моей целью, Матиас. Мне нужно фактическое нулевое значение (например, для предоставления Object.create).
Включите в вопрос пример транспиляции с нулем, как это делается в текущем состоянии. И источник, и результат.
Спасибо за предложение, блэкуотер. Я обновил вопрос.
«Как определить null в прелюдии, которая сама написана с засечками». - тогда просто не пишите (всю) прелюдию с засечками.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вот два других выражения, которые оцениваются как null:
> /x/.exec("")
null
> "".match(/x/)
null
Я нахожу это менее понятным, чем JSON.parse("null").
В спецификации JS не так много операций, которые возвращают null:
Object.getPrototypeOf(Object.prototype) — я бы порекомендовал это для вашего проекта, так как это в значительной степени определение null в JS, «отсутствующий объект».null./[]/.exec("") или "".match(/[]/)JSON.parse("null")new Date(NaN).toJSON()
Выполнение эквивалента eval кажется безрассудным поступком, поощряемым замыслом. Почему бы не иметь основную функцию, которая возвращает «ноль»? Для этого не обязательно должен быть литерал.