Лучший синтаксический сахар javascript
вот некоторые драгоценные камни:
литералы:
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 ответов:
получение текущей даты и времени в миллисекундах:
Date.now()например, для времени выполнения раздела кода:
var start = Date.now(); // some code alert((Date.now() - start) + " ms elapsed");
тест на принадлежность к объекту:
var props = { a: 1, b: 2 }; ("a" in props) // true ("b" in props) // true ("c" in props) // false
в Mozilla (и, как сообщается, IE7) вы можете создать константу XML с помощью:
var xml = <elem></elem>;вы также можете заменить переменные:
var elem = "html"; var text = "Some text"; var xml = <{elem}>{text}</{elem}>;
использование анонимных функций и замыкания для создания частной переменной (скрытие информации) и связанных методов get / set:
var getter, setter; (function() { var _privateVar=123; getter = function() { return _privateVar; }; setter = function(v) { _privateVar = v; }; })()
возможность расширения собственных типов JavaScript с помощью прототипного наследования.
String.prototype.isNullOrEmpty = function(input) { return input === null || input.length === 0; }
многострочные строки:
var str = "This is \ all one \ string.";поскольку вы не можете отступать от последующих строк, не добавляя пробелы в строку, люди обычно предпочитают объединяться с оператором plus. Но это действительно обеспечивает хороший документ возможности.
изменить длину массива
свойство 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 undefined value. A sparse array.
использовать
===для сравнения значения и тип:var i = 0; var s = "0"; if (i == s) // true if (i === s) // false
повторяя строку, такую как "-" определенное количество раз, используя метод join для пустого массива:
var s = new Array(repeat+1).join("-");приводит к "- - - " при повторе == 3.
как оператор по умолчанию,
||оператор гвардии,&&.answer = obj && obj.propertyв противоположность
if (obj) { answer = obj.property; } else { answer = 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"
на массив#forEach на Javascript 1.6
myArray.forEach(function(element) { alert(element); });
следующий obj / / {default:true} синтаксис:
вызов функции с помощью этого: hello (neededOne & & neededTwo & & 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+ браузеры, в это время.
немедленно вызывается функция стрелки:
var test = "hello, world!"; (() => test)(); //returns "hello, world!";
создать анонимный объект литерал просто: ({})
пример: нужно знать, если объекты имеют valueOf метод:
var hasValueOf = !!({}).valueOf
бонус синтаксический сахар: двойной-не!!- для преобразования почти всего в булево очень лаконично.
Мне нравится быть в состоянии eval () строку json и получить обратно полностью заполненную структуру данных. Я ненавижу писать все, по крайней мере, дважды (один раз для IE, снова для Mozilla).
назначение часто используемых ключевых слов (или любых методов) для простых переменных, таких как ths
var $$ = document.getElementById; $$('samText');
класс даты JavaScript, обеспечивающий полу - "свободный интерфейс". Это компенсирует невозможность извлечения части даты из класса Date напрямую:
var today = new Date((new Date()).setHours(0, 0, 0, 0));это не полностью свободный интерфейс, потому что следующее даст нам только числовое значение, которое на самом деле не является объектом даты:
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;это более короткий эквивалент:
a = b ? b.length : null;лучшая часть заключается в том, что вы можете проверить цепочку свойств:
a = b && b.c && b.c.length;
мне нравится, как просто работать со списками:
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";
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}`;тут текст переменная будет, как показано ниже!
10 + 20 = 30
Comments