Лучший 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 ]

13 голосов
/ 31 марта 2009
var tags = {
    name: "Jack",
    location: "USA"
};

"Name: {name}<br>From {location}".replace(/\{(.*?)\}/gim, function(all, match){
    return tags[match];
});

обратный вызов для замены строки просто полезен.

11 голосов
/ 08 октября 2008

Геттеры и сеттеры :

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

Это не эксклюзивный JavaScript, но сохраняет как три строки кода:

check ? value1 : value2
4 голосов
/ 08 октября 2008

Массив forEach в Javascript 1.6

myArray.forEach(function(element) { alert(element); });
4 голосов
/ 03 августа 2009

Следующий объект || {default: true} синтаксис:

вызов вашей функции следующим образом: hello (requiredOne && requiredTwo && needThree), если один параметр не определен или false, тогда он вызовет hello (false), иногда usefull

4 голосов
/ 13 октября 2010

В ситуациях анализа с фиксированным набором составных частей:

var str = "John Doe";

Вы можете назначить результаты непосредственно в переменные, используя синтаксис «назначение деструктурирования»:

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+.

4 голосов
/ 08 октября 2008

Немного больше на примере Левика:

var foo = (condition) ? value1 : value2;
3 голосов
/ 06 июня 2016

Функция «Немедленно вызванная стрелка»:

var test = "hello, world!";
(() => test)(); //returns "hello, world!";
2 голосов
/ 09 октября 2008

Я забыл:

(function() { ... }).someMethod(); // Functions as objects
2 голосов
/ 06 сентября 2010

Создать литерал анонимного объекта просто: ({})

Пример: нужно знать, есть ли у объекта метод valueOf:

var hasValueOf = !! ({}). ValueOf

Бонус синтаксического сахара: двойной - не "!!" для очень краткого преобразования чего-либо в логическое значение.

...