2017-01-04 2 views
0

JavaScriptでセットを使用することを学習しており、ドキュメントを読むときに奇妙な動作に気付きました。セットからのアイテムの追加または削除ホイストの効果

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()をもう一度やり直す前に、これとconsole.log()を完全なSetで回避するにはどうすればいいですか?

+2

あなたは 'console.log()'の動​​作が混乱していると思っています。 Chromeを使用していますか? – Pointy

+1

'console.log(beverageSet);の最初の呼び出しで' set {"Rum"、 "Tea"、 "OJ"} 'が返されます – RomanPerekhrest

+0

はい私はChrome.Pointyを使用していますが、console.log() Chromeの動作はこれの最下部に到達する?私はFirefoxでも同じ結果を得ています。 – wesree

答えて

2

console.logの実装では、非同期的に値を取得することがあり、実際にconsole.logステートメントの後に発生した突然変異が適用された結果が表示されることがあります。これを避けるために

、このような場合のために、1またはその他の方法でコピーを取る:

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

もBergiのanswerconsole.logの非同期に関する質問へを参照してください。

これにクロムの問題があります:50316 - Console.log gives incorrect output in Chrome Developer Tools console。それは面白い読書かもしれません。

+0

今、たくさんの意味がある、ありがとう@トリコット。私はこれ以上読んでみましょう! – wesree

+0

歓迎します;-) – trincot

関連する問題