## Apakah yang Sebenarnya Dilakukan oleh Pengendali Tilde Berganda (~~) dalam JavaScript?

Linda Hamilton
Lepaskan: 2024-11-01 03:29:28
asal
441 orang telah melayarinya

## What Does the Double Tilde Operator (~~) Actually Do in JavaScript?

Menyingkap Sifat Sebenar Double Tilters (~~) dalam JavaScript

Dalam bidang JavaScript, pengendali menonjol dengan fungsi misterinya. Umum mengetahui bahawa tilde tunggal (~) menandakan BUKAN bitwise, membuatkan kita terfikir: apakah yang dicapai oleh doublettnya ()?

Bertentangan dengan gerak hati bahawa ia menggandakan penolakan bitwise, pengendali ~~ mempunyai kesan yang mengejutkan. Ia mempunyai keupayaan untuk memotong bahagian perpuluhan nombor, dengan berkesan membundarkannya ke arah nombor bulat terdekat.

Di sebalik tabir, operator ~~ beroperasi dengan menganggap operannya sebagai integer 32-bit yang ditandatangani, melakukan operasi bitwise tanpa mengira jenis sebenar operan (nombor, rentetan, dll.). Akibatnya, bahagian pecahan dibuang, dan hasilnya sentiasa nombor.

Tepatnya, pengendali ~~ pada dasarnya mensimulasikan fungsi berikut:

function truncate(x) {
  if(x < 0) return Math.ceil(x);
  else return Math.floor(x);
}
Salin selepas log masuk

Walau bagaimanapun, operasi ini memegang benar hanya jika nilai x berada dalam julat -(2^31) hingga 2^31 - 1, inklusif. Di luar julat ini, limpahan mungkin berlaku, membawa kepada hasil yang tidak dapat diramalkan.

Walaupun ~~ boleh berguna untuk menukar hujah rentetan dengan pantas kepada nombor, batasannya (kemungkinan limpahan dan kelakuan tidak betul untuk nilai bukan integer) menjadikan ia kurang diingini untuk manipulasi berangka. Sebaliknya, lebih baik menggunakan x atau Nombor(x) untuk tujuan ini.

Mentafsir Penolakan Berganda

Memahami operator ~~ kerana penolakan penolakan memerlukan menyelam lebih mendalam ke dalam perwakilan binari. Ambil nombor -43.2 sebagai contoh, diwakili dalam bentuk binari 32-bit yang ditandatangani (dua pelengkap):

-43.2<sub>10</sub> = 11111111111111111111111111010101<sub>2</sub>
Salin selepas log masuk

Menyongsangkan semua bit (bitwise NOT) menghasilkan:

NOT -43<sub>10</sub> = 00000000000000000000000000101010<sub>2</sub> = 42<sub>10</sub>
Salin selepas log masuk

Menerapkan penolakan sekali lagi menghasilkan:

NOT 42<sub>10</sub> = 11111111111111111111111111010101<sub>2</sub> = -43<sub>10</sub>
Salin selepas log masuk

Keputusan akhir (-43) ini berbeza daripada keputusan Math.floor(-43.2), iaitu -44. Ini kerana ~~ membundarkan nombor daripada sifar, tidak seperti Math.floor, yang membundar ke bawah.

Atas ialah kandungan terperinci ## Apakah yang Sebenarnya Dilakukan oleh Pengendali Tilde Berganda (~~) dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan