В веб разработке не найдется людей, которым не приходилось бы работать с JavaScript. Сам язык является диалектом ECMAScript, основаным на спецификации ECMA-262. В результате реализации спецификации, язык JavaScript просто напичкан "интересными возможностями". Иногда некоторое поведение языка вызывает бурю негодования. Чтобы зверь не укусил тебя за задницу, нужно знать его повадки. В этой статье попробую описать необычные «повадки»
Операции суммирования и вычитания В суммирование однотипных простых значений (типа строка, число) нет ничего особенного, и все они проводятся согласно логическим правилам исходя из типа. Многие из вас, наверное, знают про маленькую особенность, которою можно наблюдать при суммировании строки и числа. Такие моменты обусловлены правилом неявного преобразования типов. Но знаете ли вы обо всех? Code var p1 = "3" + 1; // p1 = "31" var p2 = "3" - 1; // p2 = 2 var p3 = "3" - -"1"; // p3 = 4
Как оказывается, в результате сложения строки и числа, вы получаете строку, а вот если вы будете вычитать из строки число или из строки строку, то получите опять- таки число.
Сравнения Сравнение имеет тоже свою магию. И, порой, можно получить просто неожиданный результат. Code var n = ''=='0'; var n1 = 0==''; var n2 = 0=='0'; var n3 = false=='false'; var n4 = false=='0'; var n5 = false==undefined; var n6 = false==null; var n7 = null==undefined; var n8 = " \t\r\n"==0;
Еще один из интересных моментов связан со сравнением массивов. Еще более удивительным может показаться следующие сравнение Ну и что бы окончательно убедится, что сравнение массивов обладает истинной магией, посмотрите на вот этот пример. Code var a = { "item" : 1 }; var n2 = a[[[["item"]]]]==a["item"];
Особенность работы с типом undefined Этот тип состоит из единственного значения undefined. Данное значение принимают все переменные, которые объявлены, но которым еще не присвоено значение. Code var i = {}; var n = i.j===undefined;
Особенность заключается в том, что если данной переменной undefined присвоить другое значение, то результат при сравнении не заданного свойства с этим значением будет давать значение false; Code undefined = 1; var n1 = i.j===undefined;
Для избежания ошибок в коде лучше использовать сравнение типов. Code var n2 = typeof i.j=="undefined";
Преобразования строки в число Функция parseInt преобразует строку в число по указанному основанию. Code var n1 = parseInt('06'); var n2 = parseInt('07'); var n3 = parseInt('08'); var n4 = parseInt('09'); var n5 = parseInt('10');
Будьте бдительны при использовании этого метода :).
Преобразование в логический тип Что бы преобразовать значение в логический тип, вам необходимо сделать следующим образом: Code var n = Boolean(value);
Но есть и другой способ, для этого вам необходимо воспользоваться двойным логическим отрицанием. Code var n1 = !!0; var n2 = !!1; var n3 = !!4; var n4 = !!""; var n5 = !!"0"; var n6 = !!"12";
Операции преобразования будут проведена согласно правилам преобразование к логическому типу.
Округление чисел Для округления в JavaScript вы можете воспользоваться функциями Math.floor(x) или parseInt(x,10). Двойное побитовое NOT (~~) можно так же использовать для округления. Code var n = Math.PI; var n1 = Math.floor(n); var n2 = parseInt(n, 10); var n3 = ~~n;
Очень необычный способ, но результат возвращает корректно :).
Тип Date Дата в JavaScript измеряется в миллисекундах, начиная от полуночи 01 января 1970 года GMT+0. Для получения даты вам нужно создать объект типа Date и передать туда необходимые параметры даты. Code var currentDate = new Date(); var date = new Date(2008,07,06);
Есть интересный момент при работе с датой, связан с тем, что вы можете указывать смещение по годам, месяцам, дням, минутам, секундам. Например, вам необходимо от даты 10.10.2010 узнать дату 1024 дня. Code var futureDate = new Date(2010,10,10+1024); alert(futureDate);
Особенность работы try, catch, finally Как мы все прекрасно знаем, для обработки исключений в javascript нам необходимо использовать конструкцию try...[catch]...[finally]. Казалось, какие особенности может иметь такая конструкция. Рассмотрев в примере от Neil Fraser, мы можем убедится, что все же тут имеется некоторые особенности. Как вы думаете, что какое значение вернет функция f()? Code function f() { try { return true; } finally { return false; } } j = f();
Как оказывается данный метод вернет значение "false".
Обращение к свойствам Javascript имеет два способа используя которые можно получить значение свойства. Первый, обращение через ".", удобней для написания, второй, обращение как к элементу массива, будет полезен в программного доступе к значениям. Code a['title'] = "JavaScript array"; a.title = "JavaScript свойства объекта";
Именно из-за этой особенности можно ответить на вопрос "Как узнать все свойства объекта?". Code var obj = { param1 : JavaScript string", param2 : "Javascript date" }; var result = ''; for (var i in obj) {
result += i + " = " + obj[i] + "\n"; } alert(result);
Аргументы функции При вызове функции вы можете не передавать значение параметров. Но вот если вы передали параметры, а в функции не определены входящие параметры, то вы можете воспользоваться переменной arguments для получения доступа ко всей коллекции полученным параметрам. Code function wow(param1){ var params = arguments; // ["hello", "world"]; } wow("JavaScript tips", "Используем arguments JavaScript");
Источник: Аргументы,функции,Округление,Тип,Date,try, catch, finally,JavaScript,ECMAScript,Операции,Сравнение,undefined,Особенность |