Questions tagged «ecmascript-6»

ECMAScript规范的2015版本现已成为标准(ECMAScript 2015)。仅在问题专门与ECMAScript 2015中提供的新功能或技术更改有关的情况下使用此标记。

7
为什么在JavaScript中对象不可迭代?
为什么默认情况下无法迭代对象? 我经常看到与迭代对象有关的问题,常见的解决方案是迭代对象的属性并以这种方式访问​​对象中的值。这似乎很常见,使我想知道为什么对象本身不可迭代。 for...of默认情况下,像ES6这样的语句很适合用于对象。因为这些功能仅适用于不包含{}对象的特殊“可迭代对象” ,所以我们必须仔细研究以使其适用于要用于它的对象。 for ... of语句创建一个循环,循环遍历可迭代对象 (包括Array,Map,Set,arguments对象等)... 例如,使用ES6生成器函数: var example = {a: {e: 'one', f: 'two'}, b: {g: 'three'}, c: {h: 'four', i: 'five'}}; function* entries(obj) { for (let key of Object.keys(obj)) { yield [key, obj[key]]; } } for (let [key, value] of entries(example)) { console.log(key); console.log(value); for (let …

5
如何在ES6类中创建“公共静态字段”?
我正在制作一个Javascript类,并且希望有一个像Java这样的公共静态字段。这是相关代码: export default class Agent { CIRCLE: 1, SQUARE: 2, ... 这是我得到的错误: line 2, col 11, Class properties must be methods. Expected '(' but instead saw ':'. 看来ES6模块不允许这样做。有没有办法得到想要的行为,还是我必须写一个吸气剂?

5
关键字“ const”不会使值不变。这是什么意思?
Axel Rauschmayer博士在探索ES6中有const定义: const就像let一样工作,但是您声明的变量必须立即初始化,并且其值以后不能更改。[…] const bar = 123; bar = 456; // TypeError: `bar` is read-only 然后他写道 陷阱:const不会使值不变 const 仅表示变量始终具有相同的值,但并不表示该值本身是不变的。 我对此陷阱感到困惑。有人可以const用这个陷阱清楚地定义吗?

1
与React-Router的活动链接?
我正在尝试React-Router(v4),但从Nav开始让Linkbe之一出现问题active。如果我单击任何Link标签,则活动的东西开始工作。但是,我希望HomeLink能够在应用启动后立即启动,因为那是在/路线上加载的组件。有什么办法吗? 这是我当前的代码: const Router = () => ( <BrowserRouter> <div> <Nav> <Link activeClassName='is-active' to='/'>Home</Link> {/* I want this to start off as active */} <Link activeClassName='is-active' to='/about'>About</Link> </Nav> <Match pattern='/' exactly component={Home} /> <Match pattern='/about' exactly component={About} /> <Miss component={NoMatch} /> </div> </BrowserRouter> )

3
不需要()Babel 6.x中的默认导出值
在Babel 5.x中,我可以编写以下代码: app.js export default function (){} index.js require('babel/register'); require('./app')(); 然后,我可以node index.js没有错误地运行。但是,使用Babel 6.x,运行以下代码 index.es6.js require('babel-core/register'); require('./app')(); 导致错误 require(...)不是函数 我想知道为什么吗?

4
浏览器中的ES6模块:Uncaught SyntaxError:意外的令牌导入
我是ES6(ECMAScript 6)的新手,我想在浏览器中使用其模块系统。我阅读了Firefox和Chrome支持的ES6,但是使用时出现以下错误export Uncaught SyntaxError: Unexpected token import 我有一个test.html文件 <html> <script src="test.js"></script> <body> </body> </html> 和一个test.js文件 'use strict'; class Test { static hello() { console.log("hello world"); } } export Test; 为什么?

5
ES6:条件和动态导入语句
有条件的 是否可以像下面这样有条​​件的导入语句? if (foo === bar) { import Baz from './Baz'; } 我已经尝试了上面的方法,但是在编译时遇到了以下错误(来自Babel)。 'import' and 'export' may only appear at the top level 动态 是否可以具有如下所示的动态导入语句? for (let foo in bar) { if (bar.hasOwnProperty(foo)) { import Baz from `./${foo}`; } } 上面在编译时从Babel收到了相同的错误。 这可能可行吗,或者我缺少什么? 推理 我尝试执行此操作的原因是,许多“页面”都有大量导入,并且它们遵循类似的模式。我想通过使用动态for循环导入这些文件来清理代码库。 如果这不可能,那么是否有更好的方法来处理ES6中的大量导入?

5
如何返回许多承诺并在执行其他操作之前等待所有承诺
我有一个循环,该循环调用异步完成的方法。该循环可以多次调用该方法。在这个循环之后,我有另一个循环,仅当所有异步工作完成后才需要执行。 所以这说明了我想要的: for (i = 0; i < 5; i++) { doSomeAsyncStuff(); } for (i = 0; i < 5; i++) { doSomeStuffOnlyWhenTheAsyncStuffIsFinish(); } 我对诺言不太熟悉,所以有人可以帮助我实现诺言吗? 这是我的doSomeAsyncStuff()举止: function doSomeAsyncStuff() { var editor = generateCKEditor(); editor.on('instanceReady', function(evt) { doSomeStuff(); // There should be the resolve() of the promises I think. }) } …

12
错误:找不到相对于目录“ / Users / username”的预设“ es2015”
尝试使用gulp-babel时出现以下错误: 错误:找不到相对于目录“ / Users / username”的预设“ es2015” 我在全球和本地安装了es2015预设,因此看不到为什么会出现问题。 以下是我的gulp设置和package.json。 var babel = require('gulp-babel'); var es2015 = require('babel-preset-es2015'); gulp.task('babel', function() { return gulp.src('./app/main.js') .pipe(babel({ presets: [es2015] })) .pipe(gulp.dest('dist')); }); Package.json "devDependencies": { "babel-preset-es2015": "^6.3.13", "babel-preset-es2015-node5": "^1.1.1", "browser-sync": "^2.11.0", "gulp": "^3.9.0", "gulp-babel": "^6.1.1", "gulp-stylus": "^2.2.0" } 我正在使用节点v5.1.0和babel v6.4.0 这是终端输出 终端输出

2
Javascript ES6集合的计算/时间复杂度
ES6规范为键集合(Set,Map,WeakSet和WeakMap)提供了什么时间复杂度(大O表示)? 我的期望,我期望的大多数开发人员,是规范和实现将使用被广泛接受的高性能算法,在这种情况下Set.prototype.has,add并delete在平均情况下都是O(1)。这同样适用于Map和Weak–等效物。 对我来说,实现的时间复杂性是否在例如ECMAScript 2015 Language Specification-6th Edition — 23.2 Set Objects中规定,并不是完全显而易见的。 除非我误解了(当然我确实很可能这样做),否则ECMA规范要求实现(例如Set.prototype.has)必须使用线性时间(O(n))算法。令我惊讶的是,规范中没有要求或什至不允许使用性能更高的算法,并且我对解释为何如此的情况非常感兴趣。

4
ES6模板文字与串联字符串
我有以下Ecma-Script-6代码 template literals let person = {name: 'John Smith'}; let tpl = `My name is ${person.name}.`; let MyVar="My name is "+ person.name+"."; console.log("template literal= "+tpl); console.log("my variable = "+MyVar); 输出如下: template literal= My name is John Smith. my variable = My name is John Smith. 这个是小提琴。我尝试搜索确切的差异,但找不到它,我的问题是这两个语句之间有什么区别, let tpl = `My …

6
ES6中的地图与对象,何时使用?
参考:MDN地图 当键直到运行时才是未知的,并且所有键都是相同的类型并且所有值都是相同的类型时,请在对象上使用映射。 当存在对单个元素进行操作的逻辑时,请使用对象。 题: 在对象上使用地图的适用示例是什么?特别是,“什么时候直到运行时才知道密钥?” var myMap = new Map(); var keyObj = {}, keyFunc = function () { return 'hey'}, keyString = "a string"; // setting the values myMap.set(keyString, "value associated with 'a string'"); myMap.set(keyObj, "value associated with keyObj"); myMap.set(keyFunc, "value associated with keyFunc"); console.log(myMap.get(keyFunc));

6
从数组创建对象
我想从数组列表中创建对象。我有一个动态数组,看起来像这样: var dynamicArray = ["2007", "2008", "2009", "2010"]; 并使用一些javascript es6,我想制作一个像这样的对象: const obj = { 2007: { x: width / 5, y: height / 2 }, 2008: { x: (2 / 5) * width, y: height / 2 }, 2009: { x: (3 / 5) * width, y: height / 2 …

3
ECMAScript 2015:for循环中的const
以下两个(或都不/两个)代码片段中的哪个应在完整的ECMAScript 2015实现中工作: for (const e of a) for (const i = 0; i < a.length; i += 1) 据我了解,第一个示例应该有效,因为它e是为每次迭代初始化的。i在第二个版本中也不应该这样吗? 我很困惑,因为现有的实现(Babel,IE,Firefox,Chrome,ESLint)似乎不一致,并且具有的完整实现,并且具有const两个循环变体的各种行为。我也无法在标准中找到具体点,因此将不胜感激。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.