Javascript sendiri dapat dianggap sebagai bahasa yang sederhana, tetapi kami terus meningkatkannya dengan kebijaksanaan dan pola yang fleksibel. Kemarin kami menerapkan pola -pola ini ke kerangka kerja JavaScript, dan hari ini kerangka kerja ini mengarahkan aplikasi web kami lagi. Banyak pengembang pemula tertarik oleh berbagai kerangka kerja JavaScript yang kuat, tetapi mereka mengabaikan keterampilan JavaScript praktis yang luas dan luas di balik kerangka kerja. Artikel ini akan memberi Anda pengantar komprehensif tentang poin pengetahuan.
1. Operasi Integers JS
Gunakan | 0 dan ~~ untuk mengubah titik mengambang menjadi bilangan bulat dan lebih cepat daripada parseint dan matematika yang serupa, yang akan berguna ketika berurusan dengan efek seperti piksel dan perpindahan animasi. Ini adalah perbandingan kinerja.
var foo = (12.4 / 4.13) | 0; // Hasilnya adalah 3var bar = ~~ (12.4/4.13); // Hasilnya adalah 3
Trik kecil lainnya adalah! Lai 2 tanda seru, Anda dapat berbicara tentang nilai dan dengan cepat mengubahnya menjadi nilai boolean. Anda bisa mengujinya!
var eee = "eee"; waspada (!! eee)
Pengembalian itu benar, yang berarti bahwa nilai apa pun didahului olehnya! Lai Semua bisa sama dengan True. Kecuali jika nilai ini awalnya adalah nilai boolean, atau tidak terdefinisi, nol, 0, false, nan, '', karena yang tidak terdefinisi, nol, 0, false, nan, '' disebutkan, ini awalnya salah, jadi dua ditambahkan! Lai Setelah itu, masih Fasle.
2. Tulis ulang peringatan asli dan rekam jumlah kotak pop-up
(function () {var oldalert = window.alert, count = 0; window.alert = function (a) {count ++; oldalert (a + "/n Anda telah disebut peringatan" + count + "kali sekarang. Berhenti, ini jahat!");};}) (); waspada ("halo haorooms");3. Metode pertukaran digital tidak mendeklarasikan variabel menengah
Saat bertukar dua angka, pendekatan umum kami adalah mendeklarasikan variabel menengah, tetapi pendekatan hari ini agak aneh. Anda tidak perlu mendeklarasikan variabel menengah dan melihat bagaimana itu diimplementasikan!
var a = 1, b = 2; a = [b, b = a] [0]; console.log ('a:'+a+', b:'+b); // Output A: 2, B: 1Bagaimana dengan itu, apakah metode ini memiliki perasaan baru?
4. Semuanya adalah sebuah objek
Di dunia Javascript, semuanya adalah objek. Selain nol dan tidak terdefinisi, jenis dasar angka, string dan boolean lainnya memiliki objek pembungkus yang sesuai. Salah satu fitur suatu objek adalah Anda dapat memanggil metode langsung di atasnya.
Untuk tipe dasar numerik, itu akan gagal ketika mencoba memanggil metode tostring di atasnya, tetapi tidak akan gagal setelah tertutup dalam kurung dan kemudian dipanggil. Implementasi internal adalah untuk mengubah tipe dasar menjadi objek dengan objek pembungkus yang sesuai. Jadi (1) .toString () setara dengan angka baru (1) .toString (). Oleh karena itu, Anda memang dapat menggunakan tipe dasar angka, string, boolean, dll. Sebagai objek, cukup perhatikan sintaks yang sesuai.
Pada saat yang sama, kami memperhatikan bahwa angka -angka dalam JavaScript tidak dibagi menjadi titik mengambang dan membentuk. Semua angka sebenarnya adalah jenis titik mengambang, hanya menghilangkan titik desimal. Misalnya, 1 yang Anda lihat dapat ditulis sebagai 1. Inilah sebabnya mengapa kesalahan dilaporkan ketika Anda mencoba 1. Tostring (), jadi cara yang benar untuk menulisnya harus seperti ini: 1..tostring (), atau tambahkan kurung seperti yang disebutkan di atas. Tujuan dari tanda kurung di sini adalah untuk memperbaiki parser JS, dan tidak menganggap titik setelah 1 sebagai titik desimal. Implementasi internal seperti yang disebutkan di atas, mengonversi 1. ke objek dengan objek pembungkus dan kemudian memanggil metode tersebut.
5. Deformasi pernyataan IF
Ketika Anda perlu menulis pernyataan IF, coba metode lain yang lebih mudah, menggunakan operator logis di JavaScript sebagai gantinya.
var day = (tanggal baru) .getday () === 0; // Pernyataan If Tradisional if (day) {alert ('Today is Sunday!');}; // Gunakan logika dan ganti ifday && alert ('hari ini adalah hari Minggu!');Misalnya, kode di atas pertama kali mendapat tanggal hari ini, jika itu hari Minggu, jendela pop-up, jika tidak, tidak ada yang akan dilakukan. Kita tahu bahwa ada hubungan pendek dalam operasi logis. Untuk logika dan ekspresi, hanya jika keduanya benar, hasilnya dapat benar. Jika variabel hari sebelumnya dinilai salah, maka hasilnya salah untuk seluruh ekspresi, sehingga peringatan berikutnya tidak akan dilanjutkan. Jika hari sebelumnya benar, kode selanjutnya harus dilanjutkan untuk menjalankan kode berikut untuk menentukan keaslian seluruh ekspresi. Menggunakan poin ini, efek IF dicapai.
Untuk pernyataan IF tradisional, jika kode bodi eksekusi melebihi 1 pernyataan, kawat gigi keriting diperlukan, dan menggunakan ekspresi koma, bilah kode apa pun dapat dieksekusi tanpa kawat gigi keriting.
if (conditoin) waspada (1), peringatan (2), console.log (3);
6. Gunakan ===, bukan ==
Operator == (atau! =) Akan secara otomatis melakukan konversi tipe saat dibutuhkan. Operasi === (atau! ==) tidak melakukan konversi apa pun. Ini akan membandingkan nilai dan jenis, dan juga dianggap lebih baik dari == dalam hal kecepatan.
[10] === 10 // IS FALSE [10] == 10 // IS TRUE'10 '== 10 // IS TRUE'10' == 10 // false [] == 0 // Benar [] === 0 // false '' == Salah // Benar Tapi Benar == "A" false '=== FALSE // false // benar tapi benar == "a" false' === FALSE // false // false tapi benar == "a" false '' === FALSE // adalah false // benar tapi benar == "a" false '' === FALSE // is false // benar tapi benar == "a" adalah false '' ===
7. Gunakan penutupan untuk mengimplementasikan variabel pribadi
function person (name, use) {this.getName = function () {return name; }; this.setName = function (newName) {name = newName; }; this.getage = function () {return usia; }; this.setage = function (newage) {usia = newage; }; // Atribut yang tidak diinisialisasi dalam pekerjaan konstruktor VAR; this.getocCupation = function () {return pekerjaan; }; this.setoccupation = function (newOcc) {pekerjaan = newOcc; };}8. Buat konstruktor objek
Function Person (FirstName, LastName) {this.firstName = firstName; this.lastname = lastName;} var saad = orang baru ("saad", "mousliki");9. Berhati -hatilah untuk menggunakan TypeOf, instanceof dan konstruktor
var arr = ["a", "b", "c"]; typeof arr; // return "objek" ARR instance dari array // truearr.constructor (); // []
10. Buat fungsi self-wale
Ini sering disebut fungsi anonim yang dipasang sendiri atau ekspresi fungsi panggilan instan. Ini adalah fungsi yang secara otomatis dieksekusi segera setelah pembuatan, biasanya sebagai berikut:
(function () {// Beberapa kode pribadi yang akan dieksekusi secara otomatis}) (); (fungsi (a, b) {var result = a+b; hasil pengembalian;}) (10,20)11. Dapatkan item acak dari array
var item = [12, 548, 'a', 2, 5478, 'foo', 8852, 'doe', 2145, 119]; var randomItem = item [math.floor (math.random () * item.length)]];
12. Dapatkan nomor acak dalam kisaran tertentu
Cuplikan ini sangat berguna ketika Anda ingin menghasilkan data uji, seperti nilai gaji acak antara nilai minimum dan maksimum.
var x = math.floor (math.random () * (maks - min + 1)) + min;
13. Hasilkan array angka antara 0 dan nilai maksimum yang ditetapkan
var numberArray = [], maks = 100; untuk (var i = 1; numberArray.push (i ++) <max;); // angka = [0,1,2,3 ... 100]
14. Hasilkan string alfabet bilangan acak
fungsi generaterandomalphanum (len) {var rdmstring = ""; untuk (; rdmstring.length <len; rdmstring += math.random (). tostring (36) .substr (2)); return rdmstring.substr (0, len);} // panggil metode generaterandomalphanum (15);Limabelas. Berebut serangkaian angka
Var Numbers = [5, 458, 120, -215, 228, 400, 122205, -85411]; angka = angka.
16. Fungsi Trim String
String.prototype.trim = function () {return this.replace (/^/s+|/s+$/g, "");};17. Tambahkan (tambahkan) Array ke array lain
var array1 = [12, "foo", {name: "joe"}, -2458]; var array2 = ["doe", 555, 100]; array.prototype.push.Apply (array1, array2);/ * array1 akan sama dengan [12, "foo", {name "{{{name" {{{{"{{" {foo "{foo" {foo "{foo" {{foo "{{foo" {{{foo "{{{{foo" {{{foo ",18. Konversi argumen objek menjadi array
var argarray = array.prototype.slice.call (argumen); [Catatan Penerjemah: Objek Argumen adalah objek array kelas, tetapi bukan array nyata]
19. Verifikasi apakah parameternya adalah angka (angka)
function isNumber (n) {return! isnan (parsefloat (n)) && isFinite (n);}20. Verifikasi apakah parameternya array
fungsi isArray (obj) {return object.prototype.toString.call (obj) === '[array objek]';}Catatan: Jika metode tostring () diganti, Anda tidak akan mendapatkan hasil yang diinginkan menggunakan teknik ini. Atau Anda dapat menggunakan:
Array.isarray (OBJ); // Ini adalah metode array baru
Jika Anda tidak menggunakan beberapa frame, Anda juga dapat menggunakan metode instanceof. Tetapi jika Anda memiliki beberapa konteks, Anda akan mendapatkan hasil yang salah.
var myframe = document.createElement ('iframe'); document.body.appendChild (myframe); var myarray = window.frames [window.frames.length-1] .array; var arr = myarray baru (a, b, 10); // [a, b, 10] // contoh dari akan tidak berfungsi dengan benar, myarray kehilangan konstruktornya // konstruktor tidak dibagi antara contoh framesarr array; // PALSU[Catatan Penerjemah: Ada banyak diskusi tentang cara menilai array di internet, Anda dapat Google mereka. Artikel ini ditulis secara detail. 】
21. Dapatkan nilai maksimum atau minimum dalam array angka
var angka = [5, 458, 120, -215, 228, 400, 122205, -85411];
var maxinnumbers = math.max.Apply (matematika, angka);
var mininnumbers = Math.min.Amply (matematika, angka);
[Catatan Penerjemah: Berikut adalah keterampilan untuk melewati parameter menggunakan metode function.prototype.apply]
22. Bersihkan array
var myArray = [12, 222, 1000]; myarray.length = 0; // myarray akan sama dengan [].
23. Jangan gunakan Delete untuk menghapus item dalam array.
Gunakan sambungan alih -alih menghapus untuk menghapus item dalam array. Menggunakan Hapus Cukup mengganti item asli dengan tidak ditentukan, tidak benar -benar menghapusnya dari array.
Jangan gunakan metode ini:
var item = [12, 548, 'a', 2, 5478, 'foo', 8852, 'doe', 2154, 119]; items.length; // mengembalikan item 11Delete [3]; // return rueitems.length; // Kembalikan 11/ * item akan sama dengan [12, 548, "A", tidak terdefinisi × 1, 5478, "foo", 8852, tidak ditentukan × 1, "doe", 2154, 119] */
Dan gunakan:
var item = [12, 548, 'a', 2, 5478, 'foo', 8852, 'doe', 2154, 119]; items.length; // return 11items.splice (3,1); items.length; // Return 10/ * item akan sama dengan [12, 548, "A", 5478, "Foo", 8852, tidak ditentukan × 1, "doe", 2154, 119] */
Metode Hapus harus digunakan untuk menghapus properti objek.
24. Gunakan panjang untuk memotong array
Mirip dengan cara membersihkan array di atas, kami menggunakan atribut panjang untuk memotong array.
var myArray = [12, 222, 1000, 124, 98, 10]; myarray.length = 4; // myarray akan sama dengan [12, 222, 1000, 124].
Selain itu, jika Anda mengatur panjang array ke nilai yang lebih besar dari yang saat ini, panjang array akan diubah dan item baru yang tidak ditentukan akan ditambahkan untuk mengisinya. Panjang array bukanlah properti baca saja.
myarray.length = 10; // Panjang array baru adalah 10myArray [myarray.length - 1]; // belum diartikan
25. Gunakan logis dan/atau untuk membuat penilaian bersyarat
Sama (lima), jika pernyataan deformasi!
var foo = 10; foo == 10 && dosomething (); // setara dengan if (foo == 10) dosomething (); foo == 5 || dosomething (); // setara dengan if (foo! = 5) dosomething ();
Logis dan juga dapat digunakan untuk mengatur nilai default untuk parameter fungsi
function dosomething (arg1) {arg1 = arg1 || 10; // Jika arg1 tidak diatur, arg1 akan diatur ke 10 secara default}26. Gunakan metode peta () untuk melintasi item dalam array
var squares = [1,2,3,4] .map (function (val) {return val * val;}); // kotak akan sama dengan [1, 4, 9, 16]27. Di sekitar angka dan mempertahankan tempat desimal
var num = 2.443242342; num = num.tofixed (4); // num akan sama dengan 2.4432
28. Masalah Nomor Titik Mengambang
0.1 + 0.2 === 0.3 // IS FALSE9007199254740992 + 1 // sama dengan 90071992547409929007199254740992 + 2 // sama dengan 900719925474094
Mengapa ini terjadi? 0,1+0,2 sama dengan 0,3000000000000000000004. Anda harus tahu bahwa semua nomor JavaScript adalah bilangan titik mengambang internal yang dinyatakan dalam biner 64-bit, mematuhi standar IEEE 754. Untuk informasi lebih lanjut, Anda dapat membaca posting blog ini. Anda dapat menggunakan metode tofixed () dan topRecision () untuk menyelesaikan masalah ini.
29. Saat menggunakan For-In untuk melintasi sifat internal suatu objek, silakan periksa properti.
Cuplikan kode berikut dapat menghindari mengakses properti prototipe saat melintasi properti objek.
untuk (nama var di objek) {if (object.hasownproperty (name)) {// lakukan sesuatu dengan nama}}Tiga puluh, operator koma
var a = 0; var b = (a ++, 99); console.log (a); // A akan sama dengan 1Console.log (b); // B sama dengan 99
31. Variabel cache yang perlu dihitung dan diminta (perhitungan atau permintaan)
Untuk pemilih jQuery, kami lebih baik menyimpan elemen -elemen DOM ini.
var navright = document.queryselector ('#right'); var navleft = document.queryselector ('#left'); var navup = document.queryselector ('#up'); var navdown = document.queryselector ('#down'); var navdown = document.querySelector ('#down');32. Verifikasi parameter sebelum memanggil isFinite ()
isfinite (0/0); // falcleSfinite ("foo"); // falcleSfinite ("10"); // Trueisfinite (10); // Trueisfinite (tidak disesuaikan); // falcleisfinite (); // falcleSfinite (null); // BENAR !!!33. Hindari indeks negatif dalam array
var numberArray = [1,2,3,4,5]; var dari = numberArray.indexof ("foo"); // dari sama dengan -1numbersArray.splice (dari, 2); // akan kembali [5]Pastikan parameter saat memohon indeks dari tidak negatif.
34. Serialisasi dan deserialisasi berdasarkan JSON
var person = {name: 'Saad', usia: 26, departemen: {id: 15, nama: "r & d"}}; var stringfromperson = json.stringify (person);/ * stringFromperson sama dengan "{" name ":" saad "," usia ": 26," departemen ": {" id ":" name ":" Saad "," Age ": 26," Departemen ": {" id ":" name "": " Json.parse (StringFromperson);/ * personfromString sama dengan objek orang */35. Hindari menggunakan konstruktor eval () dan fungsi
Menggunakan konstruktor eval dan fungsi sangat mahal karena setiap kali mereka memanggil mesin skrip untuk mengubah kode sumber menjadi kode yang dapat dieksekusi.
var func1 = fungsi baru (functionCode); var func2 = eval (functionCode);
36. Hindari menggunakan dengan ()
Menggunakan dengan () akan memasukkan variabel global. Oleh karena itu, variabel dengan nama yang sama akan ditimpa dan menyebabkan masalah yang tidak perlu.
37. Hindari menggunakan untuk melintasi array
Hindari menggunakan metode ini:
var sum = 0; untuk (var i di arraynumbers) {sum += arraynumbers [i];}Cara yang lebih baik adalah:
var sum = 0; untuk (var i = 0, len = arraynumbers.length; i <len; i ++) {sum+= arraynumbers [i];}Manfaat tambahan adalah bahwa nilai -nilai variabel I dan Len hanya dieksekusi sekali, yang akan lebih efisien daripada metode berikut:
untuk (var i = 0; i <arraynumbers.length; i ++)
Mengapa? Karena arraynumber.length dihitung setiap kali loop dililitkan.
38. Lewati fungsi alih -alih string saat memanggil setTimeout () dan setInterval ().
Jika Anda meneruskan string ke setTimeout () atau setInterval (), string akan diuraikan seolah-olah digunakan dengan eval, yang sangat memakan waktu.
Jangan gunakan:
setInterval ('dosomethingperiodically ()', 1000); setTimeout ('dosomethingAfterfiveseconds ()', 5000)Dan gunakan:
setInterval (dosomethingicially, 1000); setTimeout (dosomethingAfterfiveseconds, 5000);
39. Gunakan pernyataan sakelar/kasus alih -alih daftar panjang if/else
Ketika menilai bahwa situasinya lebih besar dari 2, menggunakan sakelar/case lebih efisien dan lebih elegan (lebih mudah mengatur kode). Tetapi jangan gunakan sakelar/case ketika ada lebih dari 10 penilaian.
40. Gunakan sakelar/case saat menilai rentang numerik
Dalam situasi berikut, masuk akal untuk menggunakan sakelar/case untuk menentukan rentang numerik:
fungsi getCategory (usia) {var Category = ""; switch (true) {case isnan (usia): kategori = "bukan usia"; merusak; case (usia> = 50): kategori = "lama"; merusak; kasus (usia <= 20): kategori = "sayang"; merusak; Default: Category = "Young"; merusak; }; Kategori pengembalian;} getCategory (5); // akan mengembalikan "sayang"[Catatan Penerjemah: Secara umum, jika/tidak akan lebih tepat untuk menilai rentang numerik. Switch/case lebih cocok untuk penilaian menentukan nilai]
41. Tentukan objek prototipe untuk objek yang dibuat
Dimungkinkan untuk menulis fungsi untuk membuat objek yang menentukan parameter sebagai prototipe:
function clone (objek) {function oneshotconstructor () {}; OneshotConstructor.prototype = objek; kembalikan OneShotConstructor baru ();} klon (array) .prototype; // []42. Fungsi Escape HTML
function ExcapeHtml (Text) {var Replacements = {"<": "<", ">": ">", "&": "&", "/" ":" ""}}; return text.replace (/[<> & "]/g, function (karakter) {Return Replacements [karakter];});}43. Hindari menggunakan cobalah-tangkapan akhir di dalam loop
Pada saat runtime, setiap kali klausa tangkapan dieksekusi, objek pengecualian yang ditangkap akan ditugaskan ke variabel, dan dalam struktur mencoba-tangkapan akhir, variabel ini akan dibuat setiap saat.
Hindari menulis dengan cara ini:
var object = ['foo', 'bar'], i; for (i = 0, len = object.length; i <len; i ++) {coba {// lakukan sesuatu yang melempar pengecualian} catch (e) {// menangani pengecualian}}Dan gunakan:
var object = ['foo', 'bar'], i; coba {for (i = 0, len = objek.length; i <len; i ++) {// lakukan sesuatu yang melempar pengecualian}} catch (e) {// menangani pengecualian}44. Tetapkan batas waktu untuk xmlhttprequests.
Setelah permintaan XHR membutuhkan waktu lama (misalnya, karena masalah jaringan), Anda mungkin perlu membatalkan permintaan, sehingga Anda dapat menggunakan setTimeout () untuk panggilan XHR.
var xhr = new xmlHttpRequest (); xhr.onreadystatechange = function () {if (this.readystate == 4) {clearTimeout (timeout); // Lakukan sesuatu dengan data respons}} var timeout = setTimeOut (function () {xhr.abort (); // panggilan panggilan callback}, 60*1000/*batas waktu setelah satu menit*/); xhr.open ('get', url, true); xhr.send ();Selain itu, umumnya Anda harus menghindari permintaan AJAX yang disinkronkan sama sekali.
Empat puluh lima. Tangani batas waktu Websocket
Biasanya, setelah koneksi WebSocket dibuat, jika Anda tidak aktif, server akan memutuskan (waktu habis) koneksi Anda setelah 30 detik. Firewall juga akan terputus setelah periode tidak aktif.
Untuk mencegah masalah batas waktu, Anda mungkin perlu mengirim pesan kosong ke sisi server sebentar -sebentar. Untuk melakukan ini, Anda dapat menambahkan dua fungsi berikut dalam kode Anda: satu untuk menjaga koneksi dan yang lain untuk tidak melakukan koneksi. Dengan trik ini, Anda dapat mengontrol masalah batas waktu.
Gunakan timerid:
var timerId = 0; function keepalive () {var timeout = 15000; if (websocket.readystate == WebSocket.open) {WebSocket.send (''); } timerId = setTimeOut (KeepAlive, timeout);} function cancelkeepeAlive () {if (timerId) {cancelTimeout (timerId); }}Metode KeepAlive () harus ditambahkan pada akhir metode OnOpen () dari koneksi WebSocket, dan CancelKeepeAlive () ditambahkan pada akhir metode OnClose ().
46. Ingatlah bahwa operator asli selalu lebih efisien daripada panggilan fungsi. Gunakan vanillejs.
Misalnya, jangan gunakan:
var min = math.min (a, b); a.push (v);
Dan gunakan:
var min = a <b? ab; a [a.length] = v;
47. Dari bilangan bulat, pilih secara acak
Ada formula berikut, yang sangat berguna, dan memungkinkan kita untuk secara acak menampilkan kutipan terkenal atau acara berita tertentu!
Nilai = Math.floor (Math.Random () *Jumlah total nilai yang mungkin+ nilai pertama yang mungkin)
Misalnya: Untuk memilih nilai antara 2 dan 10, kita dapat menulisnya seperti ini
var num = math.floor (math.random ()*9+2)
Harap ingat formula di atas! ~
Penggunaan dan fungsi bilah vertikal tunggal operator JS "|" dan pemrosesan data JS
Baru saja, ketika mengoperasikan bilangan bulat JS, itu setara dengan menghapus titik desimal, parseint. Ketika angka positif setara dengan math.floor (), dan ketika angka negatif setara dengan math.ceil () Catatan:
1. Math.Ceil () digunakan sebagai pembulatan ke atas. 2. Math.floor () digunakan sebagai pembulatan ke bawah. 3. Math.round () Round () biasa digunakan dalam matematika. Console.log (0.6 | 0) // 0console.log (1.1 | 0) // 1console.log (3.65555 | 0) // 3console.log (5.99999 | 0) // 5console.log (-7.777 | 0) //-7
Catatan: Selain tiga metode matematika untuk memproses angka, kami sering menggunakan parseInt (), parsefloat (), tofixed () dan topRecision (), dll. Penjelasan singkat:
Penggunaan metode tofixed adalah sebagai berikut:
100.456001.tofixed (2); //100.47100.456001.tofixed(3); //100.456number.prototype.tofixed.call(100.456001,2); //100.47
Kekurangan: Setelah digunakan, itu akan menjadi string.
Penggunaan Top -Tinggi adalah sebagai berikut:
99.456001.toprecision (5); //99.456100.456001.toprecision(5); //100.46number.prototype.toprecision.call(10.456001,5); //10.456
Aturan operasi untuk batang vertikal tunggal
Setelah melihat contoh di atas, kita umumnya tahu bahwa satu bilah vertikal dapat melakukan operasi pembulatan, yang berarti bahwa hanya bagian positif yang dipertahankan dan bagian desimal dihilangkan. Namun, bagaimana "| 0" dihitung? Mengapa "| 0" mencapai tujuan pembulatan? Apa yang akan menjadi bilah vertikal tunggal jika bukan 0?
Dengan pertanyaan ini dalam pikiran, mari kita lihat contoh berikut:
Console.log (3 | 4); //7console.log(4|4); //4console.log(8|3); //11console.log(5.3|4.1); //5console.log(9|3455); // 3455
Sepertinya tidak ada pola untuk ditemukan? Cari online. http://tools.vevb.com/table/priority
Ini menyebutkan satu bilah vertikal "|" Tapi tidak ada JavaScript.
Oke, saya akan mengumumkan jawabannya di sini. Faktanya, bilah vertikal tunggal "|" adalah hasil yang diperoleh dengan mengubahnya menjadi sistem 2 digit. Misalnya, mari kita ambil contoh sederhana:
3 | 4 dikonversi menjadi biner dan 011 | 100 penambahan memberikan 111 = 74 | 4 dikonversi menjadi biner dan 100 | 100 penambahan memberikan 100 = 48 | 3 dikonversi menjadi biner dan 1000 | 011 penambahan memberikan 1011 = 11
Dan seterusnya, saya tidak akan mencantumkannya satu per satu di sini. Bilah vertikal tunggal "|" Operasi adalah hasil yang diperoleh dengan mengubahnya menjadi sistem 2 digit! Sudahkah Anda mempelajari semuanya?