ชนิดข้อมูล
JavaScript เป็นภาษา ที่อ่อนแอ แต่มันไม่ได้ไม่มีประเภท JavaScript สามารถรับรู้ค่า 7 ประเภทต่อไปนี้:
ชนิดข้อมูลพื้นฐาน
1. บูล
2. จำนวน
3. สตรีม
4. ไม่มี
5. ไม่ได้รับการกำหนด
6.Symbol
วัตถุ
1. อาเรย์
2. Regexp
3. วันที่
4. ธ
5 ....
คุณสามารถใช้ typeof เพื่อกำหนดชนิดข้อมูล ผู้ประกอบการส่งคืนสตริง แต่ไม่ได้ผลลัพธ์ทั้งหมดที่ส่งคืนสอดคล้องกับความคาดหวัง
typeof false // "boolean" typeof .2 // "number" typeof nan // "number" typeof '' // "สตริง" typeof undefined // "undefined" สัญลักษณ์ typebol () // "สัญลักษณ์" typeof // "typeof" typeof "typeof"
ตัวแปร
ในแอปพลิเคชันให้ใช้ตัวแปรเพื่อตั้งชื่อค่า ชื่อของตัวแปรเรียกว่าตัวระบุ
คำแถลง
1. ใช้คำหลัก var: ขอบเขตฟังก์ชัน
2. ใช้คำหลักให้: บล็อกขอบเขตตัวแปรโลคัล
3. การใช้โดยตรง: ขอบเขตทั่วโลก
var global_var = 1; ฟังก์ชั่น fn () {var fn_var = 2; ถ้า (fn_var> 10) {ให้ block_var = 3; global_var2 = 4;}}เท่านั้นประกาศว่าไม่มีการกำหนดค่าเริ่มต้นของตัวแปรจะไม่ได้กำหนดไว้
คำหลัก const สามารถประกาศตัวแปรที่ไม่เปลี่ยนรูปและยังบล็อกขอบเขต ความเข้าใจในวัตถุที่ไม่เปลี่ยนรูปต้องได้รับความสนใจ
const num = 1; const obj = {prop: 'value'}; num = 2; // uncaught typeError: การกำหนดให้กับตัวแปรคงที่ obj ['prop'] = 'value2'; obj = []; // uncaught typeError: การกำหนดตัวแปรคงที่การปรับปรุงตัวแปร
JavaScript สามารถอ้างถึงตัวแปรที่ประกาศในภายหลังโดยไม่ต้องโยนแนวคิดที่แตกต่างกัน แนวคิดนี้เรียกว่าโปรโมชั่นการประกาศตัวแปร (Hoisting)
console.log (a); // undefinedvar a = 2;
เทียบเท่ากับ
var a; console.log (a); a = 2;
การทำงาน
ฟังก์ชั่นเป็นรูทีนย่อยที่สามารถเรียกได้ด้วยรหัสภายนอก (หรือเรียกซ้ำโดยฟังก์ชันเอง)
กำหนดฟังก์ชั่น
1. การประกาศฟังก์ชั่น
2. การแสดงออกของฟังก์ชั่น
3. ฟังก์ชั่นตัวสร้าง
4. ฟังก์ชั่นลูกศร
ฟังก์ชั่น fn () {} var fn = function () {} var fn = ฟังก์ชั่นใหม่ (arg1, arg2, ... argn, funcbody) var fn = (param) => {}ข้อโต้แย้ง
1.Arguments: วัตถุคล้ายอาร์เรย์ที่มีพารามิเตอร์ส่งผ่านไปยังฟังก์ชันการดำเนินการปัจจุบัน
2.Arguments.length: จำนวนพารามิเตอร์ที่ส่งผ่านไปยังฟังก์ชัน
3.Arguments.caller: เรียกฟังก์ชั่นที่เรียกใช้งานฟังก์ชันในปัจจุบัน
4.Arguments.callee: ฟังก์ชั่นกำลังดำเนินการในปัจจุบัน
ฟังก์ชั่น foo () {return arguments;} foo (1, 2, 3); // อาร์กิวเมนต์ [3] // {"0": 1, "1": 2, "2": 3}พักผ่อน
ฟังก์ชั่น foo (... args) {return args;} foo (1, 2, 3); // array [3] // [1, 2, 3] ฟังก์ชั่น fn (a, b, ... args) {return args;} fn (1, 2, 3, 4, 5); // อาร์เรย์ [3] // [3, 4, 5]ค่าเริ่มต้น
ค่าเริ่มต้นสามารถตกลงกันได้เมื่อกำหนดพารามิเตอร์ของฟังก์ชัน
ฟังก์ชั่น fn (a = 2, b = 3) {return a + b;} fn (2, 3); // 5FN (2); // 5fn (); // 5วัตถุ
วัตถุในจาวาสคริปต์เป็นคอลเลกชันคีย์ที่แปรปรวน
กำหนดวัตถุ
1. ตัวอักษร
2. ตัวสร้าง
var obj = {prop: 'value', fn: function () {}}; var วันที่ = วันที่ใหม่ ();ตัวสร้าง
ไม่มีความแตกต่างระหว่างตัวสร้างและฟังก์ชั่นปกติ การโทรด้วยคำหลักใหม่คือตัวสร้าง การใช้ตัวสร้างสามารถสร้างอินสแตนซ์วัตถุ
มีสองผลตอบแทนที่เป็นไปได้ของฟังก์ชัน
1. การโทรกลับอย่างชัดเจนเพื่อส่งคืนการประเมินผลของนิพจน์หลังจากส่งคืน
2. ไม่เรียกคืนและส่งคืนที่ไม่ได้กำหนด
ฟังก์ชั่นคน (ชื่อ, อายุ) {this.name = name; this.age = อายุ;} var people = คนใหม่ ('byron', 26);ตัวสร้างส่งคืนค่า
1. ไม่มีค่าส่งคืน
2. ประเภทข้อมูลง่ายๆ
3. ประเภทวัตถุ
ตัวสร้างส่งคืนอินสแตนซ์ของตัวสร้างในสองกรณีแรก คุณลักษณะนี้ใช้โดยการสร้างอินสแตนซ์วัตถุ
ตัวสร้างที่สามทำหน้าที่เหมือนกับฟังก์ชั่นทั่วไปและส่งคืนผลลัพธ์ของนิพจน์หลังจากส่งคืน
ต้นแบบ
1. แต่ละฟังก์ชั่นมีแอตทริบิวต์วัตถุของต้นแบบและมีแอตทริบิวต์ตัวสร้างในวัตถุซึ่งชี้ไปที่ฟังก์ชั่นโดยค่าเริ่มต้น
2. แต่ละวัตถุมีแอตทริบิวต์ __proto__ และจักรราศีชี้ไปที่ต้นแบบของประเภทแม่
คนฟังก์ชั่น (ชื่อ) {this.name = name;} person.prototype.print = function () {console.log (this.name);}; var p1 = บุคคลใหม่ ('byron'); var p2 = บุคคลใหม่ ('casper'); p1.print (); p2.print ();สิ่งนี้และขอบเขต
ขอบเขตสามารถเข้าใจได้ในวิธีที่ได้รับความนิยม
1. ฉันเป็นใคร
2. ฉันมีม้าแบบไหน
ฉันกำลังตอบสิ่งนี้ใคร
นักขี่ม้าเป็นตัวแปรในท้องถิ่นของฉัน
ฉากนี้
ฟังก์ชั่นปกติ
1. โหมดเข้มงวด: ไม่ได้กำหนด
2. โหมดที่ไม่ใช่ Strict: Global Object
3.Node: Global
4. เบราว์เซอร์: หน้าต่าง
ตัวสร้าง: อินสแตนซ์ของวัตถุ
วิธีการวัตถุ: วัตถุเอง
โทรและสมัคร
1.FN.CALL (บริบท, arg1, arg2, …, argn)
2.fn.apply (บริบท, args)
ฟังก์ชั่น ISNUMBER (obj) {return object.prototype.toString.call (obj) === '[หมายเลขวัตถุ]';}function.prototype.bind
การผูกส่งคืนฟังก์ชั่นใหม่ขอบเขตของฟังก์ชันคือพารามิเตอร์การผูก
ฟังก์ชั่น fn () {this.i = 0; setInterval (function () {console.log (this.i ++);}. ผูก (สิ่งนี้), 500)} fn (); -ฟังก์ชันลูกศรเป็นคุณสมบัติใหม่ที่จัดทำโดย ES6 มันเป็นนิพจน์ฟังก์ชันตัวย่อที่มีขอบเขตคำศัพท์และค่านี้
ฟังก์ชั่น fn () {this.i = 0; setInterval (() => {console.log (this.i ++);}, 500)} fn ();สืบทอด
ในสถานการณ์ JavaScript มรดกมีสองเป้าหมายและคลาสย่อยจำเป็นต้องได้รับคลาสหลัก:
1. คุณสมบัติวัตถุ
2. วิธีวัตถุ
ฟังก์ชั่นสืบทอด (เด็ก, พาเรนต์) {var _propTotype = object.create (parent.prototype); _ proptotype.constructor = child.prototype.constructor; child.prototype = _proptotype; () {return this.name;} ฟังก์ชั่นภาษาอังกฤษ (ชื่อ, อายุ, ภาษา) {people.call (นี่, ชื่อ, อายุ); this.language = ภาษา;} สืบทอด (ภาษาอังกฤษ, คน); english.prototype.introduce = function () {console.log ( อายุ, ภาษา) {people.call (นี่, ชื่อ, อายุ); this.language = ภาษา;} สืบทอด (จีน, คน); chinese.prototype.introduce = function () {console.log ('สวัสดีฉัน' + this.getName ()) จีนใหม่ ('น้ำมันสลัด', 27, 'จีน'); en.introduce (); cn.introduce ();คลาส ES6 และมรดก
"ใช้อย่างเข้มงวด"; คนในชั้นเรียน {constructor (ชื่อ, อายุ) {this.name = name; this.age = อายุ;} getName () {return this.name;}} คลาสภาษาอังกฤษขยายคน {constructor (ชื่อ, อายุ, ภาษา) {super (ชื่อ, อายุ); this.getName ()); console.log ('ฉันพูด' + this.language);}} ให้ en = ภาษาอังกฤษใหม่ ('byron', 26, 'ภาษาอังกฤษ'); en.introduce ();ไวยากรณ์
คำสั่งติดฉลาก
ลูป:
สำหรับ (var i = 0; i <10; i ++) {สำหรับ (var j = 0; j <5; j ++) {console.log (j); ถ้า (j === 1) {break loop;}}} console.log (i);งบและสำนวน
var x = {a: 1}; {a: 1} {a: 1, b: 2}ดำเนินการฟังก์ชั่นทันที
(function () {} ()); (function () {}) (); [function () {} ()]; ~ function () {} () ;! function () {} ();+ function () {} ();- ฟังก์ชัน () {} (); ลบฟังก์ชัน () {} (); ฟังก์ชัน typeof () {} (); ฟังก์ชันโมฆะ () {} (); ฟังก์ชันใหม่ () () () () {{{{{{{{{{) function () {} (); 1> function () {} ();ฟังก์ชั่นขั้นสูง
ฟังก์ชั่นลำดับที่สูงกว่าเป็นฟังก์ชั่นที่ถือว่าฟังก์ชั่นเป็นพารามิเตอร์หรือค่าส่งคืนเป็นฟังก์ชั่น
ฟังก์ชั่นการโทรกลับ
[1, 2, 3, 4] .Foreach (ฟังก์ชั่น (รายการ) {console.log (รายการ);});การปิด
การปิดประกอบด้วยสองส่วน
1. ฟังก์ชั่น
2. สภาพแวดล้อม: ตัวแปรท้องถิ่นภายในขอบเขตเมื่อการสร้างฟังก์ชั่น
ฟังก์ชั่น makeCounter (init) {var init = init || 0; return function () {return ++ init;}} var counter = makeCounter (10); console.log (counter ()); console.log (counter ()); console.log (ตัวนับ ());ข้อผิดพลาดทั่วไป
สำหรับ (var i = 0; i <doms.length; i ++) {doms.eq (i) .on ('คลิก', ฟังก์ชั่น (ev) {console.log (i);});} สำหรับ (var i = 0; i <doms.length; {console.log (i);});}) (i);}ฟังก์ชั่นขี้เกียจ
ฟังก์ชั่น EventBinderGenerator () {if (window.addeVentListener) {ฟังก์ชั่น return (องค์ประกอบ, ประเภท, ตัวจัดการ) {element.addeventListener (ประเภท, hanlder, false);}} อื่น EventBinderGenerator ();แกง
วิธีการอนุญาตให้ใช้พารามิเตอร์บางส่วนเพื่อสร้างฟังก์ชัน
ฟังก์ชั่น istype (ประเภท) {ฟังก์ชั่น return (obj) {return object.prototype.toString.call (obj) === '[object' + type + ']';}} var isnumber = istype ('number'); console.log (isnumber (1)); Istype ('Array'); console.log (isarray (1)); console.log (isarray ([1, 2, 3])); ฟังก์ชั่น f (n) {return n * n;} ฟังก์ชั่น g (n) {return n * 2;} console.log (f (g (5))); ท่อฟังก์ชัน (f, g) {return function () {return f.call (null, g.apply (null, อาร์กิวเมนต์);การเรียกซ้ำหาง
1. การโทรหางหมายความว่าขั้นตอนสุดท้ายของฟังก์ชั่นคือการเรียกใช้ฟังก์ชันอื่น
2. ฟังก์ชั่นเรียกตัวเองว่าเรียกว่าการเรียกซ้ำ
3. ถ้าหางเรียกตัวเองมันจะเรียกว่าการเรียกซ้ำหาง
การเรียกซ้ำมีแนวโน้มที่จะ "สแต็กล้น" ข้อผิดพลาด (สแต็กล้น)
ฟังก์ชั่นแฟคทอเรียล (n) {ถ้า (n === 1) ส่งคืน 1; return n * factorial (n - 1);} factorial (5) // 120แต่สำหรับการเรียกซ้ำหางเนื่องจากมีการบันทึกการโทรเพียงครั้งเดียวข้อผิดพลาด "สแต็กล้น" จะไม่เกิดขึ้น
ฟังก์ชั่นแฟคทอเรียล (n, ทั้งหมด) {ถ้า (n === 1) ผลตอบแทนทั้งหมด; return factorial (n - 1, n * ทั้งหมด);} factorial (5, 1) // 120การแกงลดพารามิเตอร์
ฟังก์ชั่น Currying (fn, n) {return function (m) {return fn.call (this, m, n);};} ฟังก์ชั่น tailfactorial (n, ทั้งหมด) {ถ้า (n === 1) ผลตอบแทนทั้งหมด; return tailfactorial (n - 1, n * ทั้งหมด);การต่อต้านการแพร่กระจาย
function.prototype.uncurry = function () {return this.call.bind (this);};ผลักดันการวางนัยทั่วไป
var push = array.prototype.push.uncurry (); var arr = []; push (arr, 1); push (arr, 2); push (arr, 3); console.log (arr);
เนื้อหาข้างต้นเป็นคำอธิบายแบบเต็มของตัวอย่างคลาสสิกที่สวยงามของภาษา JavaScript (การรวบรวม) ที่แนะนำโดยบรรณาธิการ ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน!