一、字符集:
Javascript採用Unicode字符集,支持地球上全部在用的語言。
二、區分大小寫:
Javascript區分大小寫,HTML不區分大小寫。
三、空格、換行、格式控制符:
Javascript忽略空格、換行,能夠採用整齊、一致的縮進來造成統一的編碼風格。
四、Unicode轉義序列:
使用6個ASCII字符來表明任意16位Unicode內碼。這些Unicode轉義序列均以\u爲前綴,後跟4個十六進制數。
五、註釋:
//單行註釋的一種方式
/*單行註釋的另外一種方式*/
/*
多行註釋
多行註釋
*/
六、直接量
程序中直接能使用的值
1,2.1,"hello",true,null等
七、標識符
用來對變量或函數進行命名
以字母、_,$開頭
八、保留字
也就是關鍵字,程序中不能使用Javascript中的默認關鍵字
好比break, delete, function, return, etc
九、可選的分號
若是語句獨佔一行,其後的分號能夠省略。
■ 類型、值和變量
十、數據類型
可以表示並被操做的類型稱做數據類型。
十一、變量
用來標識值得符號名稱,能夠經過變量得到值得引用。
十二、數據類型
原始類型primitive type和對象類型object type。
數字、布爾值、數字是原始類型。
null和undefined是兩個特殊的原始類型。
對象是屬性的鍵值對集合。
數組array是特殊的對象,定義了專用的語法。
函數也是特殊的對象,函數可看做相關聯的可執行代碼。
1三、構造函數
使用new新建對象,稱爲構造函數。
構造函數定義的對象能夠看做是一個類。
構造函數用來初始化對象。
1四、系統默認類
Date表明日期的類。
RegExp表示正則表達式的類。
Error表示處理錯誤的類。
1五、內存管理機制
解釋器有本身的垃圾回收機制。
當再也不有任何引用指向一個對象,自動回收佔用的內存資源。
1六、可變類型和不可變類型
不可變類型值不能夠修改,可變類型值能夠修改。
對象和數組屬於可變類型。
數字、布爾值、null和undefined屬於不可變類型。
字符串雖然能夠看做是字符數組,但它是一個不可變類型。
1七、數據類型轉換
能夠自由地進行數據類型轉換。
在指望使用字符串的地方使用數字,會將數字自動轉換成字符串。
1八、變量是無類型的
變量能夠被賦予任何類型的值
一樣一個變量能夠從新賦予不一樣類型的值
全局變量和函數內變量
1九、整型直接量
● 十進制整型直接量
● 十六進制整型直接量,即以16爲基數,以"0x"或"0X"開頭,a-f或A-F表示10-15,好比0xff,就至關於15*16 + 15 = 255
● 有些支持八進制,以0開頭,推薦不使用
20、浮點型直接量
● 包含整數部分、小數點、小數部分
● 還能夠用指數計數法表示浮點,即在實數後跟字母e或E,3.02e23,表示3.02*10的23次方
2一、算術運算符
● +, -, *, /,%
● Math對象
Math.pow(2,5) 2的5次冪
Math.round(.6) 四捨五入
Math.ceil(.6)向上求整
Math.floor(.6)向下求整
Math.abs(-2)絕對值
Math.max(x, y, z)
Math.min(x, y)
Math.random()0和1之間的隨機數
Math.PI
Math.E 天然對數的底數e
Math.sqrt(3)平方根
Math.pow(3, 1/3)立方根
Math.sin(0), Math.cos, Math.atan
Math.log(10) 10的天然對數
...
2二、算術溢出
溢出分爲overflow, underflow,被零整除
溢出不會報錯
Infinity表示正的無窮大
-Infinity表示負的無窮大
underflow是無限接近於零,分爲0和-0
0處於零,報NaN,用來表示非數字值
2三、判斷非數字值
x!=x,當x且僅當x爲NaN的時候,才爲true
isNaN()函數也是類似的道理
isFine(),當參數不爲NaN,Infinity,-Infinity的時候返回true
2四、日期和時間
new Date(2010,0,1)
new Date(2010,0,1,17,10,30)
new Date()
getFullYear()
getMonth()
getDate()
getHours()
getUTCHours()
2五、字符串
16位值組成,不可變,有序,序列
字符串用來表示文本
有長度length,索引從0開始
Javascript並無表示單個字符的"字符型"
單引號中能夠包含雙引號
雙引號中能夠包含單引號
+字符串鏈接
length屬性
charAt(0)
charAt()
subString(1,4)2到4號位值上的字符
slice(1,4)2到4號位值上的字符
slice(-2)最後2個字符
indexOf("1")
lastIndexOf("1")
split(",")
replace("","")
toUpperCase()
2六、轉義
\n表示另起一行
\反斜線轉義
2七、RegExp()函數
兩條斜線之間的文本構成了正則表達式
/^HTML/以HTK開始的字符串
2八、布爾值
if(o),當o爲undefined, null, 0, -0, NaN爲時爲false
2九、null和undefined
用來描述空值,是關鍵字
對null執行typeof返回object
看成爲參數傳入函數,推薦使用null。
undefined是變量的一種取值,代表變量沒有被初始化。
查詢對象屬性或數組元素返回undefined,表示屬性或元素不存在。
函數沒有返回值,返回undefined。
引用沒有提供函數形參對應實參時會獲得undefined。
30、全局對象
● 全局屬性:undefined, Infinity, NaN
● 全局函數:isNaN, parseInt, eval
● 全局對象:Date, Regexp, String, Object, Array
3一、不可變原始值
undefined, null, 布爾值, 數字和字字符串,是原始值,不可更改。
原始值的比較是值的比較。
3二、可變的對象引用
對象是可變的,對象的值是能夠修改。
對象的比較不是值得比的比較
3三、返回true的情形
null==undefined
"0"==0
0==false
"0"==false
3四、一個值能夠轉換成另一個值並不意味着兩個值相等
if(undefined)返回false,並不說明undefined和false相等
3五、顯式類型轉換
使用Boolean(), Number(), String(), Object()等函數。
Number("3")
String(false)
Boolean([])
Object(3)
null和undefined不能轉化爲對象
3六、隱式類型轉換
+ 做爲字符串鏈接,把其中一個非字符串轉換爲字符串。
!將操做數轉化爲布爾值並取反
3七、switch語句
switch(n){
case 1:
//語句
break;
case 2:
//語句
break;
default:
//語句
break;
}
3八、while
var count = 0;
while(count < 5){
console.log(count);
count++;
}
3九、do/while
funnction printArray(a){
var len = a.length, i = 0;
if(len == 0){
console.log("empty");
} else {
do {
console.log(a[i]);
} while (++i < len);
}
}
40、for
for(var count = 0; count < 10; count++)
var i,j;
for(i=0, j=10; i < 10; i++, j--)
4一、for/in
for(var pi in o)
4二、break退出循環
for(var i = 0; i < a.length; i++){
if(a[i]==target)
break;
}
4三、break 標籤, 退出非就近的循環
var matrix = getData(); //獲得一個二維數組
var sum = 0, success = false;
compute_sum: if(matrix){
for(var x = 0; x < matrix.length; x++){
var row = matrix[x];
if(!row) break compute_sum;
for(var y = 0; y < row.length; y++){
var cell = row[y];
if(isNan(cell)) break compute_sum;
sum += cell;
}
}
success = true;
}
4四、continue
for(var i = 0; i < data.length; i++){
if(!data[i]) continue;
}
continue也可跟標籤
4五、throw
function factorial(x){
if(x < 0){
throw new Error("");
}
}
4六、try/catch/finally
try{
}
catch(ex){
alert(ex);
}
4六、with
with(document.forms[0]){
name.value = "";
}
把document.forms[0]臨時掛在做用域上。
4七、debugger 臨時調試
function f(o){
if(o === undefined) debugger;
}
4八、對象
屬性的無序集合。
每一個屬性都是一個鍵值對。
屬性名是字符串,從這點上能夠把對象當作字符串到值得映射。
對象都有一個原型對象屬性,實現"原型式繼承",動態添加屬性和方法。
對象的屬性名不能重複。
4九、對象直接量建立對象
var empty = {};
var book = {
"main title": "" //屬性名有空格必須用引號
}
保留字做爲屬性名,必須用引號。
最後一個屬性的屬性值後的逗號能夠省略。
50、經過new建立對象
var o = new Object();
var a = new Array();
var d = new Date();
var r = new RegExp("js");
5一、Object.create()建立對象
var o1 = Object.create({x:1,y:2});
//建立普通的空對象
var o = Object.create(Object.prototype);
//等同於
{}和new Object()
5二、經過原型繼承建立一個新對象
function(p){
if(p == null)
throw TypeError();
if(Object.create)
return Object.create(p);
var t = typeof p;
if(t !== "object" && t !=="function")
thrwo TypeError();
function f(){}
f.prototype = p;
return new f();
}
5三、對象屬性的查詢和設置
給null或undefined設置屬性值會報類型錯誤
有一些屬性是隻讀的,也不能設置。
var a = book.author;
var t = book["main title"];
book.edition=6;
book["main title"] ="";
查詢對象並不存在的屬性不拋異常拋undefined:book.x; // undefined
對象不存在拋異常:book.x.length
//加判斷防止拋異常或undefined
var len = undeinfed;
if(book){
if(book.x){
len = book.x.length;
}
}
//一種更簡潔的寫法
var len = book && book.x && book.x.length;
5四、刪除對象屬性
delete book.author;
delete book["main title"];
delete只能刪除自有屬性,不能刪除繼承屬性。
刪除成功或沒有任何反作用返回true。
5五、檢測對象屬性
var o = {x:1};
"x" in o
o.hasOwnProperty("x")
5六、遍歷對象屬性
var o = {x:1, y:2};
for(p in o){
console.log(p);
}
還能夠對對象屬性過濾。
for(p in o){
if(!o.hasOwnProperty(p)) //跳過繼承的屬性
continue;
}
for(p in o){
if(typeof o[p] === "function"){
continue;
}
}
5七、對象屬性getter和setter
var o = {
data_prop:value,
get accessor_prop(){},
set accessor_prop(value){}
}
5八、對象屬性的特性
用來表述屬性的屬性。
Object.getOwnPropertyDescriptor({x:1},"x");
Object.getOwnPropertyDescriptor(random, "someprop");
5九、對象的原型屬性
在實例對象建立以前就設置好的。
Object.prototype
查看對象的原型Object.getPrototypeOf(把對象做爲實參)
檢測p是不是o的原型:p.isPrototypeOf(o)
60、對象的類屬性
字符串,表示對象的類型信息
toString()方法查詢它
6一、對象的可擴展性
表示是否能夠給對象添加新屬性
Object.isExtensible()
6二、序列化對象
將對象與字符串之間進行轉換。
把對象轉換爲字符串用:JSON.stringfy()
把字符串轉換爲對象用:JSON.parse()
6三、對象的方法
全部的對象從Object.prototype繼承屬性。
toString()
toLocalString()
valueOf()
6四、數組
數組是值的有序集合。
每一個值叫數組元素。
每一個元素在數組中的位置就是索引。
6五、建立數組
var a = [];
數組元素能夠是直接量、表達式、對象
var a = new Array();
6六、數組元素讀寫
var a = ["world"];
var value = a[0];
a[1] = 3;
6七、稀疏數組
數組的長度大於元素個數。
a = new Array(5);
6八、數組元素的添加和刪除
a = [];
a[0]="";
a[1]="";
a.push("");
delete a[1]索引爲1的位置不能再有元素
6九、數組遍歷
for(var i =0; i < keys.length; i++)
for(var i = 0, len = keys.length; i < len; i++)
for(var index in sparsArray)
data.forEach()
70、多維數組
var talbe = new Array(10);
for(var i = 0; i < table.length; i++){
tables[i] = new Array(10);
for(var row = 0; row < table.legnth; row++){
for(col=0; col < tables[row].lenght; col++){
table[row][col] = row*col;
}
}
}
7一、數組方法
a.join("")
a.reverse()
s.sort()
a.concat()
Array.slice()獲取數組片斷
Array.splice向數組插入或刪除元素
push()和pop()
shift()和unshift()
7二、ECMAScript5中的數組方法
forEach(),map(), filter(), every(), some(), reduce(), reduceRight(),indexOf(), lastIndexOf()
7三、判斷數組類型
Array.isArray([]), Array.isArray({})
7四、函數
函數是一段代碼。
函數的形參像局部變量同樣工做。
函數調用會爲形參提供實參的值。
每次調用會有一個上下文。
函數掛在對象上,就是對象方法。
調用對象方法,上下文就是該對象。
初始化一個新建立對象的函數交構造函數。
函數就是對象,能夠把函數賦值給變量,把函數做爲參數,也可把函數做爲屬性值。
函數能夠被包含在函數內,外層的函數就是做用域,內層的函數可使用做用域內的變量,這就是閉包。
7五、函數做爲值
函數能夠賦值給變量,賦值給對象的屬性,賦值給數組元素。
//賦值給變量
function square(x){
return x*x;
}
var s = square;
//賦值給屬性
var o = {
square: function(x){
return x * x;
}
}
o.squre(6);
//賦值給數組元素
var a = [function(x){return x*x;},20];
a[0](a[1]);
7六、自定義函數屬性
函數是特俗的對象,能夠擁有屬性。
fn.counter = 0;
function fn(){
return fn.counter++;
}
7七、call()和apply()方法
以對象o的方法來調用函數f。
f.call(o)
f.apply(o)
f.call(o, 1, 2);
f.apply(o, [1, 2])
7八、Function()構造函數
var f = new Function("x", "y", "return x*y;");
7九、類
基於原型的繼承機制。
類是動態可繼承。
類的全部實例對象都從同一個原型對象上繼承屬性。
80、類和構造函數
構造函數用來初始化新建立的對象。
new調用構造函數。
調用構造函數就是把prototype屬性用做新對象的原型。
function Range(from, to){
this.from = from;
this.to = to;
}
Range.prtotype = {
includes: function(x){
return this.from <=x && x <= this.to;
},
foreach: function(f){
for(var x = Math.ceil(this.from); x <= this.to; x++)
f(x);
}
};
8一、類原型的constructor屬性
var F = function(){};
var p = F.prototype;
var c = p.constructor;
c===F
8二、類的繼承
class Animal{
constructor(voice){
this.voice = voice || '';
}
speak(){
display(this.voice);
}
}
class Cat extends Animal{
constructor(name, color){
super('Meow')
this.name = name
this.color = color
}
}
var fulffy = new Cat('fluffy', 'White');
fluffy.speak();正則表達式