2014-01-26 3 views
1

John Resig의 prettyDate 함수를 적용한 스매싱 노드 책에서이 코드 스 니펫을 보았습니다. 부울 값인 것처럼 보이는 함수가 문자열을 반환 할 수있는 방법을 알지 못합니다.이 prettyDate 함수는 어떻게 작동합니까?

Date.prototype.__defineGetter__('ago', function() { 
    var diff = (((new Date()).getTime() - this.getTime())/1000) 
    , day_diff = Math.floor(diff/86400); 
    return day_diff == 0 && (
     diff < 60 && "just now" || 
     diff < 120 && "1 minute ago" || 
     diff < 3600 && Math.floor(diff/60) + " minutes ago" || 
     diff < 7200 && "1 hour ago" || 
     diff < 86400 && Math.floor(diff/3600) + " hours ago") || 
     day_diff == 1 && "Yesterday" || 
     day_diff < 7 && day_diff + " days ago" || 
     Math.ceil(day_diff/7) + " weeks ago"; 
}); 

var a = new Date('11/05/1989'); 
console.log(a.ago); // outputs '1264 weeks ago' 
+1

가 봐 "단락 연산자 ". – elclanrs

+0

은 "분명히 부울 값인 것처럼 보입니다"라는 것은 "=="다른 언어에 대해 "틀린 동족"과 같습니다. – dandavis

답변

2

운영자 ||&& 엄격하게 자바 스크립트에서 부울 값을 반환하지 않습니다.

x || y은 진실이면 x으로, 그렇지 않은 경우 y; x && y은 위선 인 경우 x으로, 그렇지 않은 경우 y으로 평가됩니다. 따라서 둘 다 어떤 유형의 값이 될 수 있습니다.

당신은 예를 들어 인수에 디폴트 값을 할당 예를 들어, 몇 가지 시나리오에 넣어 사용하는 사용 이러한 종류의 볼

:

// not the best example, but makes the point 
function increment(i, step) { 
    return i + (step || 1); 
} 

또는

function firstNonZero(a, b, c) { 
    return a || b || c || null; 
} 
관련 문제