>웹 프론트엔드 >JS 튜토리얼 >Chrome_json에서 JSON.parse의 특수 구현

Chrome_json에서 JSON.parse의 특수 구현

WBOY
WBOY원래의
2016-05-16 18:12:091237검색

IE8/Firefox3.5/Chrome4/Safari4/Opera10에서는 이 방법을 구현했습니다. 사용법은 매우 간단합니다.

코드 복사 코드는 다음과 같습니다.

var str = '{"name ":"jack"}';
var json = JSON.parse(str);
alert(json.name)

이 사용됩니다. 이 메소드 "jack"을 구현하는 브라우저가 나타납니다.
Object.prototype에 json을 구문 분석하는 메서드를 추가하는 경우(누군가가 이 작업을 수행하여 기본 객체를 오염시키는 것에 강력하게 반대할 수 있지만 이는 순전히 논의를 위한 것입니다)
코드 복사 코드는 다음과 같습니다.

Object.prototype.parseJSON = function () {
return JSON.parse(this); }

모든 객체는 Object의 메소드를 상속받기 때문에 이때 바로 사용이 가능합니다.

코드복사 코드는 다음과 같습니다.
var str = '{"name":"jack"}'
var json = str.parseJSON()
alert (json.name);

str.parseJSON(), 이것은 parsJSON 내부에서 str을 가리킵니다. 현재 모든 브라우저가 성공적으로 구문 분석할 수 있는 것은 아닙니다.

IE8/Firefox/Safari/Opera에서는 여전히 "잭"이 팝업되는 반면 Chrome에서는 잡히지 않은 불법 액세스라는 오류를 보고합니다.
이렇게 쓰면 왜 크롬에서는 지원하지 않나요? 두 메서드를 비교하면 JSON.parse에 전달된 매개 변수 중 하나는 문자열 str이고 다른 하나는 this입니다. 둘이 별 차이 없는 것 같나요?
str.parseJSON()이 실행될 때, 이는 parseJSON 내부에서 str을 가리켜야 합니다. ParseJSON 메서드 수정:

코드 복사 코드는 다음과 같습니다.
Object.prototype. parsJSON = function () {
alert(typeof this);
return JSON.parse(this)
};

다시 실행하면 ParseJSON이 나타나는 것을 확인할 수 있습니다. 개체, 아마도 이것이 차이점입니다. 문자열을 직접 새로 작성하면 확실한 효과를 볼 수 있습니다

코드 복사 코드는 다음과 같습니다.
var js = JSON.parse(new String('{"name":"jack"}'));
alert(js.name);

위 코드는 Chrome을 제외하고 오류가 발생하면 다른 브라우저는 정상적으로 실행됩니다.
기본적으로 결론은 다음과 같습니다.
Chrome에서 JSON.parse의 첫 번째 매개변수는 문자열만 될 수 있고 객체는 될 수 없습니다. (새로운 String 메소드는 지원되지 않습니다.)
위로 돌아가서 give Object.prototype은 json을 구문 분석하는 방법을 추가합니다. 모든 브라우저와 호환되도록 하려면 다음과 같이 작성할 수 있습니다.

코드 복사 코드는 다음과 같습니다.
Object.prototype.parseJSON = function () {
return JSON.parse(this.toString())
}
var str = '{"name":"jack "}';
var json = str.parseJSON()
alert(json.name)

2010-10 -09: 이 BUG는 Chrome 6에서 수정되었습니다.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.