Почему (3) .Constructor действителен, пока «конструктор» в (3) недействителен?
-
28-09-2019 - |
Вопрос
(3).constructor
номер, но "constructor" in (3)
TypeError, почему?
Решение
С использованием Документ на недвижимости, номер 3
превращается в объект Количество. Отказ И объект этого типа имеет конструктор и, следовательно, constructor
свойство.
Но Как уже указал Чаоспандон, то in
оператор требует правильного выражения, чтобы дать объект, но 3
не является объектом, а литералом простого числа.
Другие советы
Спецификация для in
Оператор объясняет это. В частности, см. Шаг 5 семантической оценки.
11,8.7 Оператор
Производственное отношение: отношение относительно использования в ShiftExpression оценивается следующим образом:
- Пусть LREF является результатом оценки соотношения.
- Пусть Lval Be GetValue (LREF).
- Пусть rref будет результатом оценки Shiftexpression.
- Пусть RVAL будет GetWalue (RREF).
- Если тип (RVAL) не объект, бросить Типерр исключение.
- Вернуть результат вызова [[hasproperty]] внутреннего метода RVAL с аргументом ToString (LVAL).
Причина (3).constructor
Работы - это немного сложнее, чтобы понять, но по сути, когда вы используете точечный оператор по ссылке с примитивной основой, она поднимается в объект.