2013-03-08 1 views
-5

원본 질문 : JavaScript 변환에 문제가 있습니다. 다음은 예이다 :편집 : typeof (0)이 숫자 대신 부울 값을 반환하는 이유

var obj = { 
    x: 0, 
    y: 1, 
    z: 2 
} 

var b1 = typeof (obj.x), 
    b2 = typeof (obj.y), 
    b3 = typeof (obj.z); 

B1은 "boolean"이고, B2가 "boolean"이고, B3이 "number"이다. 변수를 0으로 설정해야하며 숫자로 해석하려면 JavaScript가 필요합니다. 나는 b1 = Number ("0")과 같은 전환을 시도했지만 도움이되지 않습니다. (

EDIT : 위의 q에 대해 사과드립니다. 사실, b1, b2 및 b3이 모두 반환 번호입니다. 내 실제 문제.

var SomeClass = function() {} 
SomeClass.prototype = { 
    element: {}, 
    startAt: 0, 
    length: 2, 
    get: function (prop) { 
     if (typeof (prop) === "undefined" || !(typeof (prop) === "string")) { 
      return false; 
     } 
     if (!this[prop]) { 
      return false; 
     } 
     return this[prop]; 
    } 
} 

var sc = new SomeClass(); 
alert(typeof (sc.get("startAt")) + "\n" + typeof (sc.get("length")) + "\n" + typeof (sc.get("element"))); 

이 나는 ​​숫자로 startAt를 설정하고 싶습니다. 정말 미안 해요!

+5

방금 ​​시도했는데 ... "부울"이라고 전혀 말하지 않습니다. –

+0

신고 내용에 Chrome에 동의하지 않습니다. 어떤 브라우저/환경을 사용하고 있습니까? –

+1

* "b1은"부울 ", b2는"부울 ", b3은"숫자 ""* [차이가 생기기] (http://jsbin.com/eraqef/1). 사양에 따르면, 세 개 모두는 ""숫자 여야하고, 나는 실행중인 테스트에 있습니다. 나는 크롬, IE (이전 및 신규), 파이어 폭스, 오페라를 시도했다 ... –

답변

1

내가 숫자로 startAt를 설정하고 싶습니다.

을 (0)입니다.

귀하의 get 기능은 명시 적 속성이 "falsey"인 경우 false를 반환

if(!this[prop]){return false;} 
자바 스크립트, 0, "", false, undefined에서

null 모든 "falsey"있다가, 의지 위에서 그렇게 조건 사실이어야하며 getfalse을 반환해야합니다.

당신의 목표는 재산 존재하지 않는 경우 false를 반환 할 경우이 같은이 작업을 수행 할 수 속성이 객체 자체 또는에 있는지 확인합니다

if (!(prop in this)) { return false; } 

의 프로토 타입, 당신이 원하는 것 같습니다. 당신은 단지 개체 자체를 확인하고 프로토 타입의 속성을 무시하고 싶은 경우에, 그는 다음과 같습니다
if (!this.hasOwnProperty(prop)) { return false; } 

당신의 목표는 get을위한 경우 모두 함께, 객체가되지 않는 속성 false를 반환하는 것을 현실로 나는 거기에 몇 가지 일을했습니다

get : function(prop){ 
      if (typeof prop !== "string" || !(prop in this)) { 
      return false; 
      } 
      return this[prop]; 
     } 

을 : 다음, (중 자체, 또는 프로토 타입을 통해) 한

  1. typeof입니다 연산자, 함수가 아닌, 그래서 당신은 그것의 피연산자 주위에 괄호를 사용하지 않는 (일반적으로) "undefined" 이후

  2. !== "string"입니다 prop 문자열임을 확인할 때 특별히 검사 할 필요가 없습니다.

  3. !(prop in this)을 사용하여 개체 (또는 프로토 타입)에 속성이 있는지 확인했습니다.

  4. ||을 사용하여 false 문을 하나의 if 문으로 반환했습니다.

+0

당신이 옳습니다. 나는 지금 바보 같다고 생각한다. 감사. 그것은 작동합니다! – AlFra

+0

@AleksanderFras : 도와 줘서 다행입니다. –