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/
이 방법에 결함이 있는지 알고 싶지만 수년 동안 나에게 도움이되었습니다.