Problem
Dies ist wegen der Pfeil-Funktionen, die eine neue Funktion in ECMAScript 2015 (auch bekannt als ES6) sind. Da viele ES6-Funktionen nicht in allen Browsern implementiert wurden, variiert die Zulässigkeit der neuen Syntax zwischen Browsern. Ein paar gute Ressourcen sind die compatibility table for ES2015 (ES6) features und die MDN documentation for arrow functions. Beide umreißen, welche Versionen von Browsern was unterstützen.
Aus der Tabelle wir folgendes zu beachten:
- Internet Explorer tut nicht diese Funktion unterstützen.
- Safari> = 10 unterstützt diese Funktion.
- Chrome> = 45 unterstützt diese Funktion.
- Firefox> = 22 unterstützt diese Funktion.
- Opera> = 32 diese Funktion unterstützt
So Pfeil Funktionen in Ihrem Fall haben die Arbeit an Chrome, wie sie in der Version des Browsers implementiert wurden Sie verwendet, aber nicht Safari und IE, weil sie zu waren alt und waren bei einer Version, die das Feature nicht unterstützt oder das Feature überhaupt nicht unterstützt.
Lösungen
Sie haben zwei Möglichkeiten. Einer ist leichter und der andere erfordert ein bisschen mehr Arbeit.
1) Verwenden Sie stattdessen function
. Dies erfordert etwas mehr Arbeit, um das Verhalten der Pfeilfunktion this
zu erreichen, wird aber jetzt einfacher zu verwenden sein. In diesem Fall spielt der Kontext der Pfeilfunktion this
(oder deren Fehlen) keine Rolle. Hier ein Beispiel:
var temp = [];
$scope.mulImage = $scope.mulImage.filter(function(x, i) {
if(temp.indexOf(x.filename) < 0) {
temp.push(x.filename);
return true;
}
return false;
})
2) Verwendung so etwas wie Babel, die ein Transpiler ist. Das bedeutet, dass der Code in eine andere Version umgewandelt wird. In diesem Fall können wir Ihren ES6-Code mit Pfeilfunktionen in normalen ES5-Code (das normale JavaScript, das wir kennen) transformieren, der von allen Browsern unterstützt wird. Sie können ihre Installationsanweisungen in dem obigen Link folgen.
Weil IE und Safari nicht umgesetzt ES6 Funktionen wie Pfeil Funktionen? Verwenden Sie einen Transpiler, um zu ES5 zu transponieren. – Li357
@AndrewLi - das ist eine Antwort, kein Kommentar. Sie sollten es fördern. – Malvolio
@AndrewLi: Wie kann ich das für alle Browser auflösen, indem ich die Ausgabe gleich mache? – subhra