Salah faham penggunaan JavaScript
Dalam bab ini kita akan membincangkan salah faham dalam penggunaan JavaScript.
Ganti rentetan
Kami sering menggunakan kaedah ganti rentetan untuk menggantikan aksara tertentu dalam rentetan Sintaksnya adalah seperti ini
string.replace(subStr/reg,replaceStr/function)
Parameter pertama ialah rentetan yang akan ditemui atau ungkapan biasa dan parameter kedua ialah Untuk menggantikan rentetan atau kaedah, kita boleh gunakan
"Saya Byron".replace("B","b") // Saya byron
Demerit adalah sama seperti yang kita fikirkan, tetapi
"Saya seorang pelajar, dan anda?".replace("n","N"); // Saya seorang pelajar, dan anda?
Tidak seperti yang kami jangkakan, 'n' kedua tidak diganti. Jika rentetan diluluskan sebagai hujah pertama kepada kaedah ganti rentetan, hanya padanan pertama akan diganti. Jika anda ingin menggantikan semua padanan, anda perlu memasukkan objek RegExp dan menentukan sifat globalnya.
"Saya seorang pelajar, dan anda?".replace(/n/g,"N"); // Saya seorang pelajar, dan anda?
jenis
Perkara yang paling salah faham tentang jenis ialah jenis Ia adalah operator, bukan fungsi, yang bermaksud kita tidak perlu menambah kurungan apabila menilai jenis pembolehubah, kita hanya boleh menggunakannya secara langsung
jenis 1; //numbertypeof(1); , tidak perlu melakukan Penulisan ini, tetapi betul, ia bersamaan dengan membalut pembolehubah atau pemalar
Nilai pulangan typeof ialah rentetan Dalam kebanyakan kes, hasil yang dikembalikan adalah sama seperti hasil jangkaan kami, tetapi terdapat beberapa perkara yang perlu diperhatikan 🎜>jenis 123; // nombor
jenis NaN //nombor
jenis "123" //rentetan
jenis palsu; //boolean
jenis tidak ditentukan ; //undefined
jenis nol //objek
typeof new Array(); //objek
typeof (new Array()); //Jika anda rasa ia tidak cukup jelas, anda boleh menggunakannya dengan cara ini, hasilnya adalah sama
typeof (function(){}); //function
typeof a; //undefined
123 ialah nombor Pulangan nombor
2. Walaupun NaN bermaksud ia bukan nombor, jenis tetap akan mengembalikan nombor
3 "123" menjadi rentetan, jadi rentetan
4
5 Jenis undefined adalah tidak ditentukan Pembolehubah jenis ini hanya boleh mempunyai satu nilai literal "undefined"
6 jangan letakkan harapan kami di dalamnya. Gunakan typeof untuk membantu kami menentukan null
7 Jika typeof menentukan bahawa ia adalah objek, ia hanya akan mengembalikan objek, dan tidak akan mengembalikan jenis Array dan Tarikh tertentu. .
9. Fungsi juga merupakan jenis objek. Tetapi typeof merawatnya secara berbeza dan mengembalikan fungsi ini untuk menentukan sama ada pembolehubah itu adalah fungsi
10 Pembolehubah tidak ditentukan juga mengembalikan tidak ditentukan
<. 🎜>jika dan ==
Dalam JavaScript, jika bukan sahaja menilai boolean untuk menentukan benar atau salah, 0, NaN, "", tidak ditentukan, batal, palsu akan semua dianggap palsujika (!palsu) {
console.log(1);
} ;
jika (!0) {
console.log(2);
};
jika (!"") {
console.log(3);
};
jika (!undefined) {
console.log(4);
};
jika (!null) {
console.log(5);
};
jika (!NaN) {
console.log(6); 🎜> };
123456 akan dicetak dalam konsolTetapi ini tidak bermakna nilai ini == palsu
0==salah; //benar"0"==salah; = palsu //false
null==false //false
null==null //true
NaN==NaN //false
null==undefined //true
Ralat aplikasi operator tugasan
Dalam program JavaScript, jika anda menggunakan tanda sama (=) pengendali tugasan dalam pernyataan bersyarat, hasil yang salah akan dihasilkan operator perbandingan Dua tanda yang sama (==).
jika pernyataan bersyarat mengembalikan palsu (iaitu yang kami jangkakan) kerana x tidak sama dengan 10:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <p id="demo"></p> <script> var x = 0; document.getElementById("demo").innerHTML = Boolean(x == 10); </script> </body> </html>
Ralat biasa operator perbandingan
Dalam operasi perbandingan yang ketat, === ialah pengendali identiti dan menyemak nilai dan jenis ungkapan pada masa yang sama yang berikut jika pernyataan bersyarat mengembalikan palsu:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <p id="demo"></p> <script> var x = 10; var y = "10"; document.getElementById("demo").innerHTML = Boolean(x === y); </script> </body> </html>
Ralat jenis ini sering berlaku. dalam pernyataan suis. Pernyataan suis akan menggunakan pengendali identiti (===) untuk perbandingan
Contoh berikut tidak akan melaksanakan tetingkap timbul amaran kerana jenis yang tidak konsisten:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <p id="demo"></p> <script> var x = 10; switch(x) { case "10": alert("Hello"); } </script> </body> </html>
Nota Penambahan pada Sambungan
Tambahan ialah penambahan dua nombor.
Penggabungan ialah penggabungan dua rentetan.
JavaScript menggunakan operator + untuk kedua-dua penambahan dan penggabungan.
Seterusnya kita boleh melihat perbezaan antara menambah dua nombor dan menggabungkan nombor dan rentetan melalui contoh:
var x = 10 + 5 // Keputusan x ialah 15
var x = 10 + "5"; // Keputusan x ialah "105"
Nota tentang menggunakan data titik terapung
Semua data dalam JavaScript disimpan sebagai data titik terapung 64-bit (terapung).
Semua bahasa pengaturcaraan, termasuk JavaScript, mengalami kesukaran untuk menentukan ketepatan data titik terapung:
var x = 0.1;
var y = 0.2;
var z = x + y // Hasil bagi z ialah 0.3
jika (z == 0.3) // Kembalikan palsu
Nota tentang menggunakan pernyataan Return
JavaScript tamat secara automatik pada baris terakhir kod secara lalai.
Keputusan contoh berikut akan kembali tidak ditentukan:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <p id="demo"></p> <script> document.getElementById("demo").innerHTML = myFunction(55); function myFunction(a) { var power = 10; return a * power; } </script> </body> </html>
Mengapa terdapat keputusan sedemikian? Kerana dalam JavaScript, kod Contoh 4 adalah konsisten dengan kod berikut:
function myFunction(a) {
var
power = 10; Tamat, kembalikan tidak ditentukan
a * kuasa;
}
var
kuasa = 10;
kembali
kembali ;
var person = [];
person[0] = "John";
person[1] = "Doe";
person[2] = 46;
var x = orang.panjang; // orang. panjang kembali 3
var y = orang[0]; 🎜>Dalam JavaScript, objek diindeks mengikut nama.
Selepas melakukan operasi ini, kaedah dan sifat tatasusunan tidak boleh digunakan lagi, jika tidak ralat akan berlaku:
person[ "firstName"] = "John";
person["lastName"] = "Doe";person["age"] = 46;
var x = person.length; // person.length mengembalikan 0var y = orang[0]; // orang[0] mengembalikan tidak ditentukan
Tentukan elemen tatasusunan , koma tidak boleh ditambah pada penghujung
mata = [40, 100, 1, 5, 25, 10];
Cara takrifan yang salah:
laman web = { tapak:"php中文网" , url: "www.php.cn", seperti:460}
Undefined is not Null Dalam JavaScript, null digunakan untuk objek dan undefined digunakan untuk pembolehubah, sifat dan kaedah. Objek mungkin batal hanya jika ia ditakrifkan, jika tidak ia tidak ditentukan. Jika kita ingin menguji sama ada objek itu wujud, ralat akan dilemparkan jika objek itu belum ditakrifkan lagi. Penggunaan yang salah: jika (myObj !== null && jenis myObj !== "undefined") Cara yang betul ialah kita perlu menggunakan typeof terlebih dahulu untuk mengesan sama ada objek ditakrifkan: if (typeof myObj !== "undefined" && myObj !== null)