Rumah  >  Artikel  >  hujung hadapan web  >  ## Apakah yang Sebenarnya Dilakukan oleh Pengendali Tilde Berganda (~~) dalam JavaScript?

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

Linda Hamilton
Linda Hamiltonasal
2024-11-01 03:29:28392semak imbas

## 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);
}

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>

Menyongsangkan semua bit (bitwise NOT) menghasilkan:

NOT -43<sub>10</sub> = 00000000000000000000000000101010<sub>2</sub> = 42<sub>10</sub>

Menerapkan penolakan sekali lagi menghasilkan:

NOT 42<sub>10</sub> = 11111111111111111111111111010101<sub>2</sub> = -43<sub>10</sub>

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!

Kenyataan:
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