2011-08-09 1 views
9

가능한 중복 :
Why are there two kinds of JavaScript strings?프레임 워크 나 다른 사람이 원시 버전과 반대로 String/Number/Boolean 객체를 사용해야하는 이유는 무엇입니까?

예를 들어, 우리는 우리가 동적으로 계산하는 정규식 표현을 필요로하는 경우 new RegExp() 리터럴 정규식의 사용이 필요합니다.

가장자리 케이스 사람들이 원시 버전과 반대로 String/Number/Boolean 객체를 사용해야 할 필요가있을 때 정확히 무엇입니까?

+2

좋은 질문이기 때문에 어쨌든 투표했습니다. –

+0

내가 생각할 수있는 한 가지 이유는 특정 이유로 문자열 인스턴스에 새 속성을 추가하는 것입니다. 'new String'으로이 문자열을 만들어야합니다. –

답변

1

StringObject 인 (이 이제까지 필요합니다 어디도 하나의 생각하는 것 수 없기 때문에),하지만 원시 버전은 'Hello' (와 리터럴로 생성되는 존재하고 지금까지 가장 일반적입니다 익숙한).

사람이 new String()을 사용하여 다른 유형을 예를 들어 함수에서 String으로 변환하는 경우가 있습니다.

function leadingZero(number, padding) { 
    number = new String(number); 
    ... 
} 

선도 0은 Number에서 중요하지, 그래서 그것은 String해야합니다.

그러나 나는 여전히 String ('')으로 연결하여 NumberString으로 만든 것을 선호했을 것입니다.

function leadingZero(number, padding) { 
    number += ''; 
    ... 
} 

이 암시 적으로 String 원시를 반환 NumbertoString()를 호출합니다.

나는 사람들이 헤이 typeof foo==="string" 바보 - 증거가되지 않은 문자열이 new String 사용하여 생성되는 경우 typeof 우리에게 object를 제공하기 때문에 말 것을 읽고 있었다.

당신은 isString() 방법과 같이 바보가 증거 할 수

...

var isString = function(str) { 
    return Object.prototype.toString.call(str) == '[object String]'; 
} 

jsFiddle.

여러 window 환경에서 작동합니다. constructor 속성을 확인할 수도 있지만 복수 window 환경에서는 실패합니다.

이 답변에 Felix Kling의 덧글을 참조하십시오.

+1

'toString()'메서드를 직접 호출하여 문자열로 변환 할 수도 있습니다. –

+0

그게 내가 말하는거야. ""와의 연결에 비해'new String'을 사용할 때 어떤 이점이 있습니까? 그렇지 않으면 왜 사람들은'new String' *을 전혀 사용하지 않는 이유가 있을까요? – Pacerier

+0

@Felix 맞아요. 문자열로 연결하면 암시 적으로 해당 메서드 ('toString()')가'String'이 아닌 문자열에 대해 호출됩니다. – alex

관련 문제