Блог Сергея Байдачного

Мой блог о технологиях

Зарисовки по JavaScript для .NET разработчиков: Больше строгости

leave a comment »

В предыдущей статье я написал, почему меня заинтересовал JavaScript, а также постарался раскрыть объектно-ориентированную сторону этого языка. Сейчас мне бы хотелось немного углубиться в детали реализации и начну я с мелочей, которые могут привести к большому количеству ошибок.

Как я писал ранее, JavaScript позволяет объявить переменную с помощью ключевого слова var и область видимости переменной задается функцией или глобальным объектом. Но помимо переменных в JavaScript присутствуют свойства объектов. Чтобы объявить свойство, достаточно записать имя объекта (или использовать par1в функции-конструкторе), а затем, через точку, имя свойства, которому присвоить некоторое значение:

 

   1:  p.i=3;

 

Свойства можно объявить и при создании объекта с помощью литерала, а также расширяя прототип объекта. В конечном итоге это сейчас не важно. Сконцентрируемся на том, можно ли добавить свойство к глобальному объекту? Можно, и для этого можно использовать слово this в контексте глобального объекта, объект window или же просто записать имя свойства и присвоить ему значение:

 

   1:  par1 = 5;
   2:   
   3:  alert(window.par1);

 

Код выше замечательно работает в любом месте приложения, объявляя свойство глобального объекта par1, а затем печатая его содержимое на экран.

А теперь представим себе код, в котором мы объявляем переменную с некоторым именем, а ниже, меняем значение этой переменной, но допускаем опечатку в имени (например, я все время вместо window пишу windows):

 

(function test() {

var val1 = 10;

. . . . .

vall1 = 11;

})();

 

В данном коде не произойдет никакой ошибки. По мнению JavaScript мы определяем переменную val1, а затем определяем свойство глобального объекта vall1. Как долго Вы будете искать подобные ошибки, и нужна ли Вам такая не строгость при объявлении переменных и свойств? Возможно, стоило бы исключить подобные неоднозначности из языка. Так вот, при разработке версии ECMA Script 5 об этом подумали и решили ввести специальную возможность, исключающую неоднозначности и старые возможности языка из Вашего кода – это специальный режим strict. В будущем планируется, что подобный режим будет работать по умолчанию, но поскольку реализаций ECMA Script 5 сейчас практически нигде нет, а старых библиотек громадное количество, Вы сами можете решать, где включать strict режим, а где нет.

Процедура следующая: при разработке собственного кода, в области видимости Ваших функций, вы указываете текстовую строку use strict”;, которая включает strict режим в тех браузерах, где он поддерживается. В остальных браузерах JavaScript сталкивается со строковым литералом, который не приносит особого вреда. На следующем этапе Вы тестируете Ваше приложение в браузерах, поддерживающих strict, и избавляетесь от «плохого» кода (поскольку получаете ошибки во время выполнения там, где раньше все хорошо работало в условиях неоднозначности). Таким образом, если мы изменим код нашей функции, используя strict, то должны получить сообщение об ошибке:

 

   1:  (function test() {
   2:   
   3:  "use strict";
   4:   
   5:  var val1 = 10;
   6:   
   7:  . . . . .
   8:   
   9:  vall1 = 11;
  10:   
  11:  })();

 

Осталось найти браузер, который уже поддерживает какие-то возможности ECMA Script 5. Поскольку во время написания этого поста я ехал в поезде, то пришлось пробовать те браузеры, которые у меня стояли на машине: Internet Explorer 9, Opera 11.11, Internet Explorer 10 Platform Preview. (Opera у меня стоит только для демонстрации своей несостоятельности). Конечно, я бросился проверять данный код в Opera. И был удивлен тем, что там он замечательно работает и не выдает ошибку. Аналогичная реакция была и в IE 9. Но вот Internet Explorer 10 меня порадовал:

 

image

 

Вот она ошибочка. И время на ее поиски совсем не потрачено.

И стало мне хорошо и приятно за наш Internet Explorer 10.

Но вернемся к JavaScript. Существует еще один механизм определения «плохого» кода. Это специальная утилита, которую можно найти по адресу http://jslint.com/. Если наш код скопировать в окно на этом сайте, то мы получим аналогичную ошибку. Именно поэтому, тестирование кода в режиме strict, а также использование утилиты JSLint, позволит Вам писать хороший код без ошибок.

Конечно, копировать Ваш код из окна Visual Studio дело неблагодарное (учитывая поток изменений), поэтому рекомендую всем скачать соответствующий плагин для Visual Studio 2010 с сайта http://jslint4vs2010.codeplex.com/. И будет Вам счастье:

 

image

Реклама

Written by Sergiy Baydachnyy

26.08.2011 в 14:05

Опубликовано в Internet Explorer 10, JavaScript

Tagged with ,

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: