2012-05-15 2 views
6

문자열은 텍스트를 유지하고 조작 할 수있는 가장 간단한 개체로 볼 수 있으며 문자열에 작용하는 함수가 반드시 메서드로 묶여서는 안됩니다. 반면 자바 스크립트는 주로 웹 프로그래밍 언어이며 URI를 사용하면 언어의 문자열에 자주 사용됩니다. 이 경우 실제로는 lastName.encodeURIComponent()과 같은 것이 유용 할 것입니다.String 객체의 메서드가 아닌 esc, unescape 등의 함수는 왜 그런가요?

encodeURIComponent 및 unescape과 같은 기능이 String 객체의 함수가 아닌 함수 인 이유는 무엇입니까? 여기서 일하는 CS 원칙이 있습니까? 아니면 언어 디자이너 중 한 명이 주관적인 선택 이었습니까?

분명히 문자열에서 작동하는 모든 함수가 문자열 객체에 있어야하는 것은 아니지만 사람들이 어디서 어떻게 선을 그릴 지 결정합니까?

+0

왜 'eval'이 문자열인지 아닌지를 묻는 것과 같습니다. – Joseph

+0

예, 다소 묻는 것과 같습니다. 나는 조금 질문을 수정할 것이다. – Fuser97381

답변

3

이러한 메서드는 JavaScript의 일부분이지만 브라우저와 연결된 전역 개체 인 window에서 상속됩니다. 따라서 나열된 함수는 문자열을 처리하지만 실제로는 브라우저 기능과 밀접하게 연결되어 있으므로 String 프로토 타입에는 연결되지 않습니다. MDN과 같은 소스는 이것에 대해 다소 어두운 부분이 있지만 원래의 JS 사양에는 이러한 방법에 대한 언급이 없습니다.

어쩌면별로 이해가되지 않았지만 요즘은 실제로 JS가 인터넷 연결이없는 임베디드 시스템이나 다른 언어의 언어로 JS를 사용하고자 할 수도 있습니다. 여기에 encodeURIComponent()을 포함하는 구문은 document.getElementById()과 같은 위치에 있지 않습니다.

7

브라우저 환경에 따라 다르기 때문에 그들은 JavaScript 언어를위한 일반적인 String 객체의 장소를 가지고 있지 않습니다.

1

어디에서 멈출 것입니까? 문자열은 유비쿼터스 (unbiquitous)입니다. 문자열을 인수로 사용하거나 반환되는 메서드를 문자열 클래스에 사용해야하는 정의에 따르면.

마찬가지로 인코딩을 수행하는 스트림 및 스트림 메서드를 사용하는 인코딩 메서드를 사용하는 것이 합리적입니다.

여러분은 모든 곳을 빨리 돌아 다니거나 Encoding 클래스에 위임하여 문자열을 확장 할 수 있습니다.

1

escape() 함수는 문자열을 인코딩합니다. * 캐릭터 휴대용

이 함수는 m * AKE를 그것이 할 수 있도록 는 ASCII 문자를 지원하는 컴퓨터에있는 네트워크를 통해 전송.

이 기능은이 기능, 언어 등의 JS는 독립적 인 브라우저 기반 환경에서 URL에있는 문자열에 특정 뭔가 지금 특수 문자

을 인코딩합니다.

따라서 이스케이프를 넣으면 unescape 또한 String이 아닌 네트워크/URL 관련 시나리오에서는 쓸모 없게됩니다.

그 이유는 그들이 부분의 Window 객체입니다.

문자열로 원하면 String의 프로토 타입에 추가 할 수 있습니다.