JavaScript - property enumeration order


const obj1 = {
  c: 1,
  2: 2,
  a: 3,
  0: 4,
  b: 5,
  1: 6
}

const keys1 = []
for(const key in obj1){
  keys1.push(key)
}

keys1 // 0 1 2 c a b 순으로 나온다. 숫자가 먼저 오고, 작은 수에서 큰 수의 순서로. 문자열은 입력된 순서 ㅡ대로

근데 "02", '10', '01', '2' // 2 10 02 01 순으로 들어간다.

숫자인데 첫글자가 0이 아닌 경우는 숫자로 인식을 한다.
아닌 경우는 의도적으로 그렇게 입력한 문자열로 인식을 해서 입력 순서 그대로 들어간 것이다.

객체의 열거 순서 : 숫자 asc. 문자열 입력순서. symbol 입력순서.

근데 이런 열거 순서를 엄격히 지키는 애들은 Es6에 추가된 애들이다.

  • object.getOwnPropertyNames()
  • Reflect.ownKeys()
  • Obejct.assign()

아래처럼

  • for in
  • Object.keys()
  • JSON.stringify()

얘네들은 보장을 안해준다.