Что означает "= > " (стрелка, образованная из equals & greater than) в JavaScript?
Я знаю, что >= оператор означает больше или равно, но я видел => в некотором исходном коде. Что означает этот оператор?
вот код:
promiseTargetFile(fpParams, aSkipPrompt, relatedURI).then(aDialogAccepted => {
if (!aDialogAccepted)
return;
saveAsType = fpParams.saveAsType;
file = fpParams.file;
continueSave();
}).then(null, Components.utils.reportError);
}
10 ответов:
Что Это
это функция стрелки. функции стрелки-это короткий синтаксис, введенный ECMAscript 6, который можно использовать аналогично тому, как вы используете выражения функций. Другими словами, вы можете часто использовать их вместо таких выражений, как
function (foo) {...}. Но у них есть некоторые важные отличия. Например, они не привязывают свои собственные значенияthis(см. ниже).функции стрелки являются частью ECMAscript 6 спецификация, но не часть "нормального" JavaScript, используемого в большинстве браузеров сегодня. Они, однако, частично поддерживается в узле v. 4.0+ и во многих браузерах (см. ниже).
вы можете прочитать больше в документация Mozilla функции стрелочку.
из документации Mozilla:
выражение функции стрелки (также известное как функция жирной стрелки) имеет более короткий синтаксис по сравнению с выражения функции и лексически связывает
thisзначение (не привязывает свой собственныйthis,arguments,superилиnew.target). Функции стрелки всегда анонимны. Эти выражения функций лучше всего подходят для функций, не связанных с методами, и они не могут использоваться в качестве конструкторов.заметка о том, как
thisработает в функции стрелкиодин из самых удобные функции функции стрелки похоронены в тексте выше:
функции стрелка... лексически связывает
thisзначение (не привязывает свой собственныйthis...)это означает в более простых терминах, что функция стрелки сохраняет
thisзначение из его контекста и не имеет своегоthis. Традиционная функция тут привязать свой собственныйthisзначение, требующее много гимнастики, какself = this;и т. д., для доступа или манипулироватьthisиз одной функции в другую функцию. Дополнительные сведения по этому вопросу см. В разделе объяснение и примеры в документации Mozilla.Пример Кода
пример (также из документов):
var a = [ "We're up all night 'til the sun", "We're up all night to get some", "We're up all night for good fun", "We're up all night to get lucky" ]; // These two assignments are equivalent: // Old-school: var a2 = a.map(function(s){ return s.length }); // ECMAscript 6 using arrow functions var a3 = a.map( s => s.length ); // both a2 and a3 will be equal to [31, 30, 31, 31]
примечания по совместимости
вы можете использовать функции стрелки в узле, но поддержка браузера пятнистая.
поддержка браузеров для этой функции улучшилась совсем немного, но это по-прежнему не является достаточно распространенным для большинства браузеров на основе использования. По состоянию на 12 декабря 2017 года, он поддерживается в текущей версии:
- Chrome (V. 45+)
- Firefox (V. 22+)
- Edge (V. 12+)
- Opera (V. 32+)
- браузер Android (v. 47+)
- Opera Mobile (V. 33+)
- Chrome для Android (v. 47+)
- Firefox для Android (v. 44+)
- Safari (v. 10+)
- iOS Safari (V. 10.2+)
- Samsung Internet (V. 5+)
- браузер Baidu (V. 7.12+)
не поддерживается в:
- IE (через v. 11)
- Opera Mini (через v. 8.0)
- браузер Blackberry (через v. 10)
- IE Mobile (через V. 11)
- UC Browser для Android (через V. 11.4)
- QQ (через v. 1.2)
вы можно найти дополнительную (и более актуальную) информацию в CanIUse.com (Нет принадлежности).
это известно как функция стрелки, часть ECMAScript 2015 spec...
var foo = ['a', 'ab', 'abc']; var bar = foo.map(f => f.length); console.log(bar); // 1,2,3более короткий синтаксис, чем предыдущие:
// < ES6: var foo = ['a', 'ab', 'abc']; var bar = foo.map(function (f) { return f.length; }); console.log(bar); // 1,2,3другая удивительная вещь-это лексические
this... Обычно, вы бы сделали что-то вроде:function Foo() { this.name = name; this.count = 0; this.startCounting(); } Foo.prototype.startCounting = function() { var self = this; setInterval(function () { // this is the Window, not Foo {}, as you might expect console.log(this); // [object Window] // that's why we reassign this to self before setInterval() console.log(self.count); self.count++; },1000) } new Foo();но это может быть переписано со стрелкой, как это:
function Foo() { this.name = name; this.count = 0; this.startCounting(); } Foo.prototype.startCounting = function() { setInterval(() => { console.log(this); // [object Object] console.log(this.count); // 1, 2, 3 this.count++; },1000) } new Foo();больше, вот!--7--> очень хороший ответ для , когда для использования функций стрелки.
Это будет "выражение функции стрелки", введенное в ECMAScript 6.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/arrow_functions
для исторических целей (если страница wiki изменится позже), это:
выражение функции стрелки имеет более короткий синтаксис по сравнению с выражениями функции и лексически связывает это значение. Функции стрелки всегда анонимны.
просто чтобы добавить еще один пример того, что лямбда может сделать без использования map:
a = 10 b = 2 var mixed = (a,b) => a * b; // OR var mixed = (a,b) => { (any logic); return a * b }; console.log(mixed(a,b)) // 20
это функции стрелки
также известный как Функции Жирной Стрелкой. Это чистый и удобный способ записи выражений функций, например
function() {}.стрелки функции могут удалить необходимость
function,returnи{}при определении функции. Это однострочные выражения, похожие на лямбда-выражения в Java или Python.пример без параметров
var queue = ['Dave', 'Sarah', 'Sharon'], nextCustomer = () => queue[0]; console.log(nextCustomer()); // 'Dave'если несколько заявлений нужно сделать в пределах той же функции стрелки, вам нужно обернуть, в этом примере,
queue[0]в скобках Керли{}. В этом случае оператор return не может быть опущен.пример с 1 параметром
var queue = ['Dave', 'Sarah', 'Sharon'], addCustomer = name => { queue.push(name) } addCustomer('Toby'); console.log(queue); // ['Dave', 'Sarah', 'Sharon', 'Toby']можно не указывать
{}сверху.когда есть один параметр, скобки
()вокруг параметра можно опустить.пример с несколькими параметры
var addition = (x, y) => x + y console.log(addition(1, 5)); // 6полезный пример
var fruits = [ {name: 'Apple', price: 2}, {name: 'Bananna', price: 3}, {name: 'Pear', price: 1} ];если бы мы хотели получить цену каждого фрукта в одном массиве, в ES5 мы могли бы сделать:
fruits.map(function(fruit) { return fruit.price; }); // [2, 3, 1]в ES6 с новыми функциями стрелки, мы можем сделать это более кратким:
fruits.map(fruit => fruit.price); // [2, 3, 1]дополнительную информацию о функциях стрелок можно найти здесь.
Совместимость С Браузерами
- IE: не поддерживается И все же
- Край: 12+ (Все Версии)
- Firefox: 22+
- Chrome: 45+
- Safari: 10+
- iOS Safari: 10.2+
- Браузер Android: 56+
дополнительную актуальную информацию можно найти на странице совместимость с браузером здесь
как уже говорили другие, это новый синтаксис для создания функций.
однако этот вид функций отличается от обычных:
они связывают
thisзначение. Как объяснил спец,An ArrowFunction не определяет локальные привязки для
arguments,super,thisилиnew.target. Любая ссылка наarguments,super,thisилиnew.targetв ArrowFunction должны разрешите привязку в лексически замкнутой среде. Типично это будет функциональная среда немедленно заключающего функция.даже если ArrowFunction может содержать ссылки на
super, в объект функции, созданный на шаге 4, не превращается в метод с помощью выполнение MakeMethod. Ан ArrowFunction ссылкиsuperвсегда содержится в не ArrowFunction и необходимые состояние для реализацииsuperдоступно через scope это захвачен объектом функции ArrowFunction.они не являются конструкторы.
это означает, что они не имеют [[построить]] внутренний метод, и поэтому не может быть создан экземпляр, например
var f = a => a; f(123); // 123 new f(); // TypeError: f is not a constructor
Я читал, это символ
Arrow FunctionsнаES6этой
var a2 = a.map(function(s){ return s.length });используя
Arrow Functionможно записать какvar a3 = a.map( s => s.length );
добавление простого примера CRUD с функцией Arrowfunction
//Arrow Function var customers = [ { name: 'Dave', contact:'9192631770' }, { name: 'Sarah', contact:'9192631770' }, { name: 'Akhil', contact:'9928462656' }], // No Param READ getFirstCustomer = () => { console.log(this); return customers[0]; }; console.log("First Customer "+JSON.stringify(getFirstCustomer())); // 'Dave' //1 Param SEARCH getNthCustomer = index=>{ if( index>customers.length) { return "No such thing"; } else{ return customers[index]; } }; console.log("Nth Customer is " +JSON.stringify(getNthCustomer(1))); //2params ADD addCustomer = (name, contact)=> customers.push({ 'name': name, 'contact':contact }); addCustomer('Hitesh','8888813275'); console.log("Added Customer "+JSON.stringify(customers)); //2 param UPDATE updateCustomerName = (index, newName)=>{customers[index].name= newName}; updateCustomerName(customers.length-1,"HiteshSahu"); console.log("Updated Customer "+JSON.stringify(customers)); //1 param DELETE removeCustomer = (customerToRemove) => customers.pop(customerToRemove); removeCustomer(getFirstCustomer()); console.log("Removed Customer "+JSON.stringify(customers));
Как уже говорилось во всех других ответах, это часть синтаксиса функции стрелки ES2015. Более конкретно, это не оператор, это знак препинания, который отделяет параметры от тела:
ArrowFunction : ArrowParameters => ConciseBody. Е. Г.(params) => { /* body */ }.
ES6стрелка функции:в javascript the
=>является символом выражения функции стрелки. Выражение функции стрелки не имеет своего собственногоthisпривязка и поэтому не может использоваться в качестве функции конструктора. например:var words = 'hi from outside object'; let obj = { words: 'hi from inside object', talk1: () => {console.log(this.words)}, talk2: function () {console.log(this.words)} } obj.talk1(); // doesn't have its own this binding, this === window obj.talk2(); // does have its own this binding, this is objправила использования функций стрелки:
- если есть ровно один аргумент вы можете опустить круглые скобки аргумента.
- если вы возвращаете выражение и делаете это в той же строке, которую вы можете опустить
{}иreturnсообщениинапример:
let times2 = val => val * 2; // It is on the same line and returns an expression therefore the {} are ommited and the expression returns implictly // there also is only one argument, therefore the parentheses around the argument are omitted console.log(times2(3));
Comments