Почему браузеры допускают некоторые глобальные переменные в строгом режиме?
Я не могу понять, почему некоторые браузеры позволяют следующий код, а другие нет:
'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'. Так что понятия не имею.
Кто-нибудь может объяснить это, пожалуйста?
Я спрашиваю, потому что мне нужно проверить в модульных тестах, что глобальные переменные не были изменены, и это поведение затрудняет, потому что я не знаю, какое поведение является правильным, поэтому я мог бы положиться на него и не найти один день, который это было исправлено.