なっく日報

技術やら生活やらのメモ

続・Node.js v4がリリースされたらコードの書き方でどこが変わるか?

明日にもNode.js v4.0.0出そうですね!楽しみです。

github.com

この記事は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

developer.mozilla.org

↑にあるようなモノがいろいろ追加されています。

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以降は修正されています。

github.com

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 }