JavaScript一種直譯式腳本語言,是一種動態類型、弱類型、基於原型的語言,內置支持類型。它的解釋器被稱爲JavaScript引擎,爲瀏覽器的一部分,普遍用於客戶端的腳本語言,最先是在HTML(標準通用標記語言下的一個應用)網頁上使用,用來給HTML網頁增長動態功能。javascript
ECMAScript,描述了該語言的語法和基本對象html
文檔對象模型(DOM),描述處理網頁內容的方法和接口。java
瀏覽器對象模型(BOM),描述與瀏覽器進行交互的方法和接口。正則表達式
<!-- 方式一 -->
<script type"text/javascript" src="JS文件"></script>
<!-- 方式二 -->
<script type"text/javascript">
Js代碼內容
</script>
對於以上問題其實有兩個可選項:api
(1)存在在html文件中的head部分數組
(2)存在在body代碼塊底部瀏覽器
因爲Html代碼是從上到下執行,若是Head中的js代碼耗時嚴重,就會致使用戶長時間沒法看到頁面,若是放置在body代碼塊底部,那麼即便js代碼耗時嚴重,也不會影響用戶看到頁面效果,只是js實現特效慢而已。閉包
JavaScript中局部變量必須一個 var 開頭,若是未使用var,則默認表示聲明的是全局變量。dom
<script type="text/javascript"> // 全局變量 name = 'wencheng'; function func(){ // 局部變量 var age = 16; // 全局變量 gender = "男" } </script>
JavaScript中代碼註釋:ide
JavaScript 中的數據類型分爲原始類型和對象類型:
其中 數字、布爾值、null、undefined、字符串是不可變
// null、undefined null是JavaScript語言的關鍵字,它表示一個特殊值,經常使用來描述「空值」。 undefined是一個特殊值,表示變量未定義。
1).數字類型
var a = 1; var b = 1.1;
JavaScript中不區分整數值和浮點數值,JavaScript中全部數字均用浮點數值表示。
轉換:
特殊值:
更多數值計算:
常量 Math.E 常量e,天然對數的底數。 Math.LN10 10的天然對數。 Math.LN2 2的天然對數。 Math.LOG10E 以10爲底的e的對數。 Math.LOG2E 以2爲底的e的對數。 Math.PI 常量figs/U03C0.gif。 Math.SQRT1_2 2的平方根除以1。 Math.SQRT2 2的平方根。 靜態函數 Math.abs( ) 計算絕對值。 Math.acos( ) 計算反餘弦值。 Math.asin( ) 計算反正弦值。 Math.atan( ) 計算反正切值。 Math.atan2( ) 計算從X軸到一個點的角度。 Math.ceil( ) 對一個數上舍入。 Math.cos( ) 計算餘弦值。 Math.exp( ) 計算e的指數。 Math.floor( ) 對一個數下舍人。 Math.log( ) 計算天然對數。 Math.max( ) 返回兩個數中較大的一個。 Math.min( ) 返回兩個數中較小的一個。 Math.pow( ) 計算xy。 Math.random( ) 計算一個隨機數。 Math.round( ) 舍入爲最接近的整數。 Math.sin( ) 計算正弦值。 Math.sqrt( ) 計算平方根。 Math.tan( ) 計算正切值。
2)字符串類型
var name = 'zhaowencheng'; var name = String("zhaowencheng"); var name_age = String(16);
字符串是由字符組成的數組,但在JavaScript中字符串是不可變的:能夠訪問字符串任意位置的文本,可是JavaScript並未提供修改已知字符串內容的方法。
常見功能:
obj.length 長度 obj.trim() 移除空白 obj.trimLeft() obj.trimRight) obj.charAt(n) 返回字符串中的第n個字符 obj.concat(value, ...) 拼接 obj.indexOf(substring,start) 子序列位置 obj.lastIndexOf(substring,start) 子序列位置 obj.substring(from, to) 根據索引獲取子序列 obj.slice(start, end) 切片 obj.toLowerCase() 大寫 obj.toUpperCase() 小寫 obj.split(delimiter, limit) 分割 obj.search(regexp) 從頭開始匹配,返回匹配成功的第一個位置(g無效) obj.match(regexp) 全局搜索,若是正則中有g表示找到所有,不然只找到第一個。 obj.replace(regexp, replacement) 替換,正則中有g則替換全部,不然只替換第一個匹配項, $數字:匹配的第n個組內容; $&:當前匹配的內容; $`:位於匹配子串左側的文本; $':位於匹配子串右側的文本 $$:直接量$符號
3)布爾類型(Boolean)
布爾(邏輯)只能有兩個值:true 或 false。 var x=true var y=false
布爾類型僅包含真假,與Python不一樣的是其首字母小寫。
4)數組
JavaScript中的數組相似於Python中的列表
常見功能:
obj.length 數組的大小 obj.push(ele) 尾部追加元素 obj.pop() 尾部獲取一個元素 obj.unshift(ele) 頭部插入元素 obj.shift() 頭部移除元素 obj.splice(start, deleteCount, value, ...) 插入、刪除或替換數組的元素 obj.splice(n,0,val) 指定位置插入元素 obj.splice(n,1,val) 指定位置替換元素 obj.splice(n,1) 指定位置刪除元素 obj.slice( ) 切片 obj.reverse( ) 反轉 obj.join(sep) 將數組元素鏈接起來以構建一個字符串 obj.concat(val,..) 鏈接數組 obj.sort( ) 對數組元素進行排序
1)、序列化
2)、轉義
3)、eval
JavaScript中的eval是Python中eval和exec的合集,既能夠編譯代碼也能夠獲取返回值。
4)、正則表達式
JavaScript中支持正則表達式,其主要提供了兩個功能:
注:定義正則表達式時,「g」、「i」、「m」分別表示全局匹配,忽略大小寫、多行匹配。
5)、時間處理
JavaScript中提供了時間相關的操做,時間操做中分爲兩種時間:
http://www.shouce.ren/api/javascript/main.html
運算符 = 用於賦值。
運算符 + 用於加值。
1.算術運算符
2.賦值運算符
3.比較運算符
4.邏輯運算符
一、條件語句
JavaScript中支持兩個中條件語句,分別是:if 和 switch
if 語句:
if(條件){ }else if(條件){ }else{ }
switch語句
switch(name){ case '1': age = 123; break; case '2': age = 456; break; default : age = 777; } switch語句
二、循環語句
JavaScript中支持三種循環語句,分別是:
1).
var names = ["alex", "tony", "rain"]; for(var i=0;i<names.length;i++){ console.log(i); console.log(names[i]); }
2).
var names = ["alex", "tony", "rain"]; for(var index in names){ console.log(index); console.log(names[index]); }
3).
while(條件){ // break; // continue; }
三、異常處理
try { //這段代碼從上往下運行,其中任何一個語句拋出異常該代碼塊就結束運行 } catch (e) { // 若是try代碼塊中拋出了異常,catch代碼塊中的代碼就會被執行。 //e是一個局部變量,用來指向Error對象或者其餘拋出的對象 } finally { //不管try中代碼是否有異常拋出(甚至是try代碼塊中有return語句),finally代碼塊中始終會被執行。 }
主動拋出異常 throw Error('xxxx')
一、基本函數
JavaScript中函數基本上能夠分爲一下三類:
// 普通函數 function func(arg){ return true; } // 匿名函數 var func = function(arg){ return "tony"; } // 自執行函數 (function(arg){ console.log(arg); })('123')
二、做用域
JavaScript中每一個函數都有本身的做用域,當出現函數嵌套時,就出現了做用域鏈。當內層函數使用變量時,會根據做用域鏈從內到外一層層的循環,若是不存在,則異常。
切記:全部的做用域在建立函數且未執行時候就已經存在。
function f2(){ var arg= 111; function f3(){ console.log(arg); } return f3; } ret = f2(); ret();
關於做用域有一下幾點:
1.JavaScript中無塊級做用域
2.JavaScript採用函數做用域
3.JavaScript的做用域鏈
4.JavaScript的做用域鏈執行前已建立
5.聲明提早 :JavaScript的函數在被執行以前,會將其中的變量所有聲明,而不賦值。
三、閉包
「閉包」,是指擁有多個變量和綁定了這些變量的環境的表達式(一般是一個函數),於是這些變量也是該表達式的一部分。
閉包是個函數,而它「記住了周圍發生了什麼」。表現爲由「一個函數」體中定義了「另個函數」
因爲做用域鏈只能從內向外找,默認外部沒法獲取函數內部變量。閉包,在外部獲取函數內部的變量。
function f2(){ var arg= [11,22]; function f3(){ return arg; } return f3; } ret = f2(); ret();
四、面向對象
function Foo (name,age) { this.Name = name; this.Age = age; this.Func = function(arg){ return this.Name + arg; } } var obj = new Foo('zhaowencheng', 16); var ret = obj.Func("learnning"); console.log(ret);
上述代碼中每一個對象中均保存了一個相同的Func函數,從而浪費內存。以下解決該問題:
function Foo (name,age) { this.Name = name; this.Age = age; } Foo.prototype = { GetInfo: function(){ return this.Name + this.Age }, Func : function(arg){ return this.Name + arg; } }