scripts

воскресенье, 28 июля 2013 г.

Немного о javasript. Введение. Типы примитивных значений.

Предисловие.
Не так давно мне посчастливилось пообщаться с хорошими ребятами, которые очень хорошо знают JavaScript. В процессе беседы я понял, что некоторые моменты не очень хорошо понимаю. Цель этой статьи - разобрать некоторые основные моменты в JavaScript ( в первую очередь самому ).

Введение.
Давным-давно (хотя не так уж и давно) в 2008 году, решив стать программистом, я подошел к этому серьезно и решил получить системные знания. Для этого получил высшее образование в области разработки ПО (вечерняя форма), а параллельно с учебой работал программистом. Так вот, диплом я писал на C# и был в легком восторге от платформы .net и конечно в мыслях представлял себя программистом под эту платформу.
Но жизнь вносит свои коррективы, первая моя работа после учебы и переезда в другой город была связана с клиентской разработкой на JavaScript. Признаюсь, что когда я только начал с ним работать, я думал, что это не серьезный язык программирования (до этого я работал с Delphi, PHP, 1С, C#) и поэтому особо не думал о его изучении.
Язык программирования JavaScript на мой взгляд очень дружелюбный, он позволил мне делать довольно серьезные вещи очень поверхностно понимая сам язык. И вот проработав с JavaScript 1 год - плотно и 1 год периодически, я решил навести порядок у себя в голове, восполнить и упорядочить свои знания.
Я благодарен JavaScript за его дружелюбие и глубину, и рад, что он набирает популярность. Конечно, когда планируешь быть программистом на C# - думаешь, блин, это же серьезный язык, его спроектировали серьезные ребята, они изучили кучу языков, выбрали из них лучшее, чтобы этот язык получился самый лучший. Сразу берешь книгу, начинаешь разбираться, писать маленькие программульки, настраиваешься на серьезную работу. А что JavaScript? Да его какой-то гик за 10 дней и ночей написал, вообще странно, что этот язык еще жив и вытеснил из браузеров такого гиганта как Java. Хотя самое первое удивление такое, а что JavaScript - это не Java =-O ?
Тут тебе предлагают разрабатывать на JavaScript. Ну а почему бы и нет? Язык не сложный. Переменные, функции, массивы, объекты, условные операторы, циклы - этого достаточно. Быстренько прочитать обзорную статью, о я понял нужен файл с раcширением js, в него пишешь код и прописываешь путь к этому файлу в html. Хорошо, я согласен. Начинаем работать.
И такое поверхностное отношение к JavaScript очень не справедливо!
Конечно, сейчас он на коне и думаю теперь большинство более основательно подходит к изучению этого языка, но до сих пор попадаются довольно серьезные проекты, в которых код структурирован таким образом:
var ...
var ...
function ...
function ...
function ...
Конечно это все работает, но только понимание сильных сторон языка, знание паттернов и принципов грамотной организации кода могут принести радость от работы на этом языке.
Особенно меня огорчает, когда люди даже и не стремятся разобраться и понять глубже JavaScript (это наверное касается и других вещей).
JavaScript дает мне радость от работы с ним и я хочу вернуть должок и разобрать моменты, которые когда то поверхностно прочитал или не прочитал вовсе. Вперед.

1. Типы дынных.
1.1 Типы примитивных значений.
Когда-то я прочитал такое высказывание, что всё в javascipt является объектами и так мне эта мысль глубоко засела в голову, что потребовалось внимательное разбирательство, чтобы это исправить. Ведь на самом деле в javascript типы делятся на primitive data types (типы примитивных значений) и object.
Итак типы примитивных значений:
  • string;
  • number;
  • boolean (tru, false);
  • undefind;
  • null;
Здесь у меня появился резонный вопрос, а какова их суть? В книжках обычно не разжевывается, что собой представляют primitive data types. Но не надо забывать, что есть спецификация ECMA-262 и там сказано, что значения этих типов в реализации представляются напрямую на низком уровне (дальше я копать не стал). Они не являются объектами, у них нет прототипов и конструкторов (а вот это уже ближе к практическому использованию). Здесь особое внимание стоит уделить типу null из-за особенности работы оператора typeof по отношению к этому типу. А именно, typeof null выдает результат "object" и это сбивает столку, если не знать, что typeof обращается к внутренней таблице, где почему то для null прописано возвращать "object". Хотя на самом деле надо бы возвращать null, так как это и есть правда.
Хотелось бы прояснить еще один момент относительно "примитивных" типов. Значения этих типов не имеют свойств и методов, но как же тогда объяснить такое поведение строкового литерала.
  • "Pupkin".length
  • 6
Дело тут в том, что в JavaScript для чисел, строк и логических значений существуют объекты-обертки. Объекты-обертки обладают рядом разнообразных свойств и методов, которые делают работу с "примитивными" типами более удобной. На самом деле этот не идет вразрез с определением "примитивных" типов. Просто интерпретатор при передаче ему выражения
  • "Pupkin".length
 за кулисами временно создает объект из строки (new String("Pupkin")) вызывает метод length у этого объекта, а результат возвращается в виде строки. Конечно с точки зрения человека, создается ложное ощущение, что примитив строки имеет метод lenght.
Удачи!

Комментариев нет:

Отправить комментарий