Saya bertanya-tanya apa arti operator = + _ dalam JavaScript. Sepertinya itu memang tugas.
Contoh:
hexbin.radius = function(_) {
if (!arguments.length)
return r;
r = +_;
dx = r * 2 * Math.sin(Math.PI / 3);
dy = r * 1.5;
return hexbin;
};
javascript
operators
Dimitry
sumber
sumber
-->
x= +_+ 0;
Jawaban:
+
mencoba untuk melemparkan apa pun_
ke nomor._
hanya nama variabel (bukan operator), bisa jadia
,foo
dll.Contoh:
cor "1" ke angka murni 1.
r
sekarang1
, tidak"1"
.Selain itu, menurut halaman MDN tentang Operator Aritmatika :
Juga dicatat bahwa
sumber
+_
benar-benar berarti0+_
, dalam hal ini_
harus dilemparkan sebelum menambahkan ke 0?+'12' === 12
(hasil adalah angka), tetapi0 + '12' === '012'
(hasil adalah string). Perhatikan, bagaimanapun, itu0 - '12' === -12
.Ini bukan operator penugasan.
_
hanyalah parameter yang diteruskan ke fungsi.Pada baris berikutnya
r = +_;
+
infront melemparkan variabel itu (_
) ke angka atau nilai integer dan menugaskannya ke variabelr
JANGAN BINGUNG DENGAN
+=
operatorsumber
=+
sebenarnya dua operator=
adalah penugasan dan+
dan_
nama variabel.Suka:
Kode berikut saya akan membantu Anda menunjukkan penggunaan
=+
untuk mengubah string menjadi int .contoh:
keluaran 10
gunakan: Jadi di sini
y
int5
karena=+
jika tidak:
keluaran 55
Dimana as
_
adalah variabel.keluaran 10
Selain itu, akan menarik untuk mengetahui bahwa Anda juga dapat mencapai hal yang sama dengan
~
(jika string adalah string int (float akan bulat ke int) )juga menghasilkan 10
~
adalah bitwise NOT: Membalik bit operandnya. Saya melakukan dua kali tanpa perubahan besarnya.sumber
x|0
untuk mengkonversi ganda ke int; namun ini juga menggunakan '~' memiliki hukuman pembatasan untuk angka <2 ^ 32. + "2e15" tidak.x|0
itu lebih cepat+
. Benar ? teknik yang bagus :). (2) Saya menggunakan~
hanya untuk menunjukkan OP yang+
bukan hanya tanda yang dapat digunakan ( saya sendiri menggunakan+
).|
jauh lebih cepat.Bukan itu
=+
. Dalam JavaScript,+
berarti mengubahnya menjadi angka.+'32'
mengembalikan 32.+'a'
mengembalikan NaN.Jadi, Anda dapat menggunakan
isNaN()
untuk memeriksa apakah itu dapat diubah menjadi angka.sumber
Itu yang licik.
Yang penting untuk dipahami adalah bahwa karakter garis bawah di sini sebenarnya adalah nama variabel , bukan operator.
Tanda plus di depannya adalah mendapatkan nilai numerik positif garis bawah - yaitu secara efektif memasukkan variabel garis bawah menjadi int. Anda dapat mencapai efek yang sama dengan
parseInt()
, tetapi tanda tambah casting kemungkinan digunakan di sini karena lebih ringkas.Dan itu hanya meninggalkan tanda sama dengan hanya tugas variabel standar.
Ini mungkin tidak sengaja ditulis untuk membingungkan, karena programmer Javascript yang berpengalaman umumnya akan mengenali garis bawah sebagai variabel. Tetapi jika Anda tidak tahu itu pasti sangat membingungkan. Saya tentu tidak akan menulis seperti itu; Saya bukan penggemar nama variabel pendek yang tidak berarti pada saat terbaik - Jika Anda ingin nama variabel pendek dalam kode JS untuk menghemat ruang, gunakan minifier; jangan menulisnya dengan variabel pendek untuk memulai.
sumber
_
adalah variabel.= + _ akan memasukkan _ menjadi angka.
Begitu
akan menampilkan nomor.
sumber
Saya kira maksud Anda
r = +_;
? Jika demikian, konversi parameter ke aNumber
. Katakanlah_
'12 .3 ', lalu+'12.3'
kembali12.3
. Jadi dalam pernyataan dikutip+_
ditugaskan untukr
.sumber
_
hanya nama variabel, dilewatkan sebagai parameter fungsihexbin.radius
, dan+
dilemparkan ke dalam angkaBiarkan saya membuat exmple yang sama seperti fungsi Anda.
dan jalankan fungsi contoh ini .. yang menghasilkan
hexbin.radius ("1");
hexbin.radius (1);
hexbin.radius ([]);
hexbin.radius ('a');
hexbin.radius ({});
hexbin.radius (true);
sumber
Ini akan memberikan nilai baru ke variabel sisi kiri angka.
sumber
+
sebelumb
.+_
hampir setara denganparseFloat(_)
. Perhatikan bahwaparseInt
akan berhenti pada karakter non numerik seperti titik, sedangkanparshFloat
tidak akan berhenti.EXP:
Exp:
Sangat sedikit perbedaan:
""
mengevaluasi ke0
, sedangkan parseInt () mengevaluasi keNaN
sumber
parseInr(_)
bukanparseFloat(_)
?float
, maksud saya , karena parseInt akan berhenti pada karakter non numerik, parshFloat tidak akan berhenti. EXP:parseFloat(2.4) = 2.4
vsparseInt(2.4) = 2
.Sederhananya,
+_
setara dengan menggunakan konstruktor Number () .Bahkan, ia bekerja pada tanggal:
DEMO: http://jsfiddle.net/dirtyd77/GCLjd/
Informasi lebih lanjut juga dapat ditemukan di bagian MDN - Unary plus (+) :
sumber
Dalam ungkapan ini:
_
akan tetap "1" jika itu awalnya tetapir
akan menjadi angka murni.Pertimbangkan kasus-kasus ini apakah seseorang ingin menerapkan + untuk konversi numerik
Padahal, ini adalah konverter angka tercepat yang saya hampir tidak menyarankan satu untuk menggunakannya secara berlebihan jika menggunakan sama sekali.
parseInt/parseFloat
adalah alternatif yang lebih baik dibaca.sumber