2016-10-28 1 views
0

JavaScript 함수가 퍼스트 클래스 객체이고 따라서 객체 유형 인 경우 왜 아래 사항이 발생합니까? JavaScript 함수 객체입니까?

function hello(){} 
typeof hello -> function 

그것은

typeof hello -> object 
+0

@JJJ 나는 그것을 보았고 더 나은 복제물을 찾으려고했지만 할 수 없었다. 그 질문은이 질문과 꽤 다릅니다. 당신이 더 나은 복제물을 찾으면 나는 분명히 듀펀 해머를 선호합니다. –

답변

3

예, 자바 스크립트 함수는 객체를 제공해서는 안된다. JavaScript의 유일한 기본 유형은 숫자, 기호, 부울, null, 정의되지 않은 문자열 및 객체와 같은 프리미티브 값 유형입니다.

프리미티브 값 유형이 아닌 모든 것은 객체입니다. typeof은 다른 이유로 인해 깨졌습니다. 예를 들어 typeof null은 "object"이지만 null은 사실 객체가 아닙니다.

typeof hello은 실제로 함수로 호출 할 수있는 유일한 방법이기 때문에 함수를 반환합니다.

+0

시원한 환호. 안전하지 않은 typeof를 사용하고 있습니까? –

+0

http://www.w3schools.com/js/js_function_definition.asp 이 기사는 관심이있는 경우 자세한 정보를 제공 할 수 있습니다. – DominicValenciana

+1

@Theworm'typeof'는 모든주의 사항을 이해하면 사용하는 것이 안전합니다. –

0

자바 스크립트 함수는 객체이지만 숫자, 문자열 등도 있습니다. typeof 함수는 객체가 자바 스크립트가 이미 알고있는 특정 데이터 구조체 일 때 알 수 있으며 모르는 경우 객체를 반환합니다 하지만 여전히 정의되어 있거나 null이 아님).

여기에 대한 자세한 내용이있다 : 그것은 원시의 경우 자바 스크립트에서 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof

1

, 그것은 객체입니다.

var a = function() {}; 
 
var b = null; 
 
var c = []; 
 
var d = {}; 
 
console.log("typeof function() {}: " + typeof a + " -- Object.prototype: " + Object.prototype.toString.call(a)); 
 
console.log("typeof null: " + typeof b + " -- Object.prototype: " + Object.prototype.toString.call(b)); 
 
console.log("typeof []: " + typeof c + " -- Object.prototype: " + Object.prototype.toString.call(c)); 
 
console.log("typeof {}: " + typeof d + " -- Object.prototype: " + Object.prototype.toString.call(d));

:
불행하게도, 배열, 함수 사이에 아주 잘 구별하고는 null typeof 연산자를 사용하는 경우,하지만 여기에

Object.prototype.call()를 사용하여 알 수있는 방법이 존재하지 않는 자바 스크립트은 예입니다

+0

'Symbol.toStringTag'을 사용하여'Object.prototype.toString.call'을 잠시 속일 수 있습니다. 그냥 참고하시기 바랍니다. –