자바스크립트 객체 키의 순서

5530 단어 jstriviajavascript
퀴즈 타임! 다음 배열은 어떻게 생겼습니까?

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.



    즉, 생성 순서대로 기호 키를 삽입하십시오.

    좋은 웹페이지 즐겨찾기