Rumah >hujung hadapan web >tutorial js >Sintaks asas NodeJs dan types_node.js
ditulis di hadapan
Hari ini saya ingin menyemak pengetahuan tentang jenis-jenis Node Saya ingin meringkaskannya. Saya melihat satu artikel di Googol, tetapi pautan asal tidak ada lagi ada sebarang pertanyaan, sila hubungi saya!
Artikel ini adalah mengenai asas-asas JS, pakar akan melangkaunya secara automatik! Saya tidak menulis banyak tentang js sebelum ini, dan saya agak lemah dalam bidang ini, jadi saya juga menghadapi masalah semasa menulis nod Di sini saya akan menambah pengetahuan kepada diri saya sendiri.
Teks
Node.js adalah berdasarkan bahasa skrip JavaScript. Ciri umum kebanyakan bahasa skrip ialah "menaip lemah".
Berbeza dengan PHP, PHP tidak perlu mengisytiharkan pembolehubah baharu walaupun ia mempunyai pembolehubah baharu, manakala JavaScript masih memerlukan var untuk mengisytiharkannya. Dan var ini merangkumi makna semua jenis seperti int, rentetan, char, dll. dalam C, malah fungsi.
Semua kandungan artikel ini dan artikel berikut disunting menggunakan vim di bawah Linux atau Cygwin (jika tidak, sila tukarkannya kepada kaedah anda sendiri), dan kemudian lihat hasilnya pada baris arahan.
Tatabahasa Asas
Pengisytiharan boleh ubah
Dalam C/C, kami mengisytiharkan pembolehubah seperti ini:
```C
```javascript
Penyataan gelung
untuk…sayaPernyataan gelung ini pada asasnya sama dengan C/C, kedua-duanya adalah
```C
```javascript
Sebagai contoh, kami mempunyai objek JSON seperti berikut:
javascript
javascript
Petua: Seperti yang anda boleh lihat daripada di atas, pernyataan for...in digunakan untuk melintasi nama utama objek, tatasusunan dan objek JSON, tetapi tidak memberikan traversal nilai utama. Jika anda ingin mendapatkan nilai kunci, anda hanya boleh mendapatkannya dalam bentuk foo[ sambil…buat, buat…sambil Saya tidak akan menjelaskan perkara ini tidak jauh berbeza daripada bahasa lain. Cuma jika terdapat perisytiharan berubah, anda perlu menggunakan var. Operator , -, *, / Itu sahaja untuk pengendali ini. Apa yang perlu anda perhatikan ialah . Ia boleh beroperasi pada kedua-dua rentetan dan operasi berangka. Walaupun bahasa yang ditaip lemah mengatakan bahawa jenis itu lemah, nombor kadang-kadang boleh muncul dalam bentuk rentetan, dan rentetan kadang-kadang boleh muncul dalam bentuk nilai angka, tetapi apabila perlu, kita masih perlu menyatakan jenisnya We boleh Gunakan kod berikut untuk melihat hasilnya: ParseInt di sini ialah fungsi terbina dalam Node.js, yang digunakan untuk menghuraikan rentetan kepada pembolehubah jenis int. Hasil pelaksanaan kod di atas ialah: Nota: Hasil konsol.log pertama ialah 12. Memandangkan a ialah rentetan, b juga ditambah oleh sistem sebagai rentetan Hasilnya ialah kedua-dua rentetan itu dilekatkan dan menjadi 12. Hasil konsol.log kedua ialah 3 kerana kami menukar a pertama kepada jenis int Penambahan dua pembolehubah jenis int ialah hasil tambah nilai sudah tentu 3. ==, ===, !=, !== Satu perkara yang perlu dijelaskan di sini ialah apabila panjang operator logik ini ialah 2 (==, !=), ia hanya menentukan sama ada nilai luaran adalah sama, tetapi tidak menentukan jenisnya. Seperti Hasil yang dikeluarkan adalah benar. Tetapi jika kita menambah tanda sama di tengah-tengah penghakiman, maka ia akan menjadi penghakiman yang ketat Hanya apabila jenis dan nilainya sama, ia akan menjadi benar, jika tidak, ia akan menjadi palsu. Maksudnya , hasil yang dikembalikan adalah palsu, kerana a adalah jenis int dan b ialah rentetan. Mari kita bercakap tentang pernyataan bersyarat, sebenarnya, jika di sini tidak berbeza dengan bahasa lain, ini hanya soal beberapa operator logik, dua tanda sama dan tiga tanda sama. Jadi saya tidak akan menjelaskan secara terperinci. jenis Di sini saya akan menganggapnya sebagai pengendali dan bukannya fungsi. Fungsi operator ini adalah untuk menentukan jenis pembolehubah Ia akan mengembalikan rentetan, iaitu nama jenis Anda boleh mengetahuinya dengan melaksanakan kod berikut: Hasil pelaksanaan di sini ialah: null, undefined, NaN Dalam JavaScript, terdapat tiga nilai istimewa, seperti yang ditunjukkan dalam tajuk. Yang pertama mungkin biasa kepada semua orang. Ia juga terdapat dalam C/C, tetapi intipatinya ialah ```C takrifkan NULL 0 Dalam JavaScript, ketiga-tiga nilai ini mempunyai makna yang berbeza. ### null ### null ialah sejenis objek istimewa, yang secara kasarnya bermaksud kosong. Contohnya: var a = null; ### tidak ditentukan ## Perkara ini bermakna pembolehubah ini tidak diisytiharkan. Untuk membezakan null dengan lebih baik, kod sampel kami adalah seperti berikut: ```javascript Dalam kod di atas, kami menjadikan nilai a["foo"] kosong, iaitu batal. Dan tiada pengisytiharan tentang ["bar"] sama sekali, ia tidak pun kosong. Semua orang sepatutnya meneka hasil output: NaN Ini ialah nilai kosong, nombor istimewa. Nama penuhnya ialah Bukan Nombor. Ia agak pelik. Anda boleh memahaminya sebagai pembolehubah jenis nombor yang tidak dalam bentuk digital atau mempunyai nilai yang salah. Kebanyakan berlaku apabila ralat operasi berangka titik terapung (seperti pembahagian dengan 0) berlaku malah pengguna sendiri yang membuat pembolehubah sama dengan NaN untuk mengembalikan nilai ralat untuk memberitahu semua orang bahawa operasi fungsi ini mempunyai. tersilap. Sakit hati Pernyataan lain yang tinggal adalah serupa dengan bahasa sedia ada lain, seperti putus, suis, teruskan, dsb. Jenis pembolehubah Bahagian ini terutamanya bercakap tentang objek JavaScript dan jenis lain akan hampir dilepaskan. Jenis Asas Node.js mengandungi hampir jenis asas berikut: nombor javascript javascript Perlu bercakap tentang tiga kaedah penciptaan tatasusunan. Jenis pertama: javascript Jenis kedua: javascript javascript Saya sendiri lebih suka cara penulisan ketiga iaitu lebih ringkas. Objek JSON Di sini saya memisahkan objek JSON dan bukannya mengklasifikasikannya sebagai objek JavaScript Jika anda rasa saya agak mengelirukan, anda boleh melangkau bahagian ini secara langsung. Perbezaan saya antara objek JSON dan objek JavaScript terletak pada sama ada objek tersebut hanya digunakan untuk menyimpan data, dan bukannya membuat seketika kelas. Malah, intipati JSON ialah Notasi Objek JavaScript. Untuk mendapatkan maklumat lanjut tentang JSON, sila ensiklopedia sendiri. Mengisytiharkan objek JSON dalam Node.js adalah sangat mudah: javascript Terdapat dua cara untuk mendapatkan nilai kunci nama kunci tertentu dalam objek JSON Yang pertama ialah menggunakan sambungan titik, dan yang kedua ialah menggunakan kurungan segi empat sama: javascript Nota: Apabila menggunakan titik di atas, ia diikuti terus oleh kunci dalam JSON Jika anda menganggap kunci sebagai pembolehubah, anda hanya boleh mencubanya dengan anjing[kunci]: Sekarang cuba sendiri, gunakan The for.. .dalam bentuk merentasi objek JSON di atas. Jangan lupa gunakan jenis meow~ Asas kelas (objek) Tegasnya, kelas Node.js tidak boleh dianggap sebagai kelas Malah, ia hanyalah koleksi fungsi dengan beberapa pembolehubah ahli. Intipatinya sebenarnya adalah fungsi. Tetapi demi kesederhanaan, kami akan merujuknya sebagai "kelas" dan yang instantiated sebagai "objek" pada masa akan datang dan akan datang. Oleh kerana kelas mempunyai banyak fungsi, atau intipatinya ialah fungsi, kami mungkin secara tidak sengaja menerangkan asas fungsi di sini. Pengisytiharan dan instantiasi kelas Mengisytiharkan kelas adalah sangat mudah, jangan ketawa: javascript Betul atau palsu? ! sebenar. Tak percaya? Jika anda tidak percaya, anda boleh menaip sekeping kod dan lihat: javascript Dan apa yang dipanggil foo() ini sebenarnya ialah pembina kelas foo(). Pembolehubah ahli Terdapat dua cara untuk menggunakan pembolehubah ahli. Yang pertama ialah menggunakan ini. Nota: Hanya apabila ini ditambah, ia adalah pembolehubah ahli kelas panggilan, jika tidak ia hanyalah pembolehubah tempatan dalam fungsi. Adalah perlu untuk membezakan skop pembolehubah apabila tiada ini. Kaedah kedua ialah mengisytiharkannya di luar pembina atau mana-mana fungsi ahli Formatnya ialah javascript Tidak kira kaedah di atas adalah pengisytiharan pembolehubah ahli, kita dapat melihat kesannya: javascript Anda juga boleh mengubah suai kelas ini seperti ini: javascript Kemudian gunakan kod di atas untuk mengeluarkan. Fikirkan mengapa output masih dunia dan bukannya sup titisan telur. Pembina Kami berkata sebelum ini foo() sebenarnya adalah pembina. Jadi jelas sekali kita boleh menghantar parameter kepada pembina, jadi kita mempunyai kod berikut: javascript Kami melihat penghakiman aneh di atas jika(hello === undefined) Apakah kegunaan penghakiman ini? Kemungkinan pertama ialah pembangun pergi keluar dari caranya untuk lulus tidak ditentukan. Pada masa ini, dapat difahami bahawa ia tidak ditentukan. Ada keadaan lain. Kami berkata pada mulanya bahawa JavaScript adalah bahasa yang ditaip lemah Malah, ia bukan sahaja ditaip dengan lemah, tetapi lulus parameternya juga sangat longgar. Anda boleh lulus lebih atau kurang (selagi anda boleh memastikan bahawa atur cara tidak membuat ralat atau logik tidak membuat ralat apabila anda lulus lebih atau kurang), pada dasarnya tidak mengapa. Parameter yang diluluskan dalam lebih banyak akan diabaikan secara automatik, manakala parameter yang diluluskan dalam lebih sedikit akan diisi dengan tidak ditentukan. Lihat kod berikut untuk memahami: javascript Sila keluarkan pembolehubah helo bagi dua bar itu sendiri, dan anda akan mendapati bahawa satu adalah dunia dan satu lagi ialah sup titisan telur. Jelas sekali, apabila bar1 pertama kami diisytiharkan, Node.js secara automatik melihatnya sebagai: javascript Jadi ada pepatah bahawa ia adalah dunia. Selain itu, dalam pembina ini, kita melihat bahawa parameter yang diluluskan adalah hello, dan terdapat pembolehubah ahli dalam kelas ini dipanggil this.hello. Walau bagaimanapun, kami telah mengatakan sebelum ini bahawa skop adalah berbeza apabila terdapat ini dan tanpa ini Parameter hanya bertindak dalam pembina, dan satu dengan ini adalah pembolehubah ahli. Menggunakan ini dengan serta-merta membezakan mereka, jadi tidak mengapa walaupun mereka mempunyai nama yang sama. Fungsi ahli Pengisytiharan fungsi ahli Pengisytiharan fungsi ahli adalah serupa dengan kaedah pengisytiharan kedua pembolehubah ahli, iaitu javascript Kod di atas adalah jelas Kami telah melaksanakan fungsi setHello kelas foo, yang boleh mengubah suai nilai foo.hello. Tetapi bukankah agak menyusahkan untuk menulis seperti ini? Seterusnya saya akan bercakap tentang ciri penting fungsi JavaScript. ★ Fungsi tanpa nama ★ Banyak kali sesetengah fungsi kami hanya dirujuk atau dipanggil di satu tempat, jadi tidak berbaloi dan tidak perlu untuk kami memberi nama fungsi ini, jadi kami boleh menulis fungsi ini buat sementara waktu dan terus membiarkan orang yang merujuknya Orang petik, orang panggil panggil. Oleh itu, nama fungsi boleh ditinggalkan, seperti: javascript Bagaimana untuk memetik atau menelefon? Jika kelas di atas perlu dirujuk, ia akan ditulis seperti ini: javascript Cara penulisan ini mempunyai kesan yang sama seperti pengisytiharan fungsi ahli, dan menjimatkan banyak kod. Dan sebenarnya, pada dasarnya pengisytiharan fungsi ahli kelas diisytiharkan dalam cara fungsi tanpa nama ini. Bagaimanakah cara membuat fungsi tanpa nama dipanggil? Ini biasanya digunakan apabila menghantar dalam fungsi yang hanya dipanggil oleh fungsi tertentu. Sebagai contoh, kita mempunyai fungsi yang prototaipnya ialah: javascript Sebagai contoh, kami mempunyai dua versi fungsi keluaran, satu keluaran Cina dan satu lagi keluaran Inggeris, maka jika fungsi tanpa nama tidak digunakan, ia ditulis seperti ini: javascript Laksanakan kod ini sekali, hasil keluarannya ialah: Nilai 1 2 ialah: 3 javascript Borang ini biasanya digunakan untuk fungsi panggil balik. Mekanisme panggil balik adalah intipati Node.js atau JavaScript. Ia akan diperkenalkan dalam bab-bab akan datang. Kaedah pengisytiharan fungsi tanpa nama bagi pengisytiharan fungsi ahli Walaupun telah disebut dalam bahagian sebelumnya, mari kita bincangkannya sekali lagi. Biasanya apabila kami mengisytiharkan fungsi ahli kelas, kami menggunakan fungsi tanpa nama untuk mengisytiharkannya, kerana fungsi itu hanyalah fungsi ahli kelas ini dan tidak akan dirujuk atau dipanggil secara berasingan daripada tempat lain, jadi terdapat perkara berikut Kod: javascript Dengan cara ini, kami menjadikan kelas foo mempunyai fungsi setHello. 2.3.4 Sewenang-wenangnya kelas Ini karut dari saya lagi. Apa yang dipanggil sewenang-wenangnya kelas bermakna anda boleh mengubah suai kelas anda di mana-mana dalam JavaScript, yang mempunyai persamaan tertentu dengan Ruby. Sebagai contoh, rentetan sebenarnya ialah kelas, dengan pembolehubah ahli seperti panjang dan fungsi ahli seperti indexOf dan substr. Tetapi sekiranya kami merasakan rentetan ini tidak sempurna di sesetengah tempat dan ingin menambah kaedah kami sendiri, maka kami boleh menambah fungsi padanya di mana anda mahu, seperti: javascript Maksud fungsi ini adalah untuk mengisi rentetan supaya menjadi jelmaan sb. Mari kita uji: Anda akan mendapat keputusan ini: sbsbsbsbs 3. Dilampirkan 3.1. Salinan mendalam Salinan dalam yang dipanggil adalah untuk mencipta tatasusunan baharu atau objek sendiri, dan secara manual menyalin nilai pembolehubah jenis asasdalam tatasusunan sumber atau objek satu demi satu, bukannya hanya mengambil rujukan tatasusunan sumber atau objek. Jadi ini melibatkan panggilan rekursif atau sesuatu. Berikut ialah fungsi salinan mendalam yang saya laksanakan Anda boleh menulis sendiri dan menambahkannya ke pangkalan pengetahuan Node.js anda sendiri. javascript
var a = "1";
var b = 2;
console.log(a b);
console.log(parseInt(a) b);
12
3
var a = 1, b = "1";
console.log(a == b);
var a = 1, b = "1";
console.log(a === b);
fungsi foo() {}
var a = 0;
var b = 'Shh~ Egg Drop Soup sedang tidur. ';
var c = 1.0;
var d = foo;
var e = { "a" : a };
var f = [ 1, 2, 3 ];
var g = null;
var h = tidak ditentukan;
console.log(jenis a);
console.log(jenis b);
console.log(jenis c);
console.log(jenis d);
console.log(jenis e);
console.log(jenis f);
console.log(jenis g);
console.log(jenis h);
nombor
rentetan
nombor
fungsi
objek
objek
objek
tidak ditentukan
Semua orang boleh memahaminya, jadi saya tidak akan menerangkannya terlalu banyak. Tetapi tidak seperti C/C, nol ini tidak sama dengan 0.
var a = {
"foo" : null
};
console.log(a["foo"]);
console.log(a["bar"]);
null
tidak ditentukan
rentetan
boolean
tatasusunan
Antaranya, tiga jenis pertama boleh diberikan secara langsung, dan tugasan tatasusunan hanyalah tugasan rujukan Jika nilai ditukar dalam pembolehubah baru, nilai pembolehubah lama juga akan berubah :
var foo = [ 1, 2, 3 ];
var bar = foo;
bar[0] = 3;
console.log(foo);
Hasilnya ialah:
[ 3, 2, 3 ]
Dalam erti kata lain, jika tatasusunan menyalin tatasusunan baharu, ia tidak boleh menggunakan tugasan langsung, tetapi mesti "salinan dalam".
var dog = new Array();
anjing[0] = "Shh~";
anjing[1] = "Sup Titisan Telur";
anjing[2] = "Tidur";
var dog = new Array( "Shh~", "Sup Titisan Telur", "Tidur" );
Jenis keempat:
var anjing = [
"Shh~",
"Sup titisan telur",
"Tidur"
];
var anjing = {
"pra" : "Shh~",
"sub" : {
"nama" : "Sup Titisan Telur",
"bertindak" : "tidur",
"masa" : 12
},
"suf" : [ "Saya kata", "Tidur", "Tidur sahaja" ]
};
anjing
.pra;
anjing ["pra"];
fungsi foo() {
//...
}
Okay, kami telah menulis kelas foo.
var bar = new foo();
Tidak kira sama ada ia adalah fungsi, jika ia ditulis dalam bentuk ini (baru), ia adalah instantiasi kelas ini.
javascript
fungsi foo() {
This.hello = "dunia";
}
fungsi foo() {
//...
}
foo.prototype.hello = "dunia";
var bar = new foo();
console.log(bar.hello);
fungsi foo() {
This.hello = "dunia";
}
foo.prototype.hello = "Sup Titisan Telur";
// Kod 2.1
fungsi foo(hello) {
If(hello === undefined) {
This.hello = "dunia";
} lain {
This.hello = hello;
}
}
// Bersambung daripada kod 2.1
var bar1 = new foo();
var bar2 = new foo("Sup Titisan Telur");
var bar1 = new foo(undefined);
// Bersambung daripada kod 2.1
set fungsiHello(hello) {
this.hello = hello;
}
foo.prototype.setHello = setHello;
bar1.setHello("Egg Pancake");
fungsi(hello) {
This.hello = hello;
}
foo.prototype.setHello = function(hello) {
This.hello = hello;
}
/**
* Kami akan lulus dalam dua pembolehubah a dan b,
* Selepas mengira nilai a b, serahkan kepada func(num)
* Pergi ke output
,*/
fungsi sumab(a, b, func) {
var c = a b;
func(a, b, c);
}
fungsi zh(a, b, jumlah) {
console.log(nilai " " b " ialah: " sum);
}
fungsi en(a, b, jumlah) {
console.log(a " tambah " b " ialah " jumlah);
}
sumab(1, 2, zh);
sumab(3, 4, en);
3 tambah 4 ialah 7
Jika kod tersebut adalah dalam bentuk fungsi tanpa nama, ia akan menjadi:
sumab(1, 2, fungsi(a, b, jumlah) {
console.log(nilai " " b " ialah: " sum);
});
sumab(3, 4, fungsi(a, b, jumlah) {
console.log(a " tambah " b " ialah " jumlah);
});
// Bersambung daripada kod 2.1
foo.prototype.setHello = function(hello) {
This.hello = hello;
}
String.prototype.sb = function() {
var newstr = "";
for(var i = 0; i < this.length; i ) {
If(i % 2 === 0) newstr = "s";
else newstr = "b";
}
Kembalikan newstr;
};
var str = "Shh~ Sup Titisan Telur sedang tidur.";
console.log(str.sb());
Jika anda memberitahu komputer anda "Shh~ Egg Drop Soup sedang tidur.", komputer anda akan memanggil anda bodoh empat setengah kali. (Hancurkan dengan cepat)
fungsi cloneObject(src) {
var dest = {};
untuk(kunci var dalam src) {
if(typeof src === "objek") dest[key] = cloneObject(src[key]);
else dest[key] = src[key];
}
kembali destinasi;
}