Показать сообщение отдельно
  #10 (permalink)  
Старый 16.07.2012, 09:57
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от oneguy
Не так. В спецификации написано, что генерировать исключение, если выполняются все 4 условия одновременно:
Да, здесь я блажанул

Сообщение от oneguy
Не понял вопрос. Объясните поподробнее, пожалуйста, что определить, как и при каких условиях.
Вопрос в том как определять, какие типы можно отнести к типу Reference, а какие нет.


Алгоритм выполняется последовательно, поэтому пытаемся разобрать фразу Type(lhs) равно Reference равно true:

Type(lhs)
Цитата:
В тексте данной спецификации выражение "Type(x)" используется в качестве сокращения для фразы "тип, к которому относится x", где "тип" означает языковой тип и тип спецификации, описываемые в данной главе.
то есть определяется тип левостороннего выражения
далее этот тип сравнивается с типом Reference

собственно о Reference http://es5.javascript.ru/x8.html#x8.7
Цитата:
8.7 Тип спецификации Reference # Ⓣ
Тип Reference Cсылка используется, чтобы объяснить поведение операторов delete и typeof и операторов присваивания. Например, можно сказать, что "левосторонний операнд присваивания создаёт ссылку". Поведение операторов присваивания можно также объяснить и анализом синтаксической формы левостороннего оператора. Но здесь есть одна сложность: вызовы функции могут возвращать ссылки. Правда, эта возможность применима только к объектам среды: возврат ссылки не предусмотрен ни для функций ECMAScript, определяемых данной спецификацией, ни для функций, определяемых пользователем. (Еще один довод против синтаксического анализа заключается в том, что это было бы долго и неудобно, и затрагивало бы многие части спецификации.)

Reference является предвычисленной resolved привязкой имени. Ссылка состоит из трех компонентов: значения базы base value, имени по ссылке referenced name, и флага строгой ссылки strict reference с булевым значением. Значение базы – это undefined, Object, Boolean, String, Number, или запись окружения (10.2.1). Если значение базы – undefined, это означает, что значение по ссылке не удалось вычислить. Имя по ссылке – это строка.

Для доступа к компонентам ссылок в данной спецификации используются следующие абстрактные операции:

GetBase(V) Получить базу(V). Возвращает компонент со значением базы ссылки V.
GetReferencedName(V) Получить имя по ссылке(V). Возвращает компонент имени по ссылке для ссылки V.
IsStrictReference(V) Является строгой ссылкой(V). Возвращает компонент строгой ссылки для ссылки V.
HasPrimitiveBase(V) Имеет примитивную базу(V). Возвращает true, если значение базы – Boolean, String или Number.
IsPropertyReference(V) Является ссылкой на свойство(V). Возвращает true, если либо значение базы является объектом, либо HasPrimitiveBase(V) – true; в противном случае возвращает false.
IsUnresolvableReference(V) Является неразрешимой ссылкой(V). Возвращает true, если значение базы – undefined, в противном случае возвращает false.

/////Далее описывается алгоритм работы getValue и putValue.
На какой основе понять, что полученный тип Type(lhs) равен или не равен типу Reference, собственно из того, что здесь приведено у меня пока не получается сделать такой вывод.
Ответить с цитированием