Tipe data
JavaScript adalah bahasa tipe lemah , tetapi bukan tanpa tipe. JavaScript dapat mengenali 7 jenis nilai yang berbeda:
Tipe data dasar
1. Boolean
2. jumlah
3.String
4.Null
5. Dipahami
6.Symbol
Obyek
1.array
2.Gegexp
3. Tanggal
4.math
5 ....
Anda dapat menggunakan TypeOF untuk menentukan tipe data. Operator mengembalikan string, tetapi tidak semua hasil yang dikembalikan sejalan dengan harapan.
typeof false // "boolean"typeof .2 // "number"typeof NaN // "number"typeof '' // "string"typeof undefined // "undefined"typeof Symbol() // "symbol"typeof new Date() // "object"typeof [] // "object"typeof alert // "function"typeof null // "object"typeof not_defined_var // "undefined"
variabel
Dalam aplikasi, gunakan variabel untuk menamai nilainya. Nama variabel disebut pengidentifikasi
penyataan
1. Gunakan kata kunci var: ruang lingkup fungsi
2. Gunakan Kata Kunci Biarkan: Blokir Lingkup Variabel Lokal
3. Penggunaan Langsung: Lingkup Global
var global_var = 1; fungsi fn () {var fn_var = 2; if (fn_var> 10) {let block_var = 3; global_var2 = 4;}}Hanya menyatakan tidak ada penugasan, nilai default variabel tidak ditentukan
Kata kunci Const dapat mendeklarasikan variabel abadi, dan juga diblokir. Pemahaman tentang benda yang tidak dapat diubah membutuhkan perhatian
const num = 1; const obj = {prop: 'value'}; num = 2; // TipeError Uncaught: Penugasan ke variabel konstan.obj ['prop'] = 'value2'; obj = []; // TipeError Uncaught: Penugasan ke Variabel Konstan.Peningkatan variabel
JavaScript dapat merujuk ke variabel yang dinyatakan nanti tanpa melempar konsep yang berbeda. Konsep ini disebut promosi deklarasi variabel (pengangkat)
console.log (a); // UndefinedVar A = 2;
Setara dengan
var a; console.log (a); a = 2;
fungsi
Fungsi adalah subrutin yang dapat dipanggil dengan kode eksternal (atau secara rekursif dipanggil oleh fungsi itu sendiri).
Mendefinisikan fungsi
1. Deklarasi fungsi
2. Ekspresi fungsi
3. Konstruktor fungsi
4. Fungsi Panah
function fn () {} var fn = function () {} var fn = fungsi baru (arg1, arg2, ... argn, funcbody) var fn = (param) => {}argumen
1.Arguments: Objek seperti array yang berisi parameter yang diteruskan ke fungsi eksekusi saat ini
2.Arguments.length: Jumlah parameter yang diteruskan ke fungsi
3.arguments.caller: Panggil fungsi yang saat ini menjalankan fungsi
4.arguments.callee: Fungsi saat ini sedang dieksekusi
function foo () {return argumen;} foo (1, 2, 3); // argumen [3] // {"0": 1, "1": 2, "2": 3}istirahat
fungsi foo (... args) {return args;} foo (1, 2, 3); // array [3] // [1, 2, 3] fungsi fn (a, b, ... args) {return args;} fn (1, 2, 3, 4, 5); // array [3] // [3, 4, 5]bawaan
Nilai default dapat disepakati saat mendefinisikan parameter fungsi.
fungsi fn (a = 2, b = 3) {return a + b;} fn (2, 3); // 5fn (2); // 5fn (); // 5Obyek
Objek dalam JavaScript adalah koleksi kunci variabel
Tentukan objek
1. Literal
2. Konstruktor
var obj = {prop: 'value', fn: function () {}}; var date = new date ();Konstruktor
Tidak ada perbedaan antara konstruktor dan fungsi normal. Memanggil dengan kata kunci baru adalah konstruktor. Menggunakan konstruktor dapat membuat instantiasi suatu objek.
Ada dua kemungkinan pengembalian fungsi
1. Secara eksplisit panggilan kembali untuk mengembalikan evaluasi ekspresi setelah kembali
2. Tidak ada pengembalian yang dipanggil dan dikembalikan tidak ditentukan
function people (name, use) {this.name = name; this.age = usia;} var people = orang baru ('byron', 26);Nilai Pengembalian Konstruktor
1. Tidak ada nilai pengembalian
2. Jenis Data Sederhana
3. Jenis Objek
Konstruktor mengembalikan contoh konstruktor dalam dua kasus pertama. Fitur ini digunakan dengan instantiating objek.
Konstruktor ketiga melakukan hal yang sama dengan fungsi biasa, dan mengembalikan hasil ekspresi setelah kembali
prototipe
1. Setiap fungsi memiliki atribut objek prototipe, dan ada atribut konstruktor di objek, yang menunjuk ke fungsi itu sendiri secara default.
2. Setiap objek memiliki atribut __proTo__, dan zodiak menunjuk ke prototipe jenis induknya
function person (name) {this.name = name;} person.prototype.print = function () {console.log (this.name);}; var p1 = orang baru ('byron'); var p2 = orang baru ('casper'); p1.print (); p2.print ();ini dan ruang lingkup
Ruang lingkup dapat dipahami dengan cara yang populer
1. Siapa saya
2. Penunggang penunggang kuda seperti apa yang saya miliki
Siapa saya menjawab ini
Penunggang kuda adalah variabel lokal saya
Adegan ini
Fungsi normal
1. Mode ketat: Tidak ditentukan
2. Mode Non-Strict: Objek Global
3.Node: Global
4. Browser: Jendela
Konstruktor: Sebuah instance dari suatu objek
Metode objek: objek itu sendiri
Hubungi & Terapkan
1.fn.call (konteks, arg1, arg2,…, argn)
2.Fn.Apply (konteks, args)
function isNumber (obj) {return object.prototype.toString.call (obj) === '[nomor objek]';}Function.prototype.bind
BIND Mengembalikan fungsi baru, ruang lingkup fungsi adalah parameter BIND
fungsi fn () {this.i = 0; setInterval (function () {console.log (this.i ++);}. bind (this), 500)} fn (); () => {}Fungsi Panah adalah fitur baru yang disediakan oleh ES6, ini adalah ekspresi fungsi yang disingkat, dengan ruang lingkup leksikal dan nilai ini
function fn () {this.i = 0; setInterval (() => {console.log (this.i ++);}, 500)} fn ();mewarisi
Dalam skenario JavaScript, warisan memiliki dua tujuan, dan subkelas perlu mendapatkan kelas induk:
1. Properti Objek
2. Metode objek
Fungsi mewarisi (anak, induk) {var _proptotype = object.create (parent.prototype); _ proptotype.constructor = child.prototype.constructor; child.prototype = _proptotype;} function people (name, use) {this.name = name; name; name. this.name;} function bahasa Inggris (nama, usia, bahasa) {people.call (ini, nama, usia); this.banguage = bahasa;} mewarisi (bahasa Inggris, orang); english.prototype.introduce = function () {console.log ('hai, saya' + ini. {People.call (ini, nama, usia); this.banguage = bahasa;} mewariskan (cina, orang); cina.prototype.introduce = function () {console.log ('halo, saya' + ini. Minyak ', 27,' Cina '); en.introduce (); cn.introduce ();Kelas ES6 dan warisan
"Gunakan ketat"; kelas orang {konstruktor (nama, usia) {this.name = name; this.age = age;} getName () {return this.name;}} kelas bahasa Inggris memperluas orang {konstruktor (nama, usia) {name, usia); this.banguage = language;} perkenalan () {console. this.getName ()); console.log ('I Speak' + this.ibuage);}} let en = New English ('Byron', 26, 'English'); en.introduce ();tata bahasa
pernyataan label
lingkaran:
untuk (var i = 0; i <10; i ++) {for (var j = 0; j <5; j ++) {console.log (j); if (j === 1) {break loop;}}} konsol.log (i);Pernyataan dan Ekspresi
var x = {a: 1}; {a: 1} {a: 1, b: 2}Jalankan fungsi segera
(function () {} ()); (function () {}) (); [function () {} ()]; ~ function () {} ();! function () {} ();+ function () {} ();- function () {} (); hapus fungsi () {} (); typeof function () {); void function () {} (); function baru () {} (); fungsi baru () {{); {) () () () {) {) {) {) {) {) {) {) {) {) {) {) {) {) {) {) {) {) {) {) {) {) {) {) {) {) {) {) function () {} (); 1> function () {} ();Fungsi lanjutan
Fungsi tingkat tinggi adalah fungsi yang memperlakukan fungsi sebagai parameter atau nilai pengembalian sebagai fungsi.
Fungsi panggilan balik
[1, 2, 3, 4] .foreach (function (item) {console.log (item);});Penutup
Penutupan terdiri dari dua bagian
1. Fungsi
2. Lingkungan: Variabel lokal dalam ruang lingkup saat penciptaan fungsi
fungsi makeCounter (init) {var init = init || 0; return function () {return ++ init;}} var counter = makeCounter (10); console.log (counter ()); console.log (counter ()); console.log (counter ());Kesalahan khas
untuk (var i = 0; i <doms.length; i ++) {doms.eq (i) .on ('klik', function (ev) {console.log (i);});} untuk (var i = 0; i <Doms.length; i ++) {function (i) {doms.eq (i). {console.log (i);});}) (i);}Fungsi malas
fungsi eventBindergenerator () {if (window.addeventListener) {return function (element, type, handler) {element.addeventListener (type, hanlder, false);}} else {return function (eleme, handler) {element.attachevent ('on' on ' + type, handler.bind (handler. EventBinderGenerator ();Kari
Cara untuk memungkinkan penggunaan parameter parsial untuk menghasilkan fungsi
fungsi isType (type) {return function (obj) {return object.prototype.toString.call (obj) === '[objek' + type + ']';}} var isNumber = isType ('angka'); console.log (iSnumber (1)); console.log (iSnumber ('s'); vararr (1); console.log (iSnumber ('s'); isType ('array'); console.log (isArray (1)); console.log (isArray ([1, 2, 3])); Fungsi f (n) {return n * n;} fungsi g (n) {return n * 2;} console.log (f (g (5))); pipa fungsi (f, g) {return function () {return f.call (null, g.Apply (null, argumen));}} var fn = (f, g);Rekursi ekor
1. Panggilan ekor berarti bahwa langkah terakhir suatu fungsi adalah memanggil fungsi lain
2. Fungsi panggilan itu sendiri, disebut rekursi
3. Jika ekor memanggil dirinya sendiri, itu disebut rekursi ekor
Rekursi rentan terhadap kesalahan "Stack Overflow" (Stack Overflow)
Function factorial (n) {if (n === 1) return 1; return n * factorial (n - 1);} factorial (5) // 120Tetapi untuk rekursi ekor, karena hanya ada satu catatan panggilan, kesalahan "stack overflow" tidak akan pernah terjadi
fungsi faktorial (n, total) {if (n === 1) pengembalian total; return factorial (n - 1, n * total);} factorial (5, 1) // 120Currying mengurangi parameter
Function Currying (fn, n) {return function (m) {return fn.call (this, m, n);};} function tailfactorial (n, total) {if (n === 1) Total return; return tailfactorial (n - 1, n * Total);} const factortoral = Currying (tailfactorial, 1);Anti-Kurriisasi
Function.prototype.uncurry = function () {return this.call.bind (this);};Dorong generalisasi
var push = array.prototype.push.uncurry (); var arr = []; push (arr, 1); push (arr, 2); push (arr, 3); console.log (arr);
Konten di atas adalah deskripsi lengkap dari contoh klasik yang indah dari bahasa JavaScript (kompilasi) yang diperkenalkan kepada Anda oleh editor. Saya harap ini akan membantu semua orang!