Apa yang dilakukan tanda tambah di '+ Tanggal baru'

238

Saya pernah melihat ini di beberapa tempat

function fn() {
    return +new Date;
}

Dan saya dapat melihat bahwa itu mengembalikan timestamp daripada objek tanggal, tapi saya tidak dapat menemukan dokumentasi apa yang dilakukan tanda tambah.

Adakah yang bisa menjelaskan?

Ken
sumber
Kemungkinan duplikat Apa tujuan simbol plus sebelum variabel?
Donald Duck

Jawaban:

294

itulah operator + unary, itu setara dengan:

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

lihat: http://xkr.us/articles/javascript/unary-add/

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

kentaromiura
sumber
4
Tetapi seperti mengapa Anda tidak menggunakan getTimemetode yang ditentukan pada objek tanggal ?!
tkone
30
Hampir dalam keadaan apa pun sebaiknya Anda tidak menggunakan ini. Aku benar-benar terbakar pada ini. + Tanggal baru () di samping segala jenis operasi matematika akan mengalami penalti kinerja utama. Lihatlah jsperf ini, jsperf.com/new-date-timing
Geuis
9
@BradKoch dalam pemrograman singkatnya tentu bukan kecerdasan jiwa. Seperti yang dikatakan komunitas python secara memadai, "eksplisit selalu lebih baik daripada implisit." Bagaimana jika browser mengubah konversi tipe otomatis yang tersirat di sana melalui regresi? Sekarang kode Anda tidak berfungsi! .getTime()akan selalu memastikan itu.
tkone
11
@Geuis alasan bagus lainnya yang hanya karena Anda tidak bisa berarti Anda harus melakukannya!
tkone
14
Karena ada ECMAScript 5 Date.now(), yang merupakan cara yang disukai untuk mendapatkan tanggal dan waktu dalam milidetik.
cutemachine
6

Tanggal JavaScript dapat ditulis sebagai string:

Kamis 10 Sep 2015 12:02:54 GMT + 0530 (IST)

atau sebagai nomor:

1441866774938

Tanggal ditulis sebagai angka, menetapkan jumlah milidetik sejak 1 Januari 1970, 00:00:00.

Datang ke pertanyaan Anda, itu menambahkan bahwa dengan menambahkan '+' setelah operator penugasan '=', mengubah Tanggal menjadi nilai angka yang sama.

hal yang sama dapat dicapai dengan menggunakan fungsi Number (), seperti Number (Date baru ());

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

Berikut adalah spesifikasi mengenai operator "unary add". Semoga ini bisa membantu ...

Pablo Cabrera
sumber
3

Sekadar memberi info:

Jika Anda ingat, Ketika Anda ingin menemukan perbedaan waktu antara dua Tanggal, Anda cukup lakukan sebagai berikut;

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"

sekarang jika Anda memeriksa tipe d1-0, itu juga nomor:

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

+ yang juga akan mengonversi Tanggal ke Nomor:

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

Tapi catatan yang 0 + new Date()akan tidak diperlakukan sama! itu akan digabungkan sebagai string:

0 + new Date() // "0Tue Oct 16 05:03:24 PDT 2018"
S.Serpooshan
sumber
1

Ini adalah operator add unary dan juga digunakan untuk konversi Nomor eksplisit, jadi ketika Anda menelepon +new Date(), ia mencoba untuk mendapatkan nilai numerik dari objek yang menggunakan valueOf()seperti kita dapatkan string daritoString()

new Date().valueOf() == (+new Date)  // true
Raghavendra
sumber
-3

Itu melakukan hal yang persis sama dengan:

function () {return 0 + Date baru; }

yang memiliki hasil yang sama dengan:

function () {return Date baru (). getTime (); }
Sergey Ilinsky
sumber
11
Tidak pada 0 + Tanggal baru. Yang pertama mengonversi tanggal menjadi string dan kemudian menambahkan "0", (mis: "0Tue 21 Oktober 2008 20:38:05 GMT-0400");
Chris Noe
2
1 * Tanggal baru akan, tetapi 1 + Tanggal baru -> String
Kent Fredric
ya, juga hal yang sama berlaku untuknew Date/1
Ashish