더하기 기호는 '+ new Date'에서 무엇을합니까


238

나는 몇 에서 이것을 보았다

function fn() {
    return +new Date;
}

그리고 날짜 객체가 아닌 타임 스탬프를 반환한다는 것을 알 수 있지만 더하기 기호가 무엇을하고 있는지에 대한 문서를 찾을 수 없습니다.

누구든지 설명 할 수 있습니까?


답변:


294

이는 + 단항 연산자이며 다음과 같습니다.

function(){ return Number(new Date); }

참조 : http://xkr.us/articles/javascript/unary-add/

MDN에서 : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Unary_plus


4
그러나 왜 getTime날짜 객체에 정의 된 메소드 를 사용하지 않습니까?!
tkone

30
거의 어떤 상황에서도 실제로 이것을 사용해서는 안됩니다. 나는 단지 이것에 화상을 입었다. 모든 종류의 수학 연산 외에 + new Date ()는 큰 성능 저하를 겪습니다. 이 jsperf, jsperf.com/new-date-timing을보십시오
Geuis

9
간결한 프로그래밍의 @BradKoch는 확실히 영혼의 재치가 아닙니다. 파이썬 커뮤니티는 "명시 적은 항상 암시 적보다 항상 낫다"고 적절하게 설명했습니다. 브라우저가 회귀를 통해 암시 된 자동 유형 변환을 변경하면 어떻게됩니까? 이제 코드가 작동하지 않습니다! .getTime()항상 그렇게 할 것입니다.
tkone

11
@Geuis는 또 다른 훌륭한 이유입니다.
tkone

14
Sine ECMAScript 5가 Date.now()있으며 이는 날짜와 시간을 밀리 초 단위로 얻는 기본 방법입니다.
cutemachine


6

JavaScript 날짜는 문자열로 작성할 수 있습니다.

2015 년 9 월 10 일 목요일 12:02:54 GMT + 0530 (IST)

또는 숫자로 :

1441866774938

숫자로 작성된 날짜는 1970 년 1 월 1 일 00:00:00 이후 밀리 초 수를 지정합니다.

귀하의 질문에 따르면 할당 연산자 '='뒤에 '+'를 추가하고 Date를 동일한 숫자 값으로 변환하면 문제가 해결됩니다.

Number (new Date ())와 같은 Number () 함수를 사용하여 동일하게 달성 할 수 있습니다.

var date = +new Date(); //same as 'var date =number(new Date());'


3

더 많은 정보를 제공하기 위해 :

두 날짜의 시차를 찾으려면 다음과 같이하십시오.

var d1 = new Date("2000/01/01 00:00:00"); 
var d2 = new Date("2000/01/01 00:00:01");  //one second later

var t = d2 - d1; //will be 1000 (msec) = 1 sec

typeof t; // "number"

이제 d1-0의 유형을 확인하면 숫자이기도합니다.

t = new Date() - 0; //numeric value of Date: number of msec's since 1 Jan 1970.
typeof t; // "number"

+는 날짜를 숫자로 변환합니다.

typeof (+new Date()) //"number"

그러나 유사하게 취급 되지0 + new Date()않습니다 . 문자열로 연결됩니다.

0 + new Date() // "0Tue Oct 16 05:03:24 PDT 2018"

1

그것은이다 단항 추가 전화 할 때, 운영자도 명시 적 숫자 변환에 사용 +new Date(), 그것을 사용하여 해당 개체의 숫자 값을 얻기 위해 시도하는 valueOf()우리가에서 문자열을 얻을처럼toString()

new Date().valueOf() == (+new Date)  // true

-3

다음과 정확히 동일합니다.

function () {return 0 + new Date; }

그 결과는 다음과 같습니다.

function () {return new Date (). getTime (); }

11
0+ 새 날짜에 없습니다. 먼저 날짜를 문자열로 변환 한 다음 "0"을 추가합니다 (예 : "0Tue Oct 21 2008 20:38:05 GMT-0400");
Chris Noe

2
1 * 새로운 날짜, 그러나 1 + 새로운 날짜-> 문자열
Kent Fredric

나중에도 마찬가지입니다new Date/1
Ashish
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.