2011-12-23 2 views
4

JavaScript를 배우고, 책을 읽고, FireBug를 활용하고, 실험하고 있습니다.JavaScript instanceof : 함수의 인수 인스턴스가 무엇인지 정의 할 수 없습니다.

나는 아래의 물건에 놀라고 붙어 있습니다.

유무 함수 선언 : 그것의 것을 가정한다

var t = function (args){ 
      ... 
    } 

는 변수 인수. typeof args.from의 결과는 제정신 보인다 number
입니다

args.from 

:

<body onload="t({to:100,from:0})"> 

그것은 호출하여 from 인수 값을 얻을 수있다 :

나는 같이 호출.
지불주의 :number 내가 args.from이 무엇인지 인스턴스의 관심

소문자입니다.
실제로 인스턴스 값을 가져올 수 없습니다.
시도 :

args.from instanceof Number 
args.from instanceof String 
args.from instanceof Object 
args.from instanceof Boolean 

Number하지 않습니다 -
그것은 Object 아니라 매우 이상 - 아주 이상한
그것은 확인을 하시면서 String 아니에요 확인 하시면서
그것하지 Boolean
그건 어느 null'undefined' - 괜찮아 보입니다.

이것은 무엇입니까?

+0

, 그 가변 인자 아니다; 그것은 객체를 보유하는 일반적인 매개 변수입니다. – SLaks

+0

그래, 나도 알아, 내가 썼다면, "가정"varargs, 반대 자바, 어디에 명확하게 선언해야 – sergionni

+0

원시적 인 숫자 유형의 값은 "아무것도의 인스턴스"가 아닙니다. 'instanceof' 연산자는 원시 값이 아닌 Object 값에 사용됩니다 ... –

답변

5

원시적 인 수치입니다.
모든 클래스의 인스턴스가 아닙니다.

instanceoftypeof"object" 또는 "function" 인 객체에만 true를 반환 할 수 있습니다.

이 항목은 args개체와 아무런 관련이 없습니다.; 너는 4 instanceof Number에서 같은 허위를 얻을 수있다. 반대로

, new Number(4)는 그것에 instanceof를 호출 할 수 있도록 from.to는 원시 타입, 프리미티브 4 배치 개체이므로 typeof new Number(4) === "object 및 건네지 new Number(4) instanceof Number === true

+0

아, 예, 이것에 대한 소문자 수는 – sergionni

+3

입니다.이 점에서 테이크 어웨이 포인트는 Java의 모든 곳에서'instanceof'로 엄격한 타입 검사를해서는 안된다는 것입니다. 이것은 단순히 자바 스크립트가 적합한 프로그래밍 스타일이 아닙니다. [duck typing] (http://en.wikipedia.org/wiki/Duck_typing)을 사용하고 예상되는 인수와 인터페이스를 문서화하십시오. –

+0

@Francis Avila 힌트를 보내 주셔서 감사합니다. – sergionni

2

이다. 당신이 정말로, typeof 대신 instanceof를 사용 Object에 포장 할 경우

: BTW

var from = Object(args.from); 
alert(from instanceof Number); // true! 
+0

랩에 관한 좋은 점 – sergionni

+0

흥미로운 점은 랩핑 후'typeof' 결과'object'가 소문자로 나타납니다. 슬랙스가 이미 설명 했음) – sergionni

+0

@sergionni 예, 예상대로입니다. – Alnitak

관련 문제