[javascript] JavaScript에서 변수가 숫자인지 문자열인지 확인

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



답변

생성자가 아닌 리터럴 표기법을 다루는 경우 typeof :를 사용할 수 있습니다 .

typeof "Hello World"; // string
typeof 123;           // number

와 같은 생성자를 통해 숫자와 문자열을 만드는 경우에 대해 반환 될 수 있음 var foo = new String("foo")을 명심해야 합니다 .typeofobjectfoo

아마도 유형을 확인하는 더 확실한 방법은 underscore.js에 있는 방법을 사용하는 것일 것입니다 (주석이있는 출처는 여기 에서 찾을 수 있습니다 ).

var toString = Object.prototype.toString;

_.isString = function (obj) {
  return toString.call(obj) == '[object String]';
}

이것은 true다음에 대한 부울 을 리턴합니다 .

_.isString("Jonathan"); // true
_.isString(new String("Jonathan")); // true


답변

가장 좋은 방법은 isNaN+ 타입 캐스팅을 사용하는 것입니다 .

업데이트 된 올인 방법 :

function isNumber(n) { return !isNaN(parseFloat(n)) && !isNaN(n - 0) }

정규식을 사용하는 것과 동일합니다.

function isNumber(n) { return /^-?[\d.]+(?:e-?\d+)?$/.test(n); }

------------------------

isNumber('123'); // true  
isNumber('123abc'); // false  
isNumber(5); // true  
isNumber('q345'); // false
isNumber(null); // false
isNumber(undefined); // false
isNumber(false); // false
isNumber('   '); // false


답변

내가 찾은 가장 좋은 방법은 문자열에서 메소드를 확인하는 것입니다.

if (x.substring) {
// do string thing
} else{
// do other thing
}

또는 숫자 속성으로 숫자 확인으로 무언가를 수행하려는 경우,

if (x.toFixed) {
// do number thing
} else {
// do other thing
}

이것은 “오리 타이핑”과 같은 것입니다. 어느 것이 가장 적합한 지 당신에게 달려 있습니다. 주석을 달기에 충분한 카르마가 없지만 박스형 문자열과 숫자에 대한 typeof는 실패합니다.

alert(typeof new String('Hello World'));
alert(typeof new Number(5));

“개체”에 경고합니다.


답변

당신은 찾고 있습니다 isNaN():

console.log(!isNaN(123));
console.log(!isNaN(-1.23));
console.log(!isNaN(5-2));
console.log(!isNaN(0));
console.log(!isNaN("0"));
console.log(!isNaN("2"));
console.log(!isNaN("Hello"));
console.log(!isNaN("2005/12/12"));

MDN의 JavaScript isNaN () 함수 를 참조하십시오 .


답변

값이 문자열 리터럴 또는 문자열 객체인지 확인하십시오.

function isString(o) {
    return typeof o == "string" || (typeof o == "object" && o.constructor === String);
}

단위 테스트 :

function assertTrue(value, message) {
    if (!value) {
        alert("Assertion error: " + message);
    }
}

function assertFalse(value, message)
{
    assertTrue(!value, message);
}

assertTrue(isString("string literal"), "number literal");
assertTrue(isString(new String("String object")), "String object");
assertFalse(isString(1), "number literal");
assertFalse(isString(true), "boolean literal");
assertFalse(isString({}), "object");

숫자 확인도 비슷합니다.

function isNumber(o) {
    return typeof o == "number" || (typeof o == "object" && o.constructor === Number);
}


답변

ES2015부터 변수에 유효한 숫자가 있는지 확인하는 올바른 방법은 Number.isFinite(value)

예 :

Number.isFinite(Infinity)   // false
Number.isFinite(NaN)        // false
Number.isFinite(-Infinity)  // false

Number.isFinite(0)          // true
Number.isFinite(2e64)       // true

Number.isFinite('0')        // false
Number.isFinite(null)       // false


답변

이 시도,

<script>
var regInteger = /^-?\d+$/;

function isInteger( str ) {
    return regInteger.test( str );
}

if(isInteger("1a11")) {
   console.log( 'Integer' );
} else {
   console.log( 'Non Integer' );
}
</script>