什麼是javascript語言,它的歷史、做用、基本語法(變量、表達式、做用域、各類關鍵字和流程控制語句)、數組處理、json、閉包(closure)。

 

 

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對象的屬性擁有全局做用域

2.  局部做用域 

  和全局做用域相反,局部做用域通常只在固定的代碼片斷內可訪問到,最多見的例如函數內部,因此在一些地方也會看到有人把這種做用域稱爲函數做用域

 

關鍵字:

 

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 是輕量級的文本數據交換格式
  • JSON 獨立於語言
  • JSON 具備自我描述性,更易理解
  •  JSON 使用 JavaScript 語法來描述數據對象,可是 JSON 仍然獨立於語言和平臺。JSON 解析器和 JSON 庫支持許多不一樣的編程語言。

 

 

在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)

官方對閉包的解釋是: 一個擁有許多變量和綁定了這些變量的環境的表達式(一般是一個函數),於是這些變量也是該表達式的一部分
 
閉包的特色:
  1.做爲一個函數變量的一個引用,當函數返回時,其處於激活狀態。
  2.一個閉包就是當一個函數返回時,一個沒有釋放資源的棧區。

  簡單的說,javascript容許使用內部函數---即函數定義和函數表達式位於另外一個函數的函數體內。並且,這些內部函數能夠訪問它們所在的外部函數中聲明的全部局部變量、參數和聲明的其餘內部函數。當其中一個這樣的內部函數在包含它們的外部函數以外被調用時,就會造成閉包。

 

  function closure(){
    var str = "I'm a part variable.";
    return function(){
      alert(str);
    }
  }
  var fObj = closure();
  fObj();

 

 
 
 
 
 
 
 
 
  在上面代碼中,str是定義在函數closure中局部變量,若str在closure函數調用完成之後不能再被訪問,則在函數執行完成後str將被釋放。可是因爲函數closure返回了一個內部函數,且這個返回的函數引用了str變量,致使了str可能會在closure函數執行完成之後還會被引用,因此str所佔用的資源不會被回收。這樣closure就造成了一個閉包。
相關文章
相關標籤/搜索