[心得] JavaScript權威指南學習筆記
JS作為5大語言之一,在前端領域應用廣泛。
當學習一門新的程式語言時,應當對照書中示例,邊學邊做,反覆演練以加深理解。
JS中兩種最重要的資料型別是物件和陣列。
物件是名值對的集合,或者字串到值的對映的集合。
陣列是以數字為索引的列表。
當函式和物件合寫在一起時,函式就變成了方法。
自定義方法,this關鍵字是對定義方法的物件的引用。
按慣例,建構函式均首字母大寫。
jQuery程式碼非常易於識別,因為它多次利用一個$()的函式。
以下是一些基本的JS示例
var x;
x = 0;
x
x = 1;
x = 0.01;
x = "Hello World;"
x = 'JavaScript';
x = true
x = false;
x = null;
x = undefined;
var book = {
topic: "JavaScript";
fat: true
};
book.topic;
bock["fat"];
book.author = "Flanagan";
book.contents = {};
var primes = [2, 3, 5, 7];
primes[0];
primes.length;
primes[primes.length - 1];
primes[4] = 9;
var points = {
{x:0, y:0},
{x:1, y:1}
};
function plus1(x){
return x+1;
}
points.dist = function(){
var p1 = this[0];
var p2 = this[1];
var a = p2.x - p1.x;
var b = p2.y - p1.y;
return Math.sqrt(a*a + b*b);
};
function abs(x) {
if (x>=0){
return x;
}
else {
return -x;
}
}
function factorial(n) {
var product = 1;
while(n>1){
product *= n;
n--;
}
return product;
}
function factorial2(n){
var i, product = 1;
for(i=2; i<=n; i++){
product *= i;
}
return product;
}
function debug(msg) {
var log = $("#debuglog");
if (log.length == 0) {
log = $("<div id='debuglog'><h1>Debug Log</h1></div>");
log.appendTo(document.body);
}
log.append($("<pre/>").text(msg));
}
Math.pow(2,3)
Math.round(.6)
Math.ceil(.6)
Math.floor(.6)
Math.abs(-5)
Math.max(x,y,z)
Math.min(x,y,z)
Math.random()
Math.PI
Math.E
Math.sqrt(3)
Math.log(10)
var then = new Date(2016,11,14);
var later = new Date(2016,11,14,20,55,11);
var now = new Date();
var elapsed = noew - then;
later.getFullYear()
later.getMonth()
later.getDate()
later.getDay()
later.getHours()
later.getUTCHours()
var s = "Hello, JavaScript";
s.charAt(0)
s.charAt(s.length-1)
s.substring(1,4)
s.slice(1,4)
s.slice(-3)
s.indexOf('J')
s.lastIndexOf('J')
s.split(',')
s.replace('h', 'H')
s.toUpperCase()
var text = "testing: 1, 2, 3";
var pattern = /\d+/g
pattern.test(text)
text.search(pattern)
text.match(pattern)
text.replace(pattern, '#')
text.split(/\D+/);
JS語言標準ECMAScript,簡稱ES
JS區分大小寫,HTML不區分大小寫,JS在多數情況下忽略程式的空格和換行符。
直接量就是程式中的直接資料值。
數字不能首字元出現在變數名中。
只有在缺少了分號就無法正確解析程式碼的情況下,JS才會自動補分號。
涉及return,break和continue,以及++,–運算子時不能斷行。
JS的資料型別分為原始型別和物件型別。原始型別包括數字,字串和布林值。
JS變數是無型別的,JS不區分整數值和浮點數。
考慮相容性,最好不要使用以哦為字首的整型直接量。
Js中算術運算在上溢和下溢或被0整除是不會報錯,而是返回正或負的Infinity。0除0,結果不是一個數NaN。
Js中非數字值和它自身都不等。
RegExp是正則表達處理模組。
對null執行typeof運算。結果返回object,可認為null是一個特殊物件值,含義是非物件。
用來定義的值表示更深層次的空值。undefined是預定義的全域性變數。它的值是未定義。
給變數或屬性賦值,給函式傳參,最佳選擇是null。
全域性物件應該當作保留字來看待。
全域性屬性:undefined,Infinity,NaN
全域性函式:isNaN(),ParseInt(),eval()
建構函式:Date(),RegExp(),String(),Object(),Array()
全域性物件:Math,JSON
var s = “text”;
s.len =4;
var t = s.len;
t的值為undefined,因為臨時字串隨即被銷燬。
undefined,null,布林值,數字和字串是原始值,原始值不可更改,原始值的比較是值的比較,物件的比較是引用比較。當引用同一物件時,才相等。
所有物件繼承了兩個轉換方法:toString()和valueOf()
===也稱嚴等,用來檢測兩個運算元是否嚴格相等,==允許型別轉換。
eval()是一個函式,但它已被當成運算子來對待。
eval()只有一個引數,如果傳入非字串,它直接返回該引數,否則把字串當JS程式碼解析。
關於eval()最重要的是,它呼叫它的變數作用域環境。
delete是一元操作符,用來刪除物件屬性或陣列元素。
void用來忽略運算元的值。常用在客戶端的URL中。
throw expression;丟擲異常,用try/catch/finally進行捕獲異常。
with語句用於臨時擴充套件作用域,不推薦使用。
debugger用來產生一個斷點。
use strict;嚴格模式
主要3點:
1. 禁止with
2. 變數先宣告
3. 呼叫函式中的一個this值是undefined,而非嚴格模式中,this總是一個全域性物件。
empty相當於python的pass
原型繼承是JS的核心特徵。
物件最常用的用法是建立,設定,查詢,刪除,檢測和列舉它的屬性。
物件直接量是由若干名值對組成的對映表。
new運算子是由若干名值對組成的對映表。
沒有原型的物件不多,Object.prototyp就是其一,它不繼承任何屬性。
通過原型繼承來建立物件。
var o3 = object.create(object.prototype);
extend()函式把一個物件的屬性複製到另一個物件中,只簡單複製屬性名和值,沒有複製屬性的特性,也沒有複製存取器的getter和setter方法。
物件3屬性:原型,類,和可擴充套件性。
toLocaleString()返回一個表示這個物件的本地化字串。
Js並不真正支援多維陣列。
Array.join()
Array.reverse()
Array.sort()
Array.concat(4,5)
Array.slice()
Array.splice() //插入或刪除元素的通用方法
Array.push()
Array.pop()
Array.unshift()//當多個引數時,整體一次性插入
Array.shift()
forEach()方法從頭到尾遍歷陣列,沒有for迴圈的break,必須藉助異常.
map()將呼叫的陣列的每個元素傳遞給指定的函式,並返回一個陣列,它包含該函式的返回值.
filter()方法進行過濾
every()類似所有
some()類似存在
reduce()和reduceRight()使用指定的函式將陣列元素進行組合,生成單個值.
indexOf()
lastIndexOf()
JS函式可以巢狀在其他函式中定義,並訪問它們宿主函式作用域中的任何變數.
任何函式只要作為方法呼叫,實際上都會傳入一個隱式實參this.
當方法的返回值是一個物件,則可以呼叫它的方法.這種方式稱為鏈式呼叫.
可變實參列表用arguments引數,它並非真正陣列,而是一個實參物件.
callee指代當前正在執行的函式,caller指代呼叫者.
JS中函式並非原始值.而是一種特殊物件.
函式物件可以通過作用域鏈相互關聯起來,函式體內部的變數都可以儲存在函式作用域內,這種特性稱為閉包.
相關文章
- JavaScript 權威指南(第六版)學習筆記JavaScript筆記
- MongoDB權威指南學習筆記03MongoDB筆記
- 《JavaScript權威指南第六版》學習筆記-JavaScript概述JavaScript筆記
- 《JavaScript權威指南第六版》學習筆記-物件JavaScript筆記物件
- 《AngularJs權威指南》學習筆記---指令AngularJS筆記
- 《JavaScript權威指南第六版》學習筆記-語句JavaScript筆記
- 《JavaScript權威指南第六版》學習筆記-陣列JavaScript筆記陣列
- 《JavaScript權威指南第六版》學習筆記-函式JavaScript筆記函式
- 《HTTPS權威指南》-協議學習筆記HTTP協議筆記
- javascript權威指南閱讀筆記2JavaScript筆記
- 《JavaScript權威指南第六版》學習筆記-詞法結構JavaScript筆記
- HTTP 1.x 學習筆記 —— Web 效能權威指南HTTP筆記Web
- 《JavaScript權威指南第六版》學習筆記-表示式和運算子JavaScript筆記
- 《HTTPS權威指南》- SSL、TLS和密碼學學習筆記HTTPTLS密碼學筆記
- 《JavaScript權威指南第六版》學習筆記-型別、值和變數JavaScript筆記型別變數
- 《http權威指南》學習感想HTTP
- 《Git權威指南》讀書筆記Git筆記
- JavaScript 日期權威指南JavaScript
- 《HTTPS權威指南》-公鑰基礎設施(PKI)學習筆記HTTP筆記
- JavaScript權威指南(6)——物件JavaScript物件
- [譯] JAVASCRIPT 日期權威指南JavaScript
- JavaScript權威指南-陣列JavaScript陣列
- 《JavaScript 學習指南》閱讀筆記(一)JavaScript筆記
- 《IDA Pro權威指南》讀書筆記筆記
- 《IDA pro權威指南》閱讀筆記筆記
- JavaScript權威指南(8)——函式JavaScript函式
- JavaScript權威指南(7)——陣列JavaScript陣列
- javascript權威指南——函式篇JavaScript函式
- JavaScript權威指南(9)——類和模組JavaScript
- 《JAVA學習指南》學習筆記Java筆記
- CUDA C 程式設計權威指南 學習筆記:第二章 CUDA程式設計模型程式設計筆記模型
- JavaScript學習筆記JavaScript筆記
- JavaScript 學習筆記JavaScript筆記
- JavaScript權威指南(2)——詞法結構JavaScript
- 提權學習筆記筆記
- 讀書筆記【JS 權威指南】14.1 計時器筆記JS
- JavaScript權威指南(11)——JavaScript的子集和擴充套件JavaScript套件
- JavaScript權威指南(4)——表示式和運算子JavaScript