Почему бесконечность не выдает ошибку при попытке переназначения, но не назначаема?
var x = 3;
x = 1; // good, normal
true = 3; // error, normal
Infinity = 4; // no error
console.log(Infinity); // Infinity
Почему бесконечность не выдает ошибку при попытке переназначения, но не назначаема?
var x = 3;
x = 1; // good, normal
true = 3; // error, normal
Infinity = 4; // no error
console.log(Infinity); // Infinity
Как вы можете прочитать здесь:
Бесконечность — это свойство глобального объекта, или, другими словами, переменная в глобальной области действия.
Поскольку это глобальное свойство, вы можете получить к нему доступ и присвоить любое значение. Однако присвоение значения свойству, не доступному для записи, не вызывает никаких исключений, когда вы находитесь в не строгом режиме, и не изменить значение свойства.
Если вы используете «строгий режим», будет возбуждено исключение.
"use strict"
Infinity = 4;
Number
или String
? ни один из них не генерирует ошибку в строгом режиме?
- person ; 29.09.2019
Number
, и String
являются указателями, указывающими на функцию-конструктор Number и функцию-конструктор String. Вы можете убедиться в этом, если откроете консоль и просто напишете Number, тогда будет вывод: ƒ Number() { [собственный код]. Дополнительную информацию об этом объекте см. на странице разработчика. .mozilla.org/en-US/docs/Web/JavaScript/Reference/. Теперь попробуйте сделать это let a = new Number('5')
, а затем проверьте это a instanceof Number
, выводит true
.
- person Christos; 29.09.2019
let b = new Number('4)
, вы получите сообщение об ошибке VM802:1 Uncaught TypeError: Number не является конструктором в ‹anonymous›:1:5 По сути, вы изменили ссылку, на которую указывает Number. В основном это означает, что Number является записываемым свойством. К сожалению, у меня нет ссылки на это, но это видно из вышеизложенного. Примечание: проверьте приведенный выше код как в строгом, так и в нестрогом режиме. Вы не заметите никакой разницы.
- person Christos; 29.09.2019
Infinity
доступен только для чтения, если вы будете использовать строгий режим и попытаетесь объявить переменную с именем Infinity, это вызовет ошибку. - person Teemu   schedule 28.09.2019