Почему браузеры допускают некоторые глобальные переменные в строгом режиме?

Я не могу понять, почему некоторые браузеры позволяют следующий код, а другие нет:

'use strict';
(function() {
  Number = 1;
  toString = 1;
  valueOf = 1;
})();
console.log(Number);
console.log(toString);
console.log(valueOf);
  • Chrome 52 в Windows выдает toString и valueOf, но позволяет использовать Number.
  • Chrome 49 в Linux бросает значение valuef и позволяет другим.
  • Firefox 47 позволяет все.
  • IE 11 позволяет номер.
  • Опера позволяет номер.

Сначала, когда я обнаружил это в Chrome, я подумал, что это из-за того, что эти "переменные" уже были определены как свойства глобального объекта. Но window.hasOwnProperty('toString') возвращает false, а также для 'valueOf'. Так что понятия не имею.

Кто-нибудь может объяснить это, пожалуйста?

Я спрашиваю, потому что мне нужно проверить в модульных тестах, что глобальные переменные не были изменены, и это поведение затрудняет, потому что я не знаю, какое поведение является правильным, поэтому я мог бы положиться на него и не найти один день, который это было исправлено.

0 ответов

Другие вопросы по тегам