JavaScript一種直譯式腳本語言,是一種動態類型、弱類型、基於原型的語言,內置支持類型。javascript
歷史:java
它最初由Netscape的Brendan Eich設計。JavaScript是甲骨文公司的註冊商標。Ecma國際以JavaScript爲基礎制定了ECMAScript標準。JavaScript也能夠用於其餘場合,如服務器端編程。完整的JavaScript實現包含三個部分:ECMAScript,文檔對象模型,瀏覽器對象模型。Netscape在最初將其腳本語言命名LiveScript,後來Netscape在與Sun合做以後將其更名爲JavaScript。JavaScript最初受Java啓發而開始設計的,目的之一就是「看上去像Java」,所以語法上有相似之處,一些名稱和命名規範也借自Java。但JavaScript的主要設計原則源自Self和Scheme。JavaScript與Java名稱上的近似,是當時Netscape爲了營銷考慮與Sun微系統達成協議的結果。爲了取得技術優點,微軟推出了JScript來迎戰JavaScript的腳本語言。爲了互用性,Ecma國際(前身爲歐洲計算機制造商協會)建立了ECMA-262標準(ECMAScript)。二者都屬於ECMAScript的實現。儘管JavaScript做爲給非程序人員的腳本語言,而非做爲給程序人員的腳本語言來推廣和宣傳,可是JavaScript具備很是豐富的特性。編程
發展初期,JavaScript的標準並未肯定,同期有Netscape的JavaScript,微軟的JScript和CEnvi的ScriptEase三足鼎立。1997年,在ECMA(歐洲計算機制造商協會)的協調下,由Netscape、Sun、微軟、Borland組成的工做組肯定統一標準:ECMA-262。json
做用:數組
一、是一種解釋性腳本語言(代碼不進行預編譯)。瀏覽器
二、主要用來向HTML(標準通用標記語言下的一個應用)頁面添加交互行爲。服務器
三、能夠直接嵌入HTML頁面,但寫成單獨的js文件有利於結構和行爲的分離。閉包
四、跨平臺特性,在絕大多數瀏覽器的支持下,能夠在多種平臺下運行(如Windows、Linux、Mac、Android、iOS等)編程語言
基本語法(變量、表達式、做用域、各類關鍵字和流程控制語句)函數
變量:與代數同樣,JavaScript 變量可用於存放值(好比 x=2)和表達式(好比 c=a+b)。
變量可使用短名稱(好比 a 和 b),也可使用描述性更好的名稱(好比 name、height)。
注意:變量必須以字母開頭
變量也能以 $ 和 _ 符號開頭(不過咱們不推薦這麼作)
變量名稱對大小寫敏感(y 和 Y 是不一樣的變量)
提示:JavaScript 語句和 JavaScript 變量都對大小寫敏感。
表達式: javascript表達式在定義完變量後,就能夠進行賦值、改變和計算等一系列操做。這一過程一般又由表達式來完成。
做用域:做用域就是變量與函數的可訪問範圍,即做用域控制着變量與函數的可見性和生命週期。在JavaScript中,變量的做用域有全局做用域和局部做用域兩種
1. 全局做用域:在代碼中任何地方都能訪問到的對象擁有全局做用域
(1)最外層函數和在最外層函數外面定義的變量擁有全局做用域
(2)全部末定義直接賦值的變量自動聲明爲擁有全局做用域
(3)全部window對象的屬性擁有全局做用域
和全局做用域相反,局部做用域通常只在固定的代碼片斷內可訪問到,最多見的例如函數內部,因此在一些地方也會看到有人把這種做用域稱爲函數做用域
關鍵字:
Javascript關鍵字列表:
break | delete | function | return | typeof |
case | do | if | switch | var |
catch | else | in | this | void |
continue | false | instanceof | throw | while |
debugger | finally | new | true | with |
default | for | null | try |
Javascript將來關鍵字(Javascript Future Reserved Words)
Javascript還有一些將來關鍵字,這些字雖然如今沒有用到Javascript語言中,可是未來有可能用到。
Javascript將來關鍵字列表:
abstract | double | goto | native | static |
boolean | enum | implements | package | super |
byte | export | import | private | synchronized |
char | extends | int | protected | throws |
class | final | interface | public | transient |
const | float | long | short | volatile |
流程控制語句
1.if語句的語法結構
if (條件表達式A) {
//條件表達式A爲true,所執行的代碼塊
} else if(條件表達式B) {
//條件表達式B爲true,所執行的代碼塊
} else {
// 條件表達式A和條件表達式B都爲false,所執行的代碼塊
}
2.switch語句的語法結構
switch (表達式) {
case 值1 :
//表達式與值1匹配時,所執行的代碼塊
break;
case 值2 :
//表達式與值2匹配時,所執行的代碼塊
break;
default :
//全部case值都與表達式不匹配時,所執行的代碼塊
}
3.for語句的語法結構
for (初始化語句; 循環判斷條件; 循環執行語句) {
//循環體
}
4.while語句的語法結構
while (循環判斷條件) {
//循環體
}
5.do…while語句的語法結構
do {
//循環體
} while (循環判斷條件);
數組處理
一、數組的建立
var arrayObj = new Array(); //建立一個數組
var arrayObj = new Array([size]); //建立一個數組並指定長度,注意不是上限,是長度
注意:雖然這種方法建立數組指定了長度,但實際上全部狀況下數組都是變長的,也就是說即便指定了長度,仍然能夠將元素存儲在規定長度之外的,這時長度會隨之改變。
var arrayObj = new Array([element0[, element1[, ...[, elementN]]]]); 建立一個數組並賦值
二、數組的元素的訪問
var testGetArrValue=arrayObj[1]; //獲取數組的元素值
arrayObj[1]= "這是新值"; //給數組元素賦予新的值
三、數組元素的添加
arrayObj. push([item1 [item2 [. . . [itemN ]]]]);// 將一個或多個新元素添加到數組結尾,並返回數組新長度
arrayObj.unshift([item1 [item2 [. . . [itemN ]]]]);// 將一個或多個新元素添加到數組開始,數組中的元素自動後移,返回數組新長度
arrayObj.splice(insertPos,0,[item1[, item2[, . . . [,itemN]]]]);//將一個或多個新元素插入到數組的指定位置,插入位置的元素自動後移,返回""。
四、數組元素的刪除
arrayObj.pop(); //移除最後一個元素並返回該元素值
arrayObj.shift(); //移除最前一個元素並返回該元素值,數組中元素自動前移
arrayObj.splice(deletePos,deleteCount); //刪除從指定位置deletePos開始的指定數量deleteCount的元素,數組形式返回所移除的元素
五、數組的截取和合並
arrayObj.slice(start, [end]); //以數組的形式返回數組的一部分,注意不包括 end 對應的元素,若是省略 end 將複製start 以後的全部元素
arrayObj.concat([item1[, item2[, . . . [,itemN]]]]); //將多個數組(也能夠是字符串,或者是數組和字符串的混合)鏈接爲一個數組,返回鏈接好的新的數組
六、數組的拷貝
arrayObj.slice(0); //返回數組的拷貝數組,注意是一個新的數組,不是指向
arrayObj.concat(); //返回數組的拷貝數組,注意是一個新的數組,不是指向
七、數組元素的排序
arrayObj.reverse(); //反轉元素(最前的排到最後、最後的排到最前),返回數組地址
arrayObj.sort(); //對數組元素排序,返回數組地址
八、數組元素的字符串化
arrayObj.join(separator); //返回字符串,這個字符串將數組的每個元素值鏈接在一塊兒,中間用 separator 隔開。
toLocaleString 、toString 、valueOf:能夠看做是join的特殊用法,不經常使用
JSON:
JSON:JavaScript 對象表示法(JavaScript Object Notation)。 是存儲和交換文本信息的語法。
特色:
在JSON中,有兩種結構:對象和數組。
1. 一個對象以 " { " 開始," } " 結束。每一個"名稱"後跟一個" : " ;"名稱:值" 組」之間運用 " , " 隔開。名稱用 雙引號 包起來;值若是是字符串則必須用 雙引號 ,數值型則不須要。例如:
var obj={"name":"Rue","age":21,"hobby":"running"};
2. 數組是值(value)的有序集合。一個數組以" [ " 開始," ] " 結束。值之間運用 " , " 隔開。例如:
var array=[
{"name":"Rue","age":21,"hobby":"running"},
{"name":"Sandra","age":20,"hobby":"reading"}
];
在數據傳輸流程中,json是以文本,即字符串的形式傳遞的,而JS操做的是JSON對象,因此,JSON對象和JSON字符串之間的相互轉換是關鍵,例如:
JSON字符串:var str_obj1 = ' { "name": "Rue", "age": 21} ';
JSON對象:var str_obj2 = {"name": "Rue", "age": 21 };
轉換:
一、JSON字符串轉換爲JSON對象 :運用 eval() 函數、parseJSON() 、或者 parse()
要運用上面的str_obj1 ,必須運用下面的要領先轉化爲JSON對象:
var final_obj = eval('(' + str + ')'); //由JSON字符串轉換爲JSON對象 或者
var final_obj = str.parseJSON(); //由JSON字符串轉換爲JSON對象 或者
var final_obj = JSON.parse(str); //由JSON字符串轉換爲JSON對象
讀取方式:alert(final_obj .name); alert(final_obj .age);
注意:若是final_obj 原本就是一個JSON對象,那麼運用 eval()函數轉換後(哪怕是屢次轉換)仍是JSON對象,可是運用 parseJSON()函數處理後會有錯誤(拋出語法異常)。
二、JSON對象轉換爲JSON字符串 :運用 toJSONString()或者全局要領 JSON.stringify(),例如:
var final_obj =str_obj2 .toJSONString(); //將JSON對象轉化爲JSON字符 或者
var final_obj =JSON.stringify(str_obj2 ); //將JSON對象轉化爲JSON字符
注意:上面的多個要領中,除了eval()函數是js自帶的以外,其餘的多個要領都來自json.js包。新版本的 JSON 修改了 API,將 JSON.stringify() 和 JSON.parse() 兩個要領都注入到了 Javascript 的內建對象裏面,前者變成了 Object.toJSONString(),然後者變成了 String.parseJSON()。若是提示找不到toJSONString()和parseJSON()要領,則說明您的json包版本過低。
閉包(closure)
function closure(){
var str = "I'm a part variable.";
return function(){
alert(str);
}
}
var fObj = closure();
fObj();
|