Apa yang dilakukan tanda tambah di '+ Tanggal baru'


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


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());'


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"

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

-3

Itu melakukan hal yang persis sama dengan:

function () {return 0 + Date baru; }

yang memiliki hasil yang sama dengan:

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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.