JSON.parse('1234')가 1234를 반환하는 이유는 무엇입니까?
동작을 이해하는 데 문제가 있습니다.JSON.parse
.JSON.parse
문자열에서만 동작합니다.그러나 문자열에 숫자만 포함된 경우 문자열이 하나만 포함된 배열(따옴표로 묶은 문자열도 포함)에 대해 작동합니다.
JSON.parse(['1234']) // => 1234
JSON.parse(['1234as']) // => throws error
JSON.parse(['123', '123']) // => throws error
지적하신 바와 같이JSON.parse()
는 배열이 아닌 문자열을 요구합니다.그러나 배열 또는 기타 문자열 이외의 값을 지정하면 메서드는 즉시 던지는 대신 자동으로 문자열로 강제하여 계속 진행합니다.사양부터:
- JText를 ToString(텍스트)으로 합니다.
- ...
배열의 문자열 표현은 쉼표로 구분된 값으로 구성됩니다.그렇게
String(['1234'])
돌아온다'1234'
,String(['1234as'])
돌아온다'1234as'
,그리고.String(['123', '123'])
돌아온다'123,123'
.
문자열 값은 다시 따옴표로 묶이지 않습니다.즉,['1234']
그리고.[1234]
둘 다 같은 문자열로 변환됩니다.'1234'
.
그래서 당신이 정말로 하는 일은:
JSON.parse('1234')
JSON.parse('1234as')
JSON.parse('123,123')
1234as
그리고.123,123
유효한 JSON이 아니기 때문에JSON.parse()
두 경우 모두 던집니다.(전자는 처음에 합법적인 JavaScript 구문이 아니며, 후자는 속하지 않는 쉼표 연산자를 포함합니다.)
1234
한편, Number 리터럴이므로 유효한 JSON이며, 그 자체를 나타냅니다.그래서...JSON.parse('1234')
(확장하면)JSON.parse(['1234'])
)는 숫자 값 1234를 반환합니다.
JSON.parse가 문자열을 가져오지 않으면 먼저 입력을 문자열로 변환합니다.
["1234"].toString() // "1234"
["1234as"].toString() // "1324as"
["123","123"].toString() // "123,123"
모든 출력에서 "1234" 구문 분석 방법만 알 수 있습니다.
여기서 주의할 점은 두 가지입니다.
1) 인수를 문자열로 변환합니다(스펙 알고리즘의 첫 번째 스텝 참조).입력 결과는 다음과 같습니다.
['1234'] // String 1234
['1234as'] // String 1234as
['123', '123'] // String 123,123
2) json.org의 사양에는 다음과 같이 기재되어 있습니다.
[...] 값은 큰따옴표로 묶은 문자열, 숫자, 참 또는 거짓 또는 늘, 개체 또는 배열일 수 있습니다.이러한 구조는 중첩될 수 있습니다.
다음과 같은 것이 있습니다.
JSON.parse(['1234'])
// Becomes JSON.parse("1234")
// 1234 could be parsed as a number
// Result is Number 1234
JSON.parse(['1234as'])
// Becomes JSON.parse("1234as")
// 1234as cannot be parsed as a number/true/false/null
// 1234as cannot be parsed as a string/object/array either
// Throws error (complains about the "a")
JSON.parse(['123', '123'])
// Becomes JSON.parse("123,123")
// 123 could be parsed as a number but then the comma is unexpected
// Throws error (complains about the ",")
언급URL : https://stackoverflow.com/questions/43718032/why-does-json-parse1234-return-1234
'source' 카테고리의 다른 글
스프링 부트 제어 대상 JAR 파일 이름 (0) | 2023.04.01 |
---|---|
후크를 사용하여 어레이에서 객체 삭제(useState) (0) | 2023.04.01 |
JavaScript를 사용하여 서버에서 텍스트 파일을 읽는 방법 (0) | 2023.04.01 |
숍 페이지만을 대상으로 합니다. (0) | 2023.04.01 |
쿼리 캐시를 사용하지 않고 Spring Data JPA 쿼리 방식의 결과를 캐시하려면 어떻게 해야 합니까? (0) | 2023.04.01 |