>  기사  >  웹 프론트엔드  >  요소가 숫자인지 확인하기 위해 JS를 작성하는 이상한 방법 공유

요소가 숫자인지 확인하기 위해 JS를 작성하는 이상한 방법 공유

黄舟
黄舟원래의
2016-12-12 11:37:221139검색

각 방법입니다

代码如下:
var each = _.each = _.forEach = function(obj, iterator, context) { 
if (obj == null) return; 
if (nativeForEach && obj.forEach === nativeForEach) { 
obj.forEach(iterator, context); 
} else if (obj.length === +obj.length) { 
for (var i = 0, l = obj.length; i < l; i++) { 
if (iterator.call(context, obj[i], i, obj) === breaker) return; 
} 
} else { 
for (var key in obj) { 
if (_.has(obj, key)) { 
if (iterator.call(context, obj[key], key, obj) === breaker) return; 
} 
} 
} 
};

이 방법에는

if (obj.length === +obj.length)

이 문장은

if (typeof obj.length === &#39;number&#39;)

과 동일합니다. 요소를 판단하기 위해 숫자 유형인지 여부. typeof 및 Object.prototype.toString은 일반적인 작성 방법입니다. 마지막은 일반 사람들이 이해하기에는 흔하지 않고 어려운 것입니다.

일부 라이브러리에는

代码如下:
function isNumber1(a){ 
return typeof a === &#39;number&#39; 
}

과 같은 유형 판단을 위한 도구 기능이 있거나 Object.prototype.toString

代码如下:
function isNumber2(a) { 
return Object.prototype.toString.call(a) === &#39;[object Number]&#39; 
}

을 사용하여 이를 이렇게 변경합니다. 작성 방법

代码如下:
function isNumber3(a){ 
return a === +a 
}

다양한 유형으로 테스트했습니다

代码如下:
var arr = [&#39;1&#39;, true, false, undefined, null, {}, [], 1] 
for (var i=0; i<arr.length; i++) { 
console.log(isNumber3(arr[i])) 
}

결과는 배열의 마지막 항목만 true입니다. 즉, 숫자 유형 a === +a만 참입니다.
typeof를 사용하지 않는 이유는 문자열 비교가 이론적으로 모든 문자를 순회해야 하고 성능은 문자열 길이에 정비례하기 때문입니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.