>웹 프론트엔드 >JS 튜토리얼 >해당 요소가 number_javascript 스킬인지 판별하는 JS의 이상한 작성 방법 공유

해당 요소가 number_javascript 스킬인지 판별하는 JS의 이상한 작성 방법 공유

WBOY
WBOY원래의
2016-05-16 17:51:271230검색

밑줄(1.3.3)의 소스코드를 읽어보면서 본 내용입니다.


var Each = _.each = _.forEach = function(obj, iterator, context) {
if (obj == null)
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)
}
} else {
for (var key in obj) {
if (_.has(obj, key)) {
if (iterator.call(context, obj[key], key, obj) == = 차단기) return
}
}
}
}

이 메소드에는 문장이 있습니다
코드 복사 코드는 다음과 같습니다.
if (obj.length === obj.length)
이해하지 못했습니다. 오랫동안 살펴보니 이 문장은

코드 복사와 같습니다.
if (typeof obj.length === 'number')
는 요소가 숫자 유형인지 확인하는 데 사용됩니다. typeof 및 Object.prototype.toString은 일반적인 작성 방법입니다. 마지막은 일반 사람들이 이해하기에는 흔하지 않고 어려운 것입니다.

일부 라이브러리에는

코드 복사와 같은 유형 판단을 위한 도구 기능이 있습니다.
function isNumber1(a){
return typeof a === 'number'
}

또는 Object.prototype.toString 사용

코드 복사 코드는 다음과 같습니다.
function isNumber2(a) {
return Object.prototype .toString.call(a ) === '[객체 번호]'
}

이렇게 변경됨

코드 복사 코드는 다음과 같습니다:
function isNumber3(a){
return a === a
}

다양한 유형으로 테스트

코드 복사 코드는 다음과 같습니다.
var arr = ['1', true, false, 정의되지 않음, null, {}, [], 1]
for (var i=0; iconsole.log(isNumber3(arr [i]))
}

결과적으로 배열의 마지막 항목만 true입니다. 즉, 숫자 유형 a === a만 참입니다.
typeof를 사용하지 않는 이유는 문자열 비교가 이론적으로 모든 문자를 순회해야 하고 성능은 문자열 길이에 정비례하기 때문입니다.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.