2016-07-09 3 views
0

함수 호출보다 typeof 연산자가 얼마나 느리게 걸립니까? 또는 무시할 만하고 마이크로 최적화입니까?함수 또는 유형 사용

if (isNumber(myVar)) { 
} 

if (typeof myVar === 'number') { 
} 
+5

테스트하여 알아 냈습니까? – David

+1

처음에는 너무 많은 유형 검사를 수행하지 않습니다. – ftor

+2

'isNumber'로 보는 것은'undefined'이며 오류를 던질뿐입니다. 실제로 문자열을 검사하는 것보다 훨씬 빠릅니다. – adeneo

답변

4

아니면 무시할 및 마이크로 최적화 있습니다 : 다음 숫자로 처리 할 수있는 개체를 전달할 선택할 수있는 API를 사용하여

누군가?

예,이 확실히에 대한 걱정하는 무언가가되는 것은, 당신이 정말로 가능성이 성능 병목 것으로 문제의 코드를 식별에만합니다. 마이크로 최적화입니다. 함수 호출은 이며 실제로는 JavaScript 엔진에 의해 최적화되지 않더라도 실제로는입니다. Array#forEach이 처음 등장했을 때 함수 호출 오버 헤드가 걱정되었습니다. 심지어 그때, 그것은 가장 오래된, 가장 느린 JavaScript 인터프리터에서도 찾을 수있는 문제가 아니 었습니다 : IE6에서 하나. 내 블로그에 세부 사항 : foreach and runtime cost

얼마나 오래 걸리 느냐 ... 문자열의 길이는 얼마나됩니까? 전적으로 당신이 사용하고있는 자바 스크립트 엔진과 문제의 코드가 엔진에 의해 "뜨거운"지점인지 여부에 달려 있습니다 (단계적으로 작동하고 핫스팟을 최적화하는 V8과 같은 엔진이라고 가정).

현대 엔진은 그렇게하는 것이 중요 해지면 인라인 할 가능성이 있습니다. 그건 보증이 아닙니다.

+0

이와 같은 최소한의 경우에는 몇 가지 정도의 인라인을 통해 모든 인라인 엔진을 인라인 할 수 있다는 것을 보장 할 수 있습니다. 단 몇 번만 사용하는 초소형 스크립트를 실행하지 않는 한 . –

+0

@IsiahMeadows : 표창장? 저는 전화가 두 번 걸릴 것임을 의심합니다 (정말로 중요하지는 않습니다). 'typeof null'과 함께 V8 크랭크 샤프트 버그를 기억하십니까? V8이 그것을 최적화하기 위해 크랭크 샤프트를 걷어차 기 전에 벌레 루프에서 수백 또는 수천 건의 호출을 수행하여 버그가 나타납니다. –

+0

좋아요 ... 정확한 임계 값을 기억하지 못했을 수도 있습니다. 코드가 정상 경로에 있으면 인라인됩니다. –

3

또는 그것을 무시할 수 및 마이크로 최적화인가?

무시할 만하고 최적화됩니다.


당신이 뭔가 숫자인지 확인하려면

, 나는 isNaN 검사를 사용하고 숫자로 캐스팅하는 것이 좋습니다.

if (!isNaN(myVar)) { 
    myVar = +myVar; 
} 

이렇게하면 값이 숫자로 처리되는 방법에 실제로 신경 쓰지 않아도됩니다.

myVar = { 
    valueOf: function() { 
    return 5; 
    } 
}; 
+0

'myVar'가 실제로 isNaN인지 확인하는 것은 어렵지 않습니다. 그냥 캐스트하세요! 그것은 매우 괴롭고, 실제 숫자에 더 효과적 일지는 중요하지 않습니다. 그리고 그것은 당신의 코드를 정리합니다. 그것은 더 중요한 코드입니다. 일반적으로 계산에서 실제 NaN 값에 대해 더 걱정해야합니다. 따라서 코드는 보통 myVar = + myVar || 0; – Thomas

+0

@Thomas와 유사합니다. 잘못된 값의 잘못된 자동 변환을 모두 피하려면, [CMS의 대답] (http://stackoverflow.com/a/1830844/1169519)을 참조하십시오. – Teemu

+1

@ 토마스 아니요, 코드가 정확해야합니다. 몇 가지 데이터 유형은 숫자에 대해 변환 할 수 있지만 숫자가 아 U니다. 예를 들어, 문자열은 숫자가 아닙니다. –