Tag: ecmascript 6

使用–harmony_modules选项,ES2015“导入”不能在节点v6.0.0中工作

我正在使用节点v6.0.0,并希望使用ES2016(ES6)。 但是,我意识到“导入”语法不起作用。 在ES2015中编写模块代码不是“input”的根本吗? 我尝试使用–harmony_modules选项运行节点,但仍然得到了有关“导入”相同的错误。 这是代码。 没有“导入”的工作代码: 'use strict'; let sum = 0; class Number { addNumber(num1, num2) { return num1 + num2; } } let numberObj = new Number(); sum = numberObj.addNumber(1,2); console.log("sum of two number 1 and 2 "+ sum); 不带“导入”的代码: server.js 'use strict'; import Number from "./Number"; let sum = 0; let numberObj […]

如何在ES6中导出导入的对象?

用例很简单:我只想导出一个名称与导入的对象。 例如: import React from 'react'; export React; 但是这不起作用。 我必须写: import React from 'react'; export const React = React; 但是这很奇怪。 什么是正确的方法来做到这一点? 更新 : 感谢您的帮助和参考。 我用很多线索解决了我的问题。 我想分享一些常见案例和解决scheme。 出口import import d, {obj} from '…'; export {obj, d}; export {obj as name1, d as name2}; 重新导出所有命名的导入 export * from '…'; export * as name1 from '…'; 重新导出一些命名的导入 export […]

如何用Traceur实现ES6类中的私有方法

我现在使用Traceur编译器来使用ES6function。 我想从ES5实现这个东西: function Animal() { var self = this, sayHi; sayHi = function() { self.hi(); }; this.hi = function() {/* … */} } 目前traceur不支持private和public关键字( 来自和谐 )。 而ES6类语法不允许在类体中使用简单的var (或let )语句。 我发现的唯一方法是在类声明之前模拟私有。 就像是: var sayHi = function() { // … do stuff }; class Animal { … 如果不出意料的话,不如预期的那样,如果没有每次apply或bind它,都不能将其正确地传递给私有方法。 那么,有没有可能在与traceur编译器兼容的ES6类中使用私有数据呢?

关键字'const'不会使值不可变。 这是什么意思?

Axel Rauschmayer博士在探索ES6中有const定义 : const像let一样工作,但是你声明的variables必须立即被初始化, 并且后面的值不能被改变 。 […] const bar = 123; bar = 456; // TypeError: `bar` is read-only 然后他写道 陷阱:const不会使值不可变 const只意味着一个variables总是具有相同的值,但这并不意味着该值本身是或变成不可变的。 我很困惑这个陷阱。 任何人都可以用这个缺陷清楚地定义const吗?

将Javascript迭代器转换为数组

我试图从Javascript EC6中使用新的Map对象,因为它已经在最新的Firefox和Chrome版本中被支持。 但是在“function”编程中,我发现它非常有限,因为它缺less经典的映射,filter等方法,可以很好地与[key, value]对配合使用。 它有一个forEach,但不会返回callback结果。 如果我可以将map.entries()从MapIterator转换成简单的Array,那么我可以使用标准的.map , .filter ,而不需要额外的黑客。 有没有一种“好”的方法来将Javascript迭代器转换为数组? 在python中就像做list(iterator)一样简单…但Array(m.entries())以Iterator作为第一个元素返回一个数组! 编辑 我忘了指定我正在寻找一个适用于地图工作的答案,这意味着至lessChrome和Firefox(Array.from在Chrome中不起作用)。 PS。 我知道那里有很棒的wu.js,但是它对traceur的依赖使我感到很失望。

用ES6语法和Babel扩展Javascript的错误

我试图用ES6和Babel来扩展Error。 这不是工作。 class MyError extends Error { constructor(m) { super(m); } } var error = new Error("ll"); var myerror = new MyError("ll"); console.log(error.message) //shows up correctly console.log(myerror.message) //shows empty string 错误对象从来没有得到正确的消息集。 试试Babel REPL 。 现在我已经看到了一些关于SO的解决scheme( 例如这里 ),但是他们都看起来非常不合适ES6-Y。 如何在一个不错的,ES6的方式呢? (这是在巴别塔工作)

ECMAScript 6是否具有抽象类的约定?

我很惊讶,在ES6上阅读时我找不到有关抽象类的东西。 (通过“抽象类”我正在谈论它的Java的含义,其中抽象类声明子类必须实现的方法签名才能实例化)。 有没有人知道在ES6中实施抽象类的任何约定? 能够用静态分析来捕捉抽象类违规将会很好。 如果我在运行时提出一个错误来指示抽象类实例的尝试,那么错误是什么?

匿名JavaScript函数f => f究竟做了什么?

我正在使用具有函数作为参数的函数的第三方库。 我正在做一些条件检查,以决定是否添加一个特定的函数作为参数,在某些情况下,我不想提供一个函数。 在这种情况下提供null会引发错误。 我发现这个代码有效,但是我不完全理解发生了什么。 compose(__DEV__ ? devTools() : f => f) 是f => f相当于() => {}是一个空的匿名函数吗?

如何模拟一个ES6模块的import?

我有以下ES6模块: network.js export function getDataFromServer() { return … } widget.js import { getDataFromServer } from 'network.js'; export class Widget() { constructor() { getDataFromServer("dataForWidget") .then(data => this.render(data)); } render() { … } } 我正在寻找一种方法来testing一个模拟的getDataFromServer实例的Widget。 如果我使用单独的<script>而不是ES6模块,就像在Karma中那样,我可以编写我的testing: describe("widget", function() { it("should do stuff", function() { let getDataFromServer = spyOn(window, "getDataFromServer").andReturn("mockData") let widget = new Widget(); expect(getDataFromServer).toHaveBeenCalledWith("dataForWidget"); expect(otherStuff).toHaveHappened(); }); […]

Object.is与===

我偶然发现了一个使用这种比较的代码示例: var someVar = 0; Object.is(false, someVar); //Returns false 我知道false == 0将是true ,这就是为什么我们有=== 。 Object.is与===什么不同?