자바스크립트 객체 키의 순서
Object.keys({
2: true,
1: true,
'00': true,
'b': true,
'a': true,
'3': true,
})
답변(클릭하면 볼 수 있습니다)
[ "1", "2", "3", "00", "b", "a" ]
그래서 정확히 무슨 일이 일어나고 있습니까?? 다음은 주문 규칙입니다.
>=0
(자세한 내용은 아래 참조) 하지만 잠깐, 문자열이 삽입 순서에 따라 자체적으로 정렬되는 경우 왜
'3'
가 '00'
보다 먼저 왔습니까?음, JS는 문자열이 숫자로 변환될 수 있는지 확인합니다. 가능하다면 문자열이 아닌 숫자로 정렬합니다.
그리고
'00'
는 어떻습니까? 분명히 새 숫자로 변환한 다음 새 숫자에서 toString()
와 유사한 작업을 수행하고 새 문자열을 원래 문자열과 비교합니다.일치하면 숫자로 묶일 수 있습니다. 일치하지 않으면 문자열입니다.
const originalString = '00'
const stringToNumber = Number(originalString)
const matchesOriginalString = stringToNumber.toString() === originalString // false: '0' !== '00'
꽤 명확하죠? :피
도움을 주신 이 기사에 감사드립니다https://www.stefanjudis.com/today-i-learned/property-order-is-predictable-in-javascript-objects-since-es2015/
다음은 the spec의 문구입니다.
번호
For each own property key P of O such that P is an array index, in ascending numeric index order, Add P as the last element of keys.
즉 오름차순으로 숫자 키를 먼저 삽입하십시오.
문자열
For each own property key P of O such that Type(P) is String and P is not an array index, in ascending chronological order of property creation, Add P as the last element of keys.
즉
array index
가 아닌 한 생성 순서대로 문자열 키를 삽입하십시오. 그래서 그게 뭐야?An integer index is a String-valued property key that is a canonical numeric String (see 7.1.21) and whose numeric value is either +0 or a positive integer ≤ 253 - 1. An
array index
is an integer index whose numeric value i is in the range +0 ≤ i < 232 - 1.
source for array index
즉, 표준 숫자 문자열이고 +0보다 큰 문자열 키
그래서 ... 표준 숫자 문자열이 무엇입니까?
[A canonical numeric string is an] argument converted to a Number value if it is a String representation of a Number that would be produced by ToString, or the string "-0".
source for canonical numeric string
즉, 해당 문자열이
toString()
인 숫자와 동일한 경우기호
For each own property key P of O such that Type(P) is Symbol, in ascending chronological order of property creation, Add P as the last element of keys.
즉, 생성 순서대로 기호 키를 삽입하십시오.
Reference
이 문제에 관하여(자바스크립트 객체 키의 순서), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/frehner/the-order-of-js-object-keys-458d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)