Вот несколько жемчужин:
Литералы:
var obj = {}; // Object literal, equivalent to var obj = new Object();
var arr = []; // Array literal, equivalent to var arr = new Array();
var regex = /something/; // Regular expression literal, equivalent to var regex = new RegExp('something');
По умолчанию:
arg = arg || 'default'; // if arg evaluates to false, use 'default', which is the same as:
arg = !!arg ? arg : 'default';
Конечно, мы знаем анонимные функции, но возможность рассматривать их как литералы и выполнять их на месте (как закрытие) - это здорово:
(function() { ... })(); // Creates an anonymous function and executes it
Вопрос: Какой еще отличный синтаксический сахар доступен в javascript?
Ответы:
Получение текущего даты и времени в миллисекундах:
Date.now()
Например, чтобы рассчитать время выполнения раздела кода:
var start = Date.now(); // some code alert((Date.now() - start) + " ms elapsed");
источник
Тест на принадлежность к объекту:
источник
В Mozilla (и, как сообщается, в IE7) вы можете создать константу XML, используя:
Вы также можете заменять переменные:
источник
Использование анонимных функций и закрытия для создания частной переменной (скрытие информации) и связанных методов get / set:
var getter, setter; (function() { var _privateVar=123; getter = function() { return _privateVar; }; setter = function(v) { _privateVar = v; }; })()
источник
if(true) { let _privateVar=123; }
Возможность расширения собственных типов JavaScript с помощью прототипного наследования.
String.prototype.isNullOrEmpty = function(input) { return input === null || input.length === 0; }
источник
Используйте
===
для сравнения значения и типа:источник
$var1 = 'string'; $var2 = 'string'; $var1 === $var2; // true
, даже если$var1
и$var2
не идентичны (ссылки на одно и то же сохраненное значение в памяти), просто одного типа и одного и того же значения.var1 = {a : 'b'}; var2 = {a : 'b'}; var1 === var2 // false
.Многострочные струны:
Поскольку вы не можете делать отступ в последующих строках, не добавляя пробелов в строку, люди обычно предпочитают объединять с помощью оператора плюс. Но это дает прекрасную возможность документирования .
источник
Изменить размер массива
Свойство length доступно не только для чтения . Вы можете использовать его для увеличения или уменьшения размера массива.
var myArray = [1,2,3]; myArray.length // 3 elements. myArray.length = 2; //Deletes the last element. myArray.length = 20 // Adds 18 elements to the array; the elements have the empty value. A sparse array.
источник
push
Для меня больше нет , хе-хе. Огромное спасибо.Повторение строки, такой как «-», определенное количество раз, используя метод соединения для пустого массива:
var s = new Array(repeat+1).join("-");
При повторении == 3 будет получено "---".
источник
Как и оператор по умолчанию,
||
это оператор-охранник&&
.в отличие от
if (obj) { answer = obj.property; } else { answer = null; }
источник
null
. Это только тот случай, когдаobj === null
.var tags = { name: "Jack", location: "USA" }; "Name: {name}<br>From {location}".replace(/\{(.*?)\}/gim, function(all, match){ return tags[match]; });
обратный вызов для замены строки просто полезен.
источник
Геттеры и сеттеры :
function Foo(bar) { this._bar = bar; } Foo.prototype = { get bar() { return this._bar; }, set bar(bar) { this._bar = bar.toUpperCase(); } };
Дает нам:
>>> var myFoo = new Foo("bar"); >>> myFoo.bar "BAR" >>> myFoo.bar = "Baz"; >>> myFoo.bar "BAZ"
источник
Это не эксклюзивный javascript, но сохраняет как три строки кода:
источник
Еще немного на примере Левика:
var foo = (condition) ? value1 : value2;
источник
Массив # Foreach на Javascript 1.6
myArray.forEach(function(element) { alert(element); });
источник
После obj || {default: true} синтаксис:
вызов вашей функции с помощью этого: hello (requiredOne && requiredTwo && needThree), если один параметр не определен или false, тогда он вызовет hello (false), иногда полезно
источник
В ситуациях парсинга с фиксированным набором комплектующих:
var str = "John Doe";
Вы можете присвоить результаты непосредственно переменным, используя synatx "деструктурирующее присвоение":
var [fname, lname] = str.split(" "); alert(lname + ", " + fname);
Что немного читабельнее, чем:
var a = str.split(" "); alert(a[1] + ", " + a[0]);
Альтернативно:
var [str, fname, lname] = str.match(/(.*) (.*)/);
Обратите внимание, что это функция Javascript 1.7 . На данный момент это браузеры Mozilla 2.0+ и Chrome 6+.
источник
SyntaxError: Unexpected token [
.Немедленно вызываемая стрелочная функция:
var test = "hello, world!"; (() => test)(); //returns "hello, world!";
источник
Я забыл:
(function() { ... }).someMethod(); // Functions as objects
источник
Создайте анонимный литерал объекта с помощью простого: ({})
Пример: нужно знать, есть ли у объектов метод valueOf:
var hasValueOf = !! ({}). valueOf
Дополнительный синтаксический сахар: двойное не "!!" для очень краткого преобразования почти всего в логическое значение.
источник
Мне нравится иметь возможность eval () json-строки и получить обратно полностью заполненную структуру данных. Ненавижу писать все по крайней мере дважды (один раз для IE, снова для Mozilla).
источник
Присвоение часто используемых ключевых слов (или любых методов) простым переменным, таким как ths
var $$ = document.getElementById; $$('samText');
источник
this
значение потеряно. Вместо этого вы должны использоватьdocument.getElementById.bind(document)
. Безbind
этого просто назначаетсяHTMLDocument.prototype.getElementById
функция, без информации о том, что она должна быть вызванаdocument
.Класс Date в JavaScript, обеспечивающий полу- "Свободный интерфейс". Это компенсирует невозможность напрямую извлечь часть даты из класса Date:
var today = new Date((new Date()).setHours(0, 0, 0, 0));
Это не полностью свободный интерфейс, потому что следующее даст нам только числовое значение, которое на самом деле не является объектом Date:
var today = new Date().setHours(0, 0, 0, 0);
источник
Резервный вариант по умолчанию:
var foo = {}; // empty object literal alert(foo.bar) // will alert "undefined" alert(foo.bar || "bar"); // will alert the fallback ("bar")
Практический пример:
// will result in a type error if (foo.bar.length === 0) // with a default fallback you are always sure that the length // property will be available. if ((foo.bar || "").length === 0)
источник
Вот одно, что я только что обнаружил: проверка нуля перед вызовом функции:
Это более короткий эквивалент:
a = b ? b.length : null;
Самое приятное то, что вы можете проверить цепочку свойств:
источник
Мне нравится, как просто работать со списками:
var numberName = ["zero", "one", "two", "three", "four"][number];
И хеши:
var numberValue = {"zero":0, "one":1, "two":2, "three":3, "four":4}[numberName];
На большинстве других языков это будет довольно тяжелый код. Значения по умолчанию тоже хороши. Например, сообщение с кодом ошибки:
var errorDesc = {301: "Moved Permanently", 404: "Resource not found", 503: "Server down" }[errorNo] || "An unknown error has occurred";
источник
int для преобразования строки
var i = 12; var s = i+"";
источник
element.innerHTML = ""; // Replaces body of HTML element with an empty string.
Ярлык для удаления всех дочерних узлов элемента.
источник
Преобразование строки в целое число, по умолчанию на 0, если это невозможно,
0 | "3" //result = 3 0 | "some string" -> //result = 0 0 | "0" -> 0 //result = 0
Может быть полезно в некоторых случаях, в основном, когда 0 считается плохим результатом
источник
Литералы шаблона
var a = 10; var b = 20; var text = `${a} + ${b} = ${a+b}`;
тогда текстовая переменная будет такой, как показано ниже!
источник