Programing

JS 객체의 키 (문자열) 길이에 제한이 있습니까?

lottogame 2020. 10. 30. 07:39
반응형

JS 객체의 키 (문자열) 길이에 제한이 있습니까?


그래서 우리는 키가 id (int)이고 값이 문자열 인 객체가있는 경우가있었습니다. 그러나 우리는 대부분의 경우 문자열을 기준으로 id를 조회하는 것을 알아 챘습니다. 그래서 우리는 역순으로 문자열을 키로 만들고 값은 id입니다. 그렇게하면 각 항목을 살펴보고 값을 비교하는 대신 var id = storage[text];. 다음은 우리가 한 일의 예입니다.

다음은 이전 구현의 예입니다.

var storage = {
  0 : null,
  1 : "Hello",
  2 : "world!",
  3 : "How are you?"
}

다음은 새로운 구현의 예입니다.

var storage = {
  "null" : 0,
  "Hello" : 1,
  "world!" : 2,
  "How are you?" : 3
}

이제 문자열이 키이며 동일한 문자열에 대해 동일한 ID를 가져도 괜찮다는 것을 이해합니다. 그러나 이제 문자열이 잠재적으로 상당히 클 수 있기 때문에 (슬림 한 기회이지만 문자열 당 최대 1KB 일 수 있음) JS 또는 Android webview가 객체 키에 적용하는 길이 제한이 있습니까?

또한이 구현에는 단점이 있습니까? 나는 지금까지 어떤 문제도 발견하지 못했지만 당신은 결코 알지 못합니다.


나는 이것을 조금 조사했습니다.

MDN은이 문제에 대해 침묵 하고 있으며 사양 ( ES5 , ES6 )도 마찬가지입니다 . 속성 접근자는 자격이없는 문자열이어야한다고 만 명시합니다. 즉, 사양에 관한 한 제한이 없습니다. 그것은 놀라운 일이 아닙니다.

브라우저가 어떻게 처리하는지는 또 다른 문제입니다. 테스트를 설정 하고 여러 브라우저에서 실행했습니다. Chrome 40 (데스크톱), Chrome 40 (Android 5.1), Firefox 36, Opera 27 및 IE9 +는 최대 227 자의 속성 이름을 처리 할 수 ​​있습니다 . Safari 8 (OS X Yosemite)은 2 ~ 30 자의 속성 이름도 처리 할 수 ​​있습니다 .

IE를 제외한 모든 브라우저의 경우 최대 속성 길이는 최대 문자열 길이와 같습니다. IE9 + 2 ~ 최대 문자열 길이를 처리 할 수있는 30 자,하지만, 객체 키에 대한 제한은 2 개에있다 27 단지 다른 브라우저에서와 같이 문자.

테스트 코드로 인한 메모리 문제로 인해 iOS의 IE8 및 Safari에서 테스트가 작동하지 않았습니다.

요컨대, 긴 속성 이름을 사용하는 것이 안전합니다. 문자열 자체가 브라우저가 처리 할 수있는 범위 내에있는 한 속성 이름으로도 사용할 수 있습니다.


아니요, 문자열 길이에는 제한이 없으며 (메모리에 맞는 한) 구현도 괜찮아 보입니다. 예를 들어 부울 값이있는 배열을 '뒤집은'배열을 갖는 것은 매우 일반적입니다. 그리고 키로서의 문자열에 관해서 : 문자열은 특정 주소에 저장되는 불변의 기호이며, 실제로 배열의 인덱스로 사용되는 것은 문자열 자체가 아니라 해당 주소 (일명 포인터 일명 참조)입니다.


ECMAScript 2016에서는 이제이 질문에 대한 확실한 답이있는 것처럼 보입니다. string.lengthMDN 웹 문서에 따르면 :

ECMAScript 2016 (ed. 7)은 최대 길이 2 ^ 53-1 요소를 설정했습니다. 이전에는 최대 길이가 지정되지 않았습니다.

이는 ECMAScript® 2016 언어 사양 에서도 확인할 수 있습니다 .

문자열 유형은 최대 길이가 2 53 -1 요소 인 0 개 이상의 16 비트 부호없는 정수 값 ( "요소")으로 구성된 모든 순서가 지정된 시퀀스의 집합입니다 .

참고 URL : https://stackoverflow.com/questions/13367391/is-there-a-limit-on-length-of-the-key-string-in-js-object

반응형