2011-04-22 5 views
6

MDN 상태 :javascript : 원시 문자열에 메소드가 있습니까?

프리미티브, 프리미티브 값

객체 아니며 어떤 방법이없는 데이터. JavaScript에는 5 원시 데이터 유형이 있습니다. 문자열, 숫자, 부울, null, 정의되지 않음. null 및 undefined를 제외한 모든 프리미티브 값은 프리미티브 값을 래핑하는 등가물 인 개를가집니다. String 객체 은 문자열 프리미티브를 둘러 쌉니다. 모든 프리미티브는 변경 불가능합니다.

그래서 우리는 호출 할 때 "s".replace 또는 "s".anything 그것은 new String("s").replacenew String("s").anything에 해당?

답변

12

아니요, 문자열 프리미티브에는 메서드가 없습니다. 숫자 프리미티브와 마찬가지로, 자바 스크립트 런타임은 같은 구조에 의해 그렇게하도록 요청 본격적인 "문자열"객체에 촉진 : 특히 일부 언어에서

var space = "hello there".indexOf(" "); 

(물론, 자바,하지만 난 생각 용어는 공통적으로 사용됨) 적절한 경우 언어가 객체 래퍼의 기본 요소를 "상자"한다고합니다. 숫자를 사용하면 토큰 문법의 모호함으로 인해 조금 더 복잡해집니다. 당신은 말할 수 없습니다

var foo = 27.toLocaleString(); 

"." 당신이 필요로하는 방식으로 해석되지 않습니다. 그러나 :

var foo = (27).toLocaleString(); 

잘 작동합니다. 문법 예를 들어, 그래서 모호하지 — 그 문제에 대한 문자열 프리미티브 — 및 부울, 함께 :

var foo = true.toString(); 

작동합니다.

+0

heys btw는 이중 점 구문 "standard"입니까? Like 27.toLocaleString() – Pacerier

+0

Chrome에서 적어도 작동하는 것 같습니다 ... 문제는 저수준 "토큰 문법"이 첫 번째 "." 부동 소수점 숫자가 보이는 방식 ("23.223")으로 인해 숫자에 적용됩니다. 하지만 tokenizer가 두 번째 "."에서 멈추고 속성 참조 표현식을 구성하기 위해 파서에 남겨두기 때문에 이중 점 트릭 *이 작동해야합니다. – Pointy

+0

개인적으로, 나는'(27) .toLocaleString()'을 선호한다. 왜냐하면 약간의 "."트랙을 잃어 버리기 쉽기 때문이다. 거기에 갇혔다. 그러나 이는 단지 문체적인 의견이며 많은 가치가 있지는 않습니다 :-) – Pointy

4

기술적으로 정답은 "아니오"입니다.

실제 답변은 "아니요, 어쨌든 작동합니다"입니다. 당신이

"s".replace() 

뭔가를 할 때 통역 당신이

var str = new String("s") 

그것을 만든 것처럼 실제로 문자열을 조작하려는 것을 알고, 따라서 당신이 그 일을 한 것처럼 역할을하기 때문이다.

관련 문제