source

JSON.parse('1234')가 1234를 반환하는 이유는 무엇입니까?

manycodes 2023. 4. 1. 09:38
반응형

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()는 배열이 아닌 문자열을 요구합니다.그러나 배열 또는 기타 문자열 이외의 값을 지정하면 메서드는 즉시 던지는 대신 자동으로 문자열로 강제하여 계속 진행합니다.사양부터:

  1. JText를 ToString(텍스트)으로 합니다.
  2. ...

배열의 문자열 표현은 쉼표로 구분된 값으로 구성됩니다.그렇게

  • 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

반응형