18910140161

JavaScript--为什么这个箭头函数在IE11中不起作用?-堆栈溢出

顺晟科技

2022-10-19 13:01:26

115

下面的代码在IE 11中不起作用,它会在控制台中引发语法错误

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

使用二分图进行可视化

导致上述语句中问题的代码


顺晟科技:

您使用的是箭头函数。IE11不支持它们。改用函数。

以下是Babel的将其转换为ES5:

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

由于没有使用任何代码,所以不必担心保留箭头函数的行为(因为传统函数是通过调用方式获得的,但箭头函数close over)。但是,如果代码确实使用了箭头函数,并且您希望它的行为类似于箭头函数,那么您就需要使用通常的技巧

IE目前不支持箭头表示法,但有一种方便快捷的方法可以将代码转换为工作代码。访问babel网站,然后将代码粘贴到左边的框中,并复制右框中传递到。

的早期版本中的代码

例如,代码被传递到:

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

一般情况下,在箭头函数为箭头函数之前,它们是正则的JS S。所以在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"));

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

例如:

或仅vanilla.js:

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

如果需要支持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"));
  • TAG:
相关文章
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航