Object.keys() сложность?

Кто-нибудь знает временную сложность ECMAScript5 Object.keys() в общих реализациях? Это O(n) для клавиш n? Является ли время пропорциональным размеру хеш-таблицы, предполагая реализацию хэша?

Я ищу либо гарантии у разработчиков языка, либо для сравнения в реальном мире.

Ответ 1

Как представляется, O(n) в V8 (хром, node.js):

> var hash = {}
>   ,    c = 0;
> 
> var s = +new Date();Object.keys(hash);console.log(+new Date() - s);
0
> for(var i=0; i<100000; i++, c++){ hash[c] = 1; }
> var s = +new Date();Object.keys(hash);console.log(+new Date() - s);
26
> for(var i=0; i<100000; i++, c++){ hash[c] = 1; }
> var s = +new Date();Object.keys(hash);console.log(+new Date() - s);
49
> for(var i=0; i<100000; i++, c++){ hash[c] = 1; }
> var s = +new Date();Object.keys(hash);console.log(+new Date() - s);
75
> for(var i=0; i<100000; i++, c++){ hash[c] = 1; }
> var s = +new Date();Object.keys(hash);console.log(+new Date() - s);
102