在JavaScript中,“=>”(等于和大于等于一个箭头)的含义是什么?

我知道>=运算符意味着大于或等于,但是我在某些源代码中看到了=> 。 那个操作员的意思是什么?

代码如下:

 promiseTargetFile(fpParams, aSkipPrompt, relatedURI).then(aDialogAccepted => { if (!aDialogAccepted) return; saveAsType = fpParams.saveAsType; file = fpParams.file; continueSave(); }).then(null, Components.utils.reportError); } 

这是什么

这是一个箭头function。 箭头函数是一个简短的语法,由ECMAscript 6引入,可以类似于使用函数expression式的方式使用。 换句话说,您可以经常使用它们来代替function (foo) {...}等expression式。 但是他们有一些重要的区别。 例如,他们不绑定他们自己的价值(见下面的讨论)。

箭头函数是ECMAscript 6规范的一部分,但不是当今大多数浏览器使用的“普通”JavaScript的一部分。 但是,它们在Node v。4.0+和许多浏览器(见下文)中得到部分支持 。

您可以阅读Mozilla文档中有关箭头function的更多信息 。

从Mozilla文档:

与函数expression式相比,箭头函数expression式(也称为胖箭头函数)具有更短的语法,并从词法上绑定this值(不绑定它自己的thisargumentssupernew.target )。 箭头function始终是匿名的。 这些函数expression式最适合非方法函数,不能用作构造函数。

关于如何在箭头函数中工作的注意事项

箭头函数的一个最方便的function是埋在上面的文本中:

一个箭头函数…在词汇上绑定this值(不绑定它自己的this …)

这是什么意思,简单来说就是箭头函数保留了它的上下文的值,并没有自己的this 。 一个传统的function确实绑定了自己的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] 

兼容性说明

您可以在Node中使用箭头函数,但浏览器支持是不稳定的。

浏览器对这种function的支持已经有了很大的改进,但是对于大多数基于浏览器的使用来说,它仍然不够普及。 截至2017年1月25日,在当前版本中支持:

  • Chrome(v。45+)
  • Firefox(v。22+)
  • 边缘(第12节)
  • 歌剧(第32节)
  • Android Browser(v。47+)
  • Opera Mobile(v。33+)
  • Chrome for Android(v。47+)
  • Firefox for Android(v。44+)
  • Safari(v。10+)
  • iOS Safari(v。10.2+)

不支持:

  • IE(通过第11节)
  • Opera Mini(通过v8.0)
  • 黑莓浏览器(通过v。10)
  • IE Mobile(通过v。11)
  • 适用于Android的UC浏览器(通过版本9.9)
  • 三星互联网(通过诉4)

您可以在CanIUse.com上find更多(更新的)信息(无关联)。

这就是所谓的箭头function,是ECMAScript 2015规范的一部分 。

 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 

DEMO

另一个令人敬畏的东西是词汇 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(); 

DEMO

MDN
更多关于语法

对于更多, 这里是一个很好的答案何时使用箭头function。

这将是ECMAScript 6中引入的“箭头函数expression式”。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/arrow_functions

为了历史目的(如果wiki页面稍后改变),它是:

与函数expression式相比,箭头函数expression式具有更短的语法,并从词汇上绑定此值。 箭头function始终是匿名的。

只是为了添加另一个lambda可以在不使用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 

正如其他人所说,这是创build函数的新语法。

但是,这种function与正常的不同:

  • 他们绑定this值。 正如规范所解释的那样,

    一个ArrowFunction没有为arguments superthisnew.target定义本地绑定。 对new.target中的argumentssuperthisnew.target引用必须在词法环绕的环境中parsing为绑定。 通常,这将是立即封闭function的function环境。

    即使一个ArrowFunction可能包含对super引用,在步骤4中创build的函数对象也不会通过执行MakeMethod进入方法。 引用superArrowFunction始终包含在非ArrowFunction中,并且可以通过由ArrowFunction的函数对象捕获的作用域访问实现super的必要状态。

  • 他们是非构造函数。

    这意味着他们没有[[Construct]]内部方法,因此不能实例化,例如

     var f = a => a; f(123); // 123 new f(); // TypeError: f is not a constructor 

我读过,这是ES6Arrow Functions的象征

这个

 var a2 = a.map(function(s){ return s.length }); 

使用Arrow Function可以写成

 var a3 = a.map( s => s.length ); 

MDN文档

这些是箭头function

也被称为脂肪箭头函数 。 他们是一个干净而又简洁的函数expression式写法,例如function() {}

定义函数时,箭头函数可以删除functionreturn{}的需要。 它们是单行的,类似于Java或Python中的Lambdaexpression式。

没有参数的例子

 var queue = ['Dave', 'Sarah', 'Sharon'], nextCustomer = () => queue[0]; console.log(nextCustomer()); // 'Dave' 

正如所有其他答案已经说过,它是ES2015箭头函数语法的一部分。 更具体地说,它不是一个运算符,它是一个将参数与正文分开的标点符号: ArrowFunction : ArrowParameters => ConciseBody 。 例如(params) => { /* body */ }

使用Arrowfunction添加简单的CRUD示例

  //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));