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

57 голосов
/ 22 октября 2008

Получение текущей даты и времени в миллисекундах:

Date.now()

Например, чтобы рассчитать время выполнения фрагмента кода:

var start = Date.now();
// some code
alert((Date.now() - start) + " ms elapsed");
32 голосов
/ 08 октября 2008

Тест на членство в объекте:

var props = { a: 1, b: 2 };

("a" in props) // true
("b" in props) // true
("c" in props) // false
26 голосов
/ 08 октября 2008

Использование анонимных функций и замыкания для создания закрытой переменной (скрытие информации) и связанных методов get / set:

var getter, setter;

(function()
{
   var _privateVar=123;
   getter = function() { return _privateVar; };
   setter = function(v) { _privateVar = v; };
})()
26 голосов
/ 08 октября 2008

В Mozilla (и, как сообщается, IE7) вы можете создать константу XML, используя:

var xml = <elem></elem>;

Вы также можете подставить переменные:

var elem = "html";
var text = "Some text";
var xml = <{elem}>{text}</{elem}>;
22 голосов
/ 08 октября 2008

Возможность расширять нативные типы JavaScript с помощью наследования прототипов.

String.prototype.isNullOrEmpty = function(input) {
    return input === null || input.length === 0;
}
21 голосов
/ 08 октября 2008

Используйте === для сравнения значений и Тип:

var i = 0;
var s = "0";

if (i == s)  // true

if (i === s) // false
21 голосов
/ 08 октября 2008

Многострочные строки:

var str = "This is \
all one \
string.";

Поскольку вы не можете сделать отступ для последующих строк, не добавив пробел в строку, люди обычно предпочитают объединять с оператором плюс. Но это обеспечивает хорошую возможность здесь документа .

21 голосов
/ 28 августа 2009

Изменение размера массива

свойство 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.
16 голосов
/ 21 ноября 2008

Повторение строки, такой как "-", определенное количество раз путем использования метода соединения с пустым массивом:

var s = new Array(repeat+1).join("-");

Результат в "---" при повторении == 3.

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

Как и оператор по умолчанию, || является оператором охраны, &&.

answer = obj && obj.property

в отличие от

if (obj) {
    answer = obj.property;
}
else {
    answer = null;
}
...