我正在学习在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()?
答案 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。这可能是一个有趣的读物。