添加或删除集合中的项目和提升的效果

时间:2017-01-04 21:12:50

标签: javascript arrays set

我正在学习在JavaScript中使用Sets,并在阅读文档时发现了一些奇怪的行为。

let beverageSet = new Set();
beverageSet.add('Rum');
beverageSet.add('Tea');
beverageSet.add('OJ');
console.log(beverageSet); // returns Set [‘Rum’, ‘OJ’]
beverageSet.delete('Tea');
console.log(beverageSet); // returns Set [‘Rum’, ‘OJ’]

我知道在执行代码之前,提升会将所有变量拉到范围的顶部,但是我没有看到任何显示它会影响在数组和集上调用的console.log()/方法。

这是吊装还是别的什么影响?我怎样才能绕过这个和console.log()完整的Set,然后再删除一个项目然后再调试console.log()?

1 个答案:

答案 0 :(得分:2)

console.log实现有时会决定异步获取值,从而显示可能会对其应用突变的结果,这些结果确实发生在console.log语句之后。

为避免这种情况,请以一种或另一种方式复制,例如:

console.log([...beverageSet]); // convert set to new array.

另见Bergi的answer关于console.log的异步性的问题。

此问题还有铬问题:50316 - Console.log gives incorrect output in Chrome Developer Tools console。这可能是一个有趣的读物。