Quantcast
Channel: CNode:Node.js专业中文社区
Viewing all articles
Browse latest Browse all 14821

【技术博客】Object.keys返回的元素顺序可靠吗

$
0
0

原文在我的博客: https://zhanzhenzhen.github.io/2016_12_11

Object.keys返回的元素顺序可靠吗

Object.keys(obj)返回的是一个数组。一般情况下,元素总是按属性赋值时的顺序(而不是按照名称顺序)排序的。例如:

var obj = {};
obj.a = true;
obj.b = true;

Object.keys(obj)返回的是["a", "b"]

而对于这个:

var obj = {};
obj.b = true;
obj.a = true;

Object.keys(obj)返回的是["b", "a"]

你可能会利用这个特性,让程序依赖这个顺序。例如,有时要用对象实现“字典(dictionary)”的结构,这样查询速度快,但同时又想要程序记住每个key赋值的顺序。用Object.keys真是完美。我也这样做了,直到有一天……

我突然发现竟然有例外的情况。当某个key只含有数字字符(不以0开头),且值小于4294967296时,它总是以数字大小的顺序排序。例如:

var obj = {};
obj["56"] = true;
obj["34"] = true;

Object.keys(obj)返回的是["34", "56"]而不是["56", "34"]

所以现在我认为,应避免依赖Object.keys返回的元素顺序。现在我的代码里,如果有这种需求,我都是建一个对象,再建一个数组,用数组储存顺序。


Viewing all articles
Browse latest Browse all 14821

Trending Articles