[javascript] JavaScript에서 var가 문자열인지 어떻게 확인할 수 있습니까?

JavaScript에서 var가 문자열인지 어떻게 확인할 수 있습니까?

나는 이것을 시도했지만 작동하지 않습니다 …

var a_string = "Hello, I'm a string.";

if (a_string typeof 'string') {
    // this is a string
}



답변

당신은 가까이 있었다 :

if (typeof a_string === 'string') {
    // this is a string
}

관련 참고 사항 : new String('hello')유형이 Object대신 문자열이 생성되면 위의 검사가 작동하지 않습니다 . 이 문제를 해결하는 복잡한 솔루션이 있지만 문자열을 그런 식으로 만드는 것을 피하는 것이 좋습니다.


답변

typeof연산자는 중위 (그래서 당신의 예제의 LHS가 이해가되지 않습니다)되지 않습니다.

당신은 그렇게 사용해야합니다 …

if (typeof a_string == 'string') {
    // This is a string.
}

typeof함수가 아니라 연산자 라는 것을 기억하십시오 . 그럼에도 불구하고, 당신은 typeof(var)야생에서 많이 사용되는 것을 볼 수 있습니다 . 이만큼 의미가 var a = 4 + (1)있습니다.

또한 ==두 피연산자가 모두 String( typeof 항상 a를 반환 )이기 때문에 (평등 비교 연산자)를 사용할 수도 있습니다 String. JavaScript는 내가 사용한 것과 동일한 단계를 수행하도록 정의되어 있습니다 ===(엄격한 비교 연산자).

으로 Box9 언급 ,이 감지되지 않습니다 인스턴스 String객체를.

당신은 그것을 감지 할 수 있습니다 ….

var isString = str instanceof String;

jsFiddle .

…또는…

var isString = str.constructor == String;

jsFiddle .

그러나 이것은 다중 window환경 에서 작동하지 않습니다 (생각하십시오 iframe).

당신은이 문제를 해결할 수 있습니다 …

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

jsFiddle .

그러나 다시 Box9에서 언급했듯이 리터럴 String형식을 사용하는 것이 좋습니다 (예 🙂var str = 'I am a string'; .

추가 자료 .


답변

이전 답변을 결합하면 다음과 같은 솔루션이 제공됩니다.

if (typeof str == 'string' || str instanceof String)

또는

Object.prototype.toString.call(str) == '[object String]'


답변

다음 표현식은 true를 리턴 합니다 .

'qwe'.constructor === String

다음 표현식은 true를 리턴 합니다 .

typeof 'qwe' === 'string'

다음 표현식은 false (sic!)를 반환합니다 .

typeof new String('qwe') === 'string'

다음 표현식은 true를 리턴 합니다 .

typeof new String('qwe').valueOf() === 'string'

가장 좋은 방법 ( imho ) :

if (someVariable.constructor === String) {
   ...
}


답변

요즘 나는 typeof () 함수 형식을 사용하는 것이 바람직하다고 생각합니다 …

if(filename === undefined || typeof(filename) !== "string" || filename === "") {
   console.log("no filename aborted.");
   return;
}


답변

모든 경우에 null 또는 undefined 확인 a_string

if (a_string && typeof a_string === 'string') {
    // this is a string and it is not null or undefined.
}


답변

모든 경우에 효과가있는 나의 개인적인 접근 방식은 모두 문자열에만 존재하는 멤버의 존재를 테스트하는 것입니다.

function isString(x) {
    return (typeof x == 'string' || typeof x == 'object' && x.toUpperCase && x.substr && x.charAt && x.trim && x.replace ? true : false);
}

참조 : http://jsfiddle.net/x75uy0o6/

이 방법에 결함이 있는지 알고 싶지만 수년 동안 나에게 도움이되었습니다.