Ответ 1
Это определенно выглядит как ошибка.
Из спецификации ECMAScript 5.1:
Соответствующие реализации JSON.parse и JSON.stringify должны поддерживать точный формат обмена, описанный в этой спецификации, без каких-либо удалений или расширений в формате. Это отличается от RFC 4627, который позволяет JSON-парсеру принимать формы и расширения, отличные от JSON.
и
JSON.stringify создает строку, которая соответствует следующей грамматике JSON. JSON.parse принимает строку, которая соответствует грамматике JSON
Возможно, он каким-то образом завершает строку в объекте типа "JSONText", который все еще имеет typeof
of string
, но это кажется очень странным.
Я бы определенно подумал, что следующая реализация в этом случае является правильной:
JSON.stringify(2) == "2" && JSON.stringify(2) === "2" && JSON.stringify(2) == 2 && JSON.stringify(2) !== 2;
true
Согласно @6502 (см. комментарий), это true
в:
Хром; Fire Fox; IE9; iPad Safari; OsX Safari; браузер Android N1
Документ спецификации ECMAScript 5.1: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf