JavaScript. Подробное руководство, 6-е издание, стр. 146
Подмножество не включает оператор точки, битовые операторы и операторы
<b>++</b><b>--</b><b>==</b><b>! =</b><b>===</b><b>!==</b>Поскольку в языке JavaScript отсутствует понятие области видимости блока, подмножество Крокфорда разрешает использовать инструкцию
<b>var</b><b>var</b>Созданный Крокфордом веб-инструмент проверки качества программного кода ( http://jslint.com) включает возможность проверки на соответствие требованиям подмножества Good Parts. Помимо проверок на отсутствие в программном коде недопустимых особенностей, инструмент JSLint также проверяет соблюдение общепринятых правил оформления, таких как корректное оформление отступов.
Крокфорд написал свою книгу до того, как в ECMAScript 5 был определен строгий режим, и теперь многие «недостатки» JavaScript, использование которых он осуждает в своей книге, могут быть запрещены за счет использования строгого режима. Теперь, с принятием стандарта ECMAScript 5, инструмент JSLint требует, чтобы программы включали директиву «use strict», если перед проверкой был включен параметр «The Good Parts».
11.1.2. Безопасные подмножества
Good Parts - это подмножество языка, созданное исходя из эстетических соображений и желания повысить производительность труда программиста. Существует также обширная категория подмножеств, созданных с целью повышения безопасности при выполнении программного кода JavaScript в безопасном окружении, или в «песочнице». Безопасные подмножества запрещают использование особенностей языка и библиотек, которые позволяют программному коду вырваться за пределы «песочницы» и влиять на глобальное окружение. Каждое подмножество снабжается статическим инструментом проверки, который анализирует программный код, чтобы убедиться, что он соответствует требованиям подмножества. Поскольку подмножества языка, которые могут пройти статическую проверку, обычно оказываются довольно ограниченными, некоторые системы организации безопасного окружения определяют большее, не так сильно ограничивающее, подмножество, добавляют этап трансформации программного кода, на котором выполняется проверка его соответствия более широкому подмножеству, и производят трансформацию программного кода для использования с более узким подмножеством языка. А кроме того, добавляют проверки времени выполнения в тех случаях, когда статический анализ программного кода не гарантирует полную безопасность.
Чтобы обеспечить приемлемый уровень безопасности при статической проверке, из языка JavaScript должны быть исключены следующие особенности:
• Ни в одном безопасном подмножестве не допускается использовать функцию
<b>eval()</b><b>Function(),</b>• Ограничивается или полностью исключается возможность использовать ключевое слово
<b>this</b><b>this</b>• Зачастую в безопасных подмножествах запрещается использовать инструкцию
<b>with</b>• В безопасных подмножествах не допускается использовать некоторые глобальные переменные. В клиентском JavaScript объект окна броузера дублирует глобальный объект, поэтому программному коду запрещается ссылаться на объект
<b>window</b><b>document</b><b>document</b><b>document</b>• В безопасных подмножествах не допускается использовать некоторые специальные свойства и методы, потому что они дают слишком широкие возможности потенциально небезопасному программному коду. В число таких свойств и методов обычно включаются свойства
<b>caller</b><b>callee</b><b>arguments</b><b>arguments</b><b>call()</b><b>аррlу()</b><b>constructor</b><b>prototype</b><b>__proto__</b>Некоторые подмножества идут по пути явного запрещения использования небезопасных свойств и глобальных переменных. Другие идут по пути разрешения доступа только к определенным, безопасным свойствам.
• Статический анализ с легкостью выявляет доступ к специальным свойствам, когда выражение доступа к свойству использует оператор точки. Но проверить присутствие обращений с помощью [ ] гораздо сложнее, потому что статический анализ не позволяет проверить все возможные варианты строковых выражений в квадратных скобках. По этой причине безопасные подмножества обычно запрещают использование квадратных скобок, если только выражение в них не является числовым или строковым литералом. Безопасные подмножества замещают операторы [] вызовами глобальных функций, выполняющих чтение и запись в свойства объектов - эти функции выполняют дополнительные проверки во время выполнения, чтобы убедиться, что программный код не пытается обратиться к запрещенным свойствам.
Некоторые из этих ограничений, такие как запрет на использование функции
<b>eval()</b><b>with</b><b>this</b>