続・Node.js v4がリリースされたらコードの書き方でどこが変わるか?
明日にもNode.js v4.0.0出そうですね!楽しみです。
この記事はNode.js v4がリリースされたらコードの書き方でどこが変わるか? - なっく日報の続きです。
V8 4.5がマージされた!
Merge vee-eight-4.5 into master by ofrobots · Pull Request #2682 · nodejs/node · GitHub
ので、このタイミングで以下のES6の機能が使えるようになりました。
- Arrow Functions
- Array functions
- Object.assign
Arrow Functions
コレないと、ES6感ないなーと思っていたので、いいですね。
[1, 2, 3].map(x => x * 2); // 2, 4, 6 setTimeout(() => { console.log('var self = this; とおさらばえー'); }, 100) (() => { // argumentsオブジェクトを持たない!! console.log(arguments); })();
みたいに書けるようになりました。
Arrow Functionの書き方だと、thisがbindされているのと同じなので、var self = this;
を目にすることはめっきり減るでしょう。
Array functions
↑にあるようなモノがいろいろ追加されています。
Array.from(arguments); Array.of(1, 2, 3); // [1, 2, 3] [1, 2, 3, 4, 5].find(x => x > 3); // 4 [1, 2, 3, 4, 5].findIndex(x => x > 3); // 3
Object.assign
js-next.hatenablog.com こちら詳しいですね。
jQuery.extend
的な。シャローコピー。
let target = { a: 1 }; let source = { b: 2 }; Object.assign(target, source); console.log(target); // { a: 1, b: 2 }
注意:Computed Propertiesは使わない方が良さそう
→v4.1.0以降は修正されています。
Computed Propertiesが正しく動作しないバグがV8にあるようなので、しばらくは使わない方が良さそう。
問題のコード
let prop = 'age' let val = 42 console.log([{ name: "ivan", [prop]: val }]) console.log({ name: "ivan", [prop]: val })
出力結果が↓に!!
[ { name: 'ivan' } ] { name: 'ivan', age: 42 }