JavaScript에서 변수가 숫자인지 문자열인지 어떻게 확인할 수 있습니까?
답변
생성자가 아닌 리터럴 표기법을 다루는 경우 typeof :를 사용할 수 있습니다 .
typeof "Hello World"; // string
typeof 123; // number
와 같은 생성자를 통해 숫자와 문자열을 만드는 경우에 대해 반환 될 수 있음 var foo = new String("foo")
을 명심해야 합니다 .typeof
object
foo
아마도 유형을 확인하는 더 확실한 방법은 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>