この矢印機能がIE11で機能しないのはなぜですか?


84

以下のコードは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視覚化のための2部グラフの使用

上記のステートメントで問題を引き起こしているこのコード d=>(d.part=="primary"? -40: 40)


20
IE11は、無名関数の矢印表記をサポートしていません。と書き直してくださいfunction (d) { return d.part == "primary" ? -40 : 40; }
系統発生

1
@Phylogenesis:すべての矢印関数が匿名であるわけではありません。この1は、例えば、ではありません:var f = () => "foo";
TJクラウダー


1
^^ ...またはドキュメント
Teemu 2016年

2
@DavidBalažicあなたのコードは間違っています。if (a=>0)常に真実です。これは、比較ではなく関数を作成したためであり、関数は真実です。if (a<=0)それを書く正しい方法でしょう。
user36544 1019

回答:


118

矢印関数を使用しています。IE11はそれらをサポートしていません。function代わりに関数を使用してください。

これがBabelによる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";
});

3
忘れないでくださいthisvar f = (a) => {a.some1(); this.some2();};tovar f = function(a) {a.some1(); this.some2();}.bind(this);
user1742529 2018年

21

IE 11はサポートさていないため、サポートする必要がある場合は矢印関数の使用を避けてください

それらを通常の関数に変更すると、コードは期待どおりに機能するはずです

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

17

一般に、矢印関数が矢印関数になる前は、通常のJSfunctionでした。したがって、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);


1
このコードは、すべての問題のコードに似ていない(と「関数を矢印使用していない」他のすべての答えはすでに言っていないことは何も言いません)
クエンティン・

10
確かに、しかしこの質問は「IEで矢印機能が機能しない」の最初の検索結果であり、私は単純であまり具体的でない(より一般的な)説明をしました。しかし、私はそれが規則、謝罪に反していることを理解しています。
Szélラヨシュ

1

IEは現在、矢印表記をサポートしていませんが、で作業ES6するES5.1ためにコードをトランスパイルするための便利で高速な方法がありますIEBabel Webサイトにアクセスし、左側のボックスにコードを貼り付けて、以前のバージョンのにトランスパイルされた右側のボックスコードをコピーします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";
});
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.