LoginSignup
8
8

More than 5 years have passed since last update.

オブジェクト生成時にundefinedをセットする意味

Posted at

個人的に気になったので調べてみました。

1. オブジェクトの生成に関するコスト

test0.js: 空オブジェクトの生成

test0.js
var i, count = 1000000, obj;
console.time();
for (i = 0; i < count; i++) {
  obj = {};
}
console.timeEnd();

test1.js: 最初に値まで定義する

test1.js
var i, count = 1000000, obj;
console.time();
for (i = 0; i < count; i++) {
  obj = { a: 1 };
}
console.timeEnd();

test2.js: 最初にundefinedを定義し、後から値代入

test2.js
var i, count = 1000000, obj;
console.time();
for (i = 0; i < count; i++) {
  obj = { a: undefined };
  obj.a = 1;
}
console.timeEnd();

test3.js: 最初に定義せず、後から値代入

test3.js
var i, count = 1000000, obj;
console.time();
for (i = 0; i < count; i++) {
  obj = {}
  obj.a = 1;
}
console.timeEnd();

方法

上記のファイルをそれぞれ5回ずつ実行して計測した。(node v0.10.18)

結果

1回目 2回目 3回目 4回目 5回目
test0.js 6ms 6ms 6ms 5ms 6ms
test1.js 8ms 7ms 7ms 7ms 7ms
test2.js 6ms 5ms 6ms 6ms 6ms
test3.js 38ms 37ms 37ms 37ms 36ms

表からわかるように、最初に値、undefinedを定義したものに比べて、なにも定義しなかった場合は5~6倍遅くなっていた。

結論

速度を気にした方が良いところ、for文をたくさん回すところでは使った方がいいと思われるが、単純計算1回あたり0.00003ms程度の違いなので無理して使うほどではないと思われる。

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8