Лучший JavaScript синтаксический сахар - PullRequest
81 голосов
/ 08 октября 2008

Вот несколько драгоценных камней:

литералы:

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?

Ответы [ 30 ]

1 голос
/ 12 апреля 2011

Вот что я только что обнаружил: проверка нуля перед вызовом функции:

a = b && b.length;

Это более короткий эквивалент:

a = b ? b.length : null;

Самое приятное, что вы можете проверить цепочку собственности:

a = b && b.c && b.c.length;
1 голос
/ 10 марта 2011

Мне нравится, как просто работать со списками:

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";
1 голос
/ 08 октября 2008

Мне нравится иметь возможность вычислять () строку json и возвращать полностью заполненную структуру данных. Я ненавижу писать все как минимум дважды (один раз для IE, снова для Mozilla).

1 голос
/ 20 августа 2010

Откат по умолчанию:

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) 
1 голос
/ 19 августа 2010

JavaScript-класс Date, обеспечивающий полу- "Свободный интерфейс". Это компенсирует невозможность непосредственного извлечения части даты из класса Date:

var today = new Date((new Date()).setHours(0, 0, 0, 0));

Это не полностью Fluent Interface, потому что следующее даст нам только числовое значение, которое на самом деле не является объектом Date:

var today = new Date().setHours(0, 0, 0, 0);
1 голос
/ 03 августа 2009

Присвоение часто используемых ключевых слов (или любых методов) простым переменным, таким как ths

  var $$ = document.getElementById;

  $$('samText');
0 голосов
/ 01 сентября 2009
element.innerHTML = "";  // Replaces body of HTML element with an empty string.

Ярлык для удаления всех дочерних узлов элемента.

0 голосов
/ 06 июля 2017

Преобразовать строку в целое число по умолчанию 0, если это невозможно,

0 | "3" //result = 3
0 | "some string" -> //result = 0
0 | "0" -> 0 //result = 0

Может быть полезно в некоторых случаях, в основном, когда 0 считается плохим результатом

0 голосов
/ 20 сентября 2017

Литералы шаблона

var a = 10;
var b = 20;
var text = `${a} + ${b} = ${a+b}`;

тогда переменная text будет выглядеть так!

10 + 20 = 30

0 голосов
/ 31 марта 2009

int для преобразования строки

var i = 12;
var s = i+"";
...