Javascript 에서 문자열으로 가변입니다 확인합니다

무언가 JavaScript 에서 문자열 (string) 또는 가변입니다 서버인지에 파악할 수 있습니까?

이게 works for me.

if (typeof myVar === 'string' || myVar instanceof String)
// it's a string
else
// it's something else
해설 (34)
해결책

'' 연산자입니다 메리 페로프 사용할 수 있습니다.

var booleanValue = true; 
var numericalValue = 354;
var stringValue = "This is a String";
var stringObject = new String( "This is a String Object" );
alert(typeof booleanValue) // displays "boolean"
alert(typeof numericalValue) // displays "number"
alert(typeof stringValue) // displays "string"
alert(typeof stringObject) // displays "object"

예) 에서 이 웹사이트는. (예) 는 약간 수정된 표시되어도).

39 의 경우, 이 t 작동합니까 won& 예상대로 '새' 로 만든 문장열 문자열 () 는 거의 사용되지 않고 있지만, 이는 sup&gt\, [1], [2] &lt /sup&gt 권장됨 against<;). 이 경우, 다른 볼 처리 방법에 대한 답변을 하고 있다.

  1. Javascript 스타일입니까 안내선 [있다고 말한 프리미티브 객체에는 전혀 사용하지 않는 래퍼 (wrapper)] 구글 (https://google.github.io/styleguide/jsguide.html # 래퍼 객체에는 차단 기능).
  2. 더글러스 크록 포드 [권장됨 프리미티브 객체에는 수 있는 래퍼 사용되지 않는] (http://www.crockford.com/javascript/recommend.html).
해설 (11)

580+ 명이 찬성표를 던진 이후 틀린 답을 가지고 투표할 수 있다고 하지만, 샷건 스타일 작업 및 800+ 오토메이티드 생각해봤죠 제 대답은 간단하고 누구나 올릴 수 있게 명령복구하기 있는 형태로 이해할 수 있다.

function isString(x) {
  return Object.prototype.toString.call(x) === "[object String]"
}

또는, 인라인 (나는 오버클로킹된 울티스니프 설정 엔드입니다):

Object.prototype.toString.call(myVar) === "[object String]"

FYI, 파블로 산타 Cruz& # 39 에 답이 있기 때문에 문자열 (string&quot ";) '는' 잘못 '메리 페로프 새로운 개체'

39 의 정확한 답이 drax& 정답 및 기능, 됩니다. (이후 파블로 Santa Cruz 가장 말해둘꼐요 won& # 39, t, 내가 잘못된 것에 대해 일반 투표에서.)

그러나 실제로 이 질문에 대한 해답을 피쳐이면 말해둘꼐요 수정, 제외하고, 아마도 대한 제안을 통해 로다시 / 밑줄). disclaimer: 난 4 codebase. 로다시 기여했다

내 원래 오토메이티드 (이것은 분명히 하기 위한 대한 권리를 많은 앞면이야) 다음과 같다.

내가 이런 언더스코엘가이스 코드:

['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp'].forEach( 
    function(name) { 
        window['is' + name] = function(obj) {
              return toString.call(obj) == '[object ' + name + ']';
    }; 
});

이슬링 정의할 수 있는, 이스 움베르, etc.

이 있는 node. js, 모듈로 구현할 수 있습니다.

module.exports = [
  'Arguments', 
  'Function', 
  'String', 
  'Number', 
  'Date', 
  'RegExp'
].reduce( (obj, name) => {
  obj[ 'is' + name ] = x => toString.call(x) == '[object ' + name + ']';
  return obj;
}, {});
해설 (17)
        • 내가 jQuery 의 기능을 내장한 로다시 / 밑줄 또는 사용 권장. # 39, re 간단해진다는 they& 사용할 수 있고 쉽게 읽을 수 있습니다.

드랙스 인컨텍스트 함수은 다뤄야 할 경우 언급되지 않았다. 즉, (A) 모두 있는지 가변입니다 문자열으로 ipv6-literal. 또는 (B) 의 인스턴스입니다 it& # 39 는 문자열 객체를. 두 경우 모두, 이러한 기능은 가치를 올바르게 식별됩니다 部门是这样的 문자열으로.

  • 로다시 / 언더스코엘가이스 *
if(_.isString(myVar))
   //it's a string
else
   //it's something else
  • jQuery *
if($.type(myVar) === "string")
   //it's a string
else
   //it's something else

[로다시 _.isString 문서 ()] [1] 에서 자세한 내용을 참조.

자세한 내용은 참조 jQuery 문서용으로 스티페 달러 에 ().

[1]: https://lodash.com/docs # 이슬링

해설 (8)
function isString (obj) {
  return (Object.prototype.toString.call(obj) === '[object String]');
}

여기서 그걸 봤다.

http://perfectionkills.com/instanceof-considered-harmful-or-how-to-write-a-robust-isarray/

해설 (8)

가장 좋은 방법이다.

var s = 'String';
var a = [1,2,3];
var o = {key: 'val'};

(s.constructor === String) && console.log('its a string');
(a.constructor === Array) && console.log('its an array');
(o.constructor === Object) && console.log('its an object');
(o.constructor === Number || s.constructor === Boolean) && console.log('this won\'t run');

이러한 각 해당 클래스 등 기능에 &quot, 새로운 객체 () 가 만든 설정되었습니다 &quot. 상술합니다.

또한 덕 타이핑: 같은 it looks like a 덕, 볼넷, 만약 &quot 오리 - 오리 및 스멜스 라이크 비활성화해야 오버클로킹된 Array&quot. 마무리라뇨 그 속성을 선택합니다.

ᄋ "이번 도움이 됩니다.

편집. 12/05/2016

항상 flfile. 외곽진입 조합이 너무 너희에게베풀어진 수 있습니다. # 39 의 사용 예는 here& 로 메리 페로프 인라인 매핑해야 작업:

var type = { 'number': Math.sqrt.bind(Math), ... }[ typeof datum ];

39, & # 39, 실제 world& # 39 더 here& 한다. 인라인 매핑하므로 사용의 예:

function is(datum) {
    var isnt = !{ null: true, undefined: true, '': true, false: false, 0: false }[ datum ];
    return !isnt;
}
console.log( is(0), is(false), is(undefined), ... );  // >> true true false

[사용자 정의] &quot type-casting&quot, 이 기능을 사용하게 된다. - 오히려 &quot type-/-value-mapping"; - 그림 아웃해야 가변적입니다 &quot 경우 실제로 exists";). 이제 사이에 있는 'null' nasty 머리는요 분할합니다 &amp. '0'!

, T care about 그 유형을 너회가 don& # 39 여러 차례 했다. 를 결합한 해결하기 위해 또 다른 방법은 는 더크 유형 세트:

this.id = "998";  // use a number or a string-equivalent
function get(id) {
    if (!id || !id.toString) return;
    if (id.toString() === this.id.toString()) http( id || +this.id );
    // if (+id === +this.id) ...;
}
  • '및' '모두' 누마베리프로토티페 스트린고드프로토티페 투명지에 '네스토스트링 () 메서드를'. 구체화하십시오 avamer 만든 수 있는지 확인한 다음, it was the same http '지' 역할을 수행한 '숫자' 를 합니다. 즉, 우리는 그 유형을 잘 , * # 39 는 didn& 못할 정도였습니다.

더 할 수 있는 희망을 작동합니까:)

해설 (5)

난 왜 안 될 것 "이라고 한 can& # 39, t 장난하는거아니고 지켜보리니 메리 페로프 사용하여 간단히 '' 이 경우:

if (typeof str === 'string') {
  return 42;
}

예 이 어하여 페일오버됩니다 랩된 객체에는 문장열 (예를 들어, 문자열 (& # 39, foo& # 39;) '새') 이 널리 알려져 있지만 대부분의 현대 개발 툴은 그들의 잘못된 관행과 막기 위해 사용하는 것으로 보인다. (즉, 하나, 그냥 해결하십시오!)

이 모든 일을 '트릭' 는 오브ject.프로토티페스투스트링 생각하신거야 프런트엔트 개발자 유죄판결을 받은 적이 있지만, 어느 날 자신의 경력을 don& # 39 의 란드어 영리한 바보 t let it 얻을 수 있다. 또 뭔가 몽키 패치합니다 대로 분할합니다 객체에는 시제품:

<! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. &gt 거짓값 -;

const isString = thing => Object.prototype.toString.call(thing) === '[object String]';

console.log(isString('foo'));

Object.prototype.toString = () => 42;

console.log(isString('foo'));

끝 - &lt 스니핏 >;!

해설 (0)

I like to use this 단순한 솔루션:

var myString = "test";
if(myString.constructor === String)
{
     //It's a string
}
해설 (2)

이 사례는 왜 낮은 성능 문제:

시험 등 간단한 일을 제대로 하지 않은 경우 문자열으로 비싸다구요 수 있습니다.

예를 들어, 내가 하고 싶은 테스트하려면 뭔가 내가 할 수 있는 함수를 작성할 경우 문자열으로, 이 두 가지입니다.

  1. = str = 'const 이슬링 &gt. (오브ject.프로토티페스투스트링스콜 (str) = & # 39, & # 39, [객체에는 구체화하십시오]), '

  2. = str = 'const 이슬링 &gt. (# 39, & # 39 string& 메리 페로프 str =;) ' (string str instanceof));

이들은 모두 성능에 영향을 미칠 수 있다는 것, 예쁜 간단하지는 어떤 것들이 있을까요? 일반적으로 함수를 호출할 수 있으며, 특히 don& what& # 39 의 경우 비싸다구요 모르는 일이 몸에요 # 39. 예를 들어, 함수 호출이 있습니다 # 39 의 첫 번째 Object& toString 메서드입니다. 예를 들어, 함수 호출을 없기 때문에, 두 번째 메리 페로프 및 instanceof 있는 것으로 알려졌다. 연산자는 함수 호출을 비해 훨씬 빠르게.

예 2, 79% 는 성능 테스트됩니다 example1 때 보다 느린!

지켜보리니 테스트: https://jsperf.com/isstringtype

해설 (2)

로다시 가져온 것입니다.

function isString(val) {
   return typeof val === 'string' || ((!!val && typeof val === 'object') && Object.prototype.toString.call(val) === '[object String]');
}

console.log(isString('hello world!')); // true
console.log(isString(new String('hello world'))); // true
해설 (1)

내장 함수를 사용하여 작업할 경우 node. js 환경에 있는 유틸리티인 이슬링 됩니다.

const util = require('util');
if (util.isString(myVar)) {}

편집: 이 때문에 v4 로 @Jehy 는 사용되지 않았다.

해설 (3)

90% 에 충분할 것 같은데 @customcommander 솔루션을 통해 할 수 있었다.

typeof str === 'string'

/Dev/raw/raw200 경배하되 알았죠 (앨리어스가 이후 일반적으로 there& # 39 의 이유가 있는 '새 문자열 (& # 39, something& # 39;)' 의 코드에).

39 '이 아니라' 문자열 처리, re 로케이터로 you& 관심이 있는 경우 (예를 들어 일부 3rd party 에서 작성되지는 var) 을 사용하는 것처럼 단순하고 우아한 솔루션이므로 명확한 로다시 @ClearCloud8 제안됩니다 같다

그러나 신중한 접근이 꼭 이래야겠어요 제안하세요 라이브러리를 사용한 로다시 인해 같은 크기. 하는 대신

import _ from 'lodash'
...
_.isString(myVar)

이는 전체 큰 로다시 객체에는 # 39 는 다음과 같은 항목을 제안하세요, I&; d

import { isString as _isString } from 'lodash'
...
_isString(myVar)

또한 단순한 번들링은 괜찮을 합니다 (I) 는 다음과 같은 코드를 클라이언트로 여기).

해설 (0)
var a = new String('')
var b = ''
var c = []

function isString(x) {
  return x !== null && x !== undefined && x.constructor === String
}

console.log(isString(a))
console.log(isString(b))
console.log(isString(c))
해설 (2)

단순 솔루션 다음과 같습니다.

var x = "hello"

if(x === x.toString()){
// it's a string 
}else{
// it isn't
}
해설 (5)

다음 방법을 사용하면 있는지 확인합니다 가변입니다 문자열으로 ( com/go/4e6b330a_kr 존재하지 않는 등).

const is_string = value => {
  try {
    return typeof value() === 'string';
  } catch (error) {
    return false;
  }
};

let example = 'Hello, world!';

console.log(is_string(() => example)); // true
console.log(is_string(() => variable_doesnt_exist)); // false
해설 (0)

난 또 다른 예는 시간보다 짧은 것으로, 그 많이유 너무 이 작동합니다.

if (myVar === myVar + '') {
   //its string
} else {
   //its something else
}

빈 quote 의 값이 바뀌어 연결하여 붙여넣습니다 구체화하십시오. 만약 &lt code&gt myVar&lt /code>;;; 이미 문자열으로 어졌다면 if 문은 성공했습니다.

해설 (5)

내가 이 단순한 기법을 찾기 위한 유용한 유형 검사 구체화하십시오 -

String(x) === x // true, if x is a string
                // false in every other case

<! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. &gt 거짓값 -;

const test = x =>
  console.assert
    ( String(x) === x
    , `not a string: ${x}`
    )

test("some string")
test(123)           // assertion failed
test(0)             // assertion failed
test(/some regex/)  // assertion failed
test([ 5, 6 ])      // assertion failed
test({ a: 1 })      // assertion failed
test(x => x + 1)    // assertion failed

끝 - &lt 스니핏 >;!

너무 같은 기법을 사용할 수 -

Number(x) === x // true, if x is a number
                // false in every other case

<! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. &gt 거짓값 -;

const test = x =>
  console.assert
    ( Number(x) === x
    , `not a number: ${x}`
    )

test("some string") // assertion failed
test(123)           
test(0)             
test(/some regex/)  // assertion failed
test([ 5, 6 ])      // assertion failed
test({ a: 1 })      // assertion failed
test(x => x + 1)    // assertion failed

끝 - &lt 스니핏 >;!

및 정규 표현식 -

RegExp(x) === x // true, if x is a regexp
                // false in every other case

<! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. &gt 거짓값 -;

const test = x =>
  console.assert
    ( RegExp(x) === x
    , `not a regexp: ${x}`
    )

test("some string") // assertion failed
test(123)           // assertion failed
test(0)             // assertion failed
test(/some regex/)  
test([ 5, 6 ])      // assertion failed
test({ a: 1 })      // assertion failed
test(x => x + 1)    // assertion failed

끝 - &lt 스니핏 >;!

      • 객체에는 동일
Object(x) === x // true, if x is an object
                // false in every other case

NB, 정규 표현식, 어레이에는, 기능이 너무 객체에는 꼽히고 있다.

<! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. &gt 거짓값 -;

const test = x =>
  console.assert
    ( Object(x) === x
    , `not an object: ${x}`
    )

test("some string") // assertion failed
test(123)           // assertion failed
test(0)             // assertion failed
test(/some regex/)  
test([ 5, 6 ])      
test({ a: 1 })      
test(x => x + 1)    

끝 - &lt 스니핏 >;!

그러나 , 는 어레이입니다 확인 좀 다른 -

Array.isArray(x) === x // true, if x is an array
                       // false in every other case

<! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. &gt 거짓값 -;

const test = x =>
  console.assert
    ( Array.isArray(x)
    , `not an array: ${x}`
    )

test("some string") // assertion failed
test(123)           // assertion failed
test(0)             // assertion failed
test(/some regex/)  // assertion failed
test([ 5, 6 ])      
test({ a: 1 })      // assertion failed
test(x => x + 1)    // assertion failed

끝 - &lt 스니핏 >;!

        • 기능을 사용할 수 없는 이 기법을 높여줍니까 하지만 -
Function(x) === x // always false
해설 (0)

이것은 good enough for me.

  • WARNING:* 완벽한 솔루션을 아닙니다. 아래 지켜보리니 내 포스트.
Object.prototype.isString = function() { return false; };
String.prototype.isString = function() { return true; };

var isString = function(a) {
  return (a !== null) && (a !== undefined) && a.isString();
};

이 아래와 같이 사용할 수 있습니다.

//return false
isString(null);
isString(void 0);
isString(-123);
isString(0);
isString(true);
isString(false);
isString([]);
isString({});
isString(function() {});
isString(0/0);

//return true
isString("");
isString(new String("ABC"));
  • 잘못 작동됨 WARNING:* 이 경우:
//this is not a string
var obj = {
    //but returns true lol
    isString: function(){ return true; }
}

isString(obj) //should be false, but true
해설 (0)

답변 # 39 의 단순히 확장하십시오 @DRAX& I& # 39, d, s, 이렇게:

function isWhitespaceEmptyString(str)
{
    //RETURN:
    //      = 'true' if 'str' is empty string, null, undefined, or consists of white-spaces only
    return str ? !(/\S/.test(str)) : (str === "" || str === null || str === undefined);
}

또한 '와' 의 '유형이 정의되지 않은 것이라고 계정에게 nulll 잘있게나' 0 '의 문자열이 아닌 것 같은 유형.

해설 (0)

A 메리 페히커 도우미. "' 함수은 이프롬티페 (가변으로 mm_mail_doc.) { if (# 39, & # 39 string& 메리 페로프 유형 =;) res = (메리 페로프 변수 = 티페스톨로베르케이스 ()) 다른 res = (바리아브레이컨스트라우스 = type) 반품하십시오 res } "' 사용법: "' 이프롬티페 (& # 39, & # 39 string& # 39 cs& # 39;;;;) //true //true 이프롬티페 (& # 39, cs& # 39, 문자열) 이프롬티페 ([# 39, & # 39, cs&], 어레이입니다) //true 이프롬티페 ([& # 39, cs& # 39;] # 39, & # 39 object&;;) //false "' 또한 스케쳐내 재귀적 수 있도록 같은 개체를 배열입니다) ',' instanceof 사용할 수 있습니다.

(' [& # 39, cs& # 39;] / / instanceof 객체에는 진정한 ')

해설 (0)