Javascript 为什么';这个箭头函数在IE 11中不起作用吗?

Javascript 为什么';这个箭头函数在IE 11中不起作用吗?,javascript,internet-explorer,Javascript,Internet Explorer,下面这段代码在IE11中不起作用,它在控制台中抛出一个语法错误 g.selectAll(".mainBars") .append("text") .attr("x", d => (d.part == "primary" ? -40 : 40)) .attr("y", d => +6) .text(d => d.key) .attr("text-anchor", d => (d.part == "primary" ? "end" :

下面这段代码在IE11中不起作用,它在控制台中抛出一个语法错误

g.selectAll(".mainBars")
    .append("text")
    .attr("x", d => (d.part == "primary" ? -40 : 40))
    .attr("y", d => +6)
    .text(d => d.key)
    .attr("text-anchor", d => (d.part == "primary" ? "end" : "start"));
使用
d3.js
二分图进行可视化


导致上述语句中出现问题的代码
d=>(d.part==“primary”?-40:40)

您正在使用箭头函数。IE11不支持它们。改用
函数
函数

以下是对ES5的翻译:

g.selectAll(".mainBars").append("text").attr("x", function (d) {
  return d.part == "primary" ? -40 : 40;
}).attr("y", function (d) {
  return +6;
}).text(function (d) {
  return d.key;
}).attr("text-anchor", function (d) {
  return d.part == "primary" ? "end" : "start";
});

如果需要支持IE11 as,请避免使用箭头函数

将这些函数更改为常规函数,您的代码将按预期工作

g.selectAll(".mainBars").append("text").attr("x",function(d) { 
  return d.part=="primary"? -40: 40;
}).attr("y",function(d){
  return +6;
}).text(function(d) { 
  return d.key;
}).attr("text-anchor", function(d) { 
  return d.part=="primary"? "end": "start";
});

IE目前不支持箭头符号,但有一种简便快捷的方法可以将
ES6
代码传输到
ES5.1
,以便在
IE
中工作。访问该网站,然后将代码粘贴到左框中,并复制右框代码,该代码将被传输到早期版本的
JavaScript

例如,您的代码被传输到:

"use strict";

g.selectAll(".mainBars").append("text").attr("x", function (d) {
   return d.part == "primary" ? -40 : 40;
}).attr("y", function (d) {
   return +6;
}).text(function (d) {
   return d.key;
}).attr("text-anchor", function (d) {
   return d.part == "primary" ? "end" : "start";
});

一般来说,在arrow函数成为arrow函数之前,它们是常规的JS
function
s。因此,对于IE11,我们只需在时间上后退一步

var fruits=["apple","banana","orange"];

var modernResult=fruits.find(e => e.includes("nana"));
console.log(modernResult);

var IEresult=fruits.find(function(e){return e.includes("nana")});
console.log(IEresult);

Internet Explorer(IE)根本不支持ES6功能,但您可以安装。但是您也可以编写vanillaJS函数

例如:

const hasBrownEyes=eye.color==“brown”?真:假

或者只是vanilla.js:

var hasBrownEyes = false; // default answer, it will be overwritten if it has a brown eye

if (eye.color === "brown") {
    return true;
}


IE11不支持匿名函数的箭头符号。将其重写为
函数(d){return d.part==“primary”?-40:40;}
@Phylogenesis:并非所有箭头函数都是匿名的。例如,这个不是:
varf=()=>“foo”请参阅^^。。。或者。@David Balažic您的代码是错误的<代码>如果(a=>0)
始终为真。这是因为您所做的是创建一个函数,而不是比较,并且函数是真实的<代码>如果(不要忘记
this
var f=(a)=>{a.some1();this.some2();};
to
var f=function(a){a.some1();this.some2();}.bind(this);
这段代码与问题中的代码一点也不相似(而且“不要使用箭头函数”没有任何其他答案都没有提到)是的,但是这个问题是“箭头功能在IE中不起作用”的第一个搜索结果,我给出了一个简单且不太具体(更一般)的解释。但我理解这是违反规则的,抱歉。