基礎瞭解:瀏覽器內置了JavaScript語言的解釋器(實現動畫效果)javascript
1 <!-- 方式一 --> 2 <script type"text/javascript" src="JS文件"></script> 3 4 <!-- 方式二 --> 5 <script type"text/javascript"> 6 Js代碼內容 7 </script>
1 •HTML的head中 2 •HTML的body代碼塊底部(推薦)
基本瞭解:有var表明局部變量,沒有聲明則是全局變量html
1 <script type="text/javascript"> 2 3 // 全局變量 4 name = 'seven'; 5 6 function func(){ 7 // 局部變量 8 var age = 18; 9 10 // 全局變量 11 gender = "男" 12 } 13 </script>
基本瞭解:數據類型有兩類:1)原始類型;2)對象類型:java
1 •原始類型 2 •數字 3 •字符串 4 •布爾值 5 •對象類型 6 •數組 7 •「字典」 8 •...
// null、undefined
null是JavaScript語言的關鍵字,它表示一個特殊值,經常使用來描述「空值」。
undefined是一個特殊值,表示變量未定義。
基本瞭解:JavaScript中不區分整數值和浮點數值,JavaScript中全部數字均用浮點數值表示。python
轉換:
•parseInt(..) 將某值轉換成數字,不成功則NaN
•parseFloat(..) 將某值轉換成浮點數,不成功則NaN
特殊值:
• NaN,非數字。可以使用 isNaN(num) 來判斷。
•Infinity,無窮大。可以使用 isFinite(num) 來判斷。
常量 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( ) 計算正切值。
1 obj.length 長度 2 3 obj.trim() 移除空白 4 obj.trimLeft() 5 obj.trimRight) 6 obj.charAt(n) 返回字符串中的第n個字符 7 obj.concat(value, ...) 拼接 8 obj.indexOf(substring,start) 子序列位置 9 obj.lastIndexOf(substring,start) 子序列位置 10 obj.substring(from, to) 根據索引獲取子序列 11 obj.slice(start, end) 切片 12 obj.toLowerCase() 大寫 13 obj.toUpperCase() 小寫 14 obj.split(delimiter, limit) 分割 15 obj.search(regexp) 從頭開始匹配,返回匹配成功的第一個位置(g無效) 16 obj.match(regexp) 全局搜索,若是正則中有g表示找到所有,不然只找到第一個。 17 obj.replace(regexp, replacement) 替換,正則中有g則替換全部,不然只替換第一個匹配項, 18 $數字:匹配的第n個組內容; 19 $&:當前匹配的內容; 20 $`:位於匹配子串左側的文本; 21 $':位於匹配子串右側的文本 22 $$:直接量$符號
布爾類型僅包含真假,與Python不一樣的是其首字母小寫。 •== 比較值相等 •!= 不等於 •=== 比較值和類型相等 •!=== 不等於 •|| 或 •&& 且
1 obj.length 數組的大小 2 3 obj.push(ele) 尾部追加元素 4 obj.pop() 尾部獲取一個元素 5 obj.unshift(ele) 頭部插入元素 6 obj.shift() 頭部移除元素 7 obj.splice(start, deleteCount, value, ...) 插入、刪除或替換數組的元素 8 obj.splice(n,0,val) 指定位置插入元素 9 obj.splice(n,1,val) 指定位置替換元素 10 obj.splice(n,1) 指定位置刪除元素 11 obj.slice( ) 切片 12 obj.reverse( ) 反轉 13 obj.join(sep) 將數組元素鏈接起來以構建一個字符串 14 obj.concat(val,..) 鏈接數組 15 obj.sort( ) 對數組元素進行排序
•JSON.stringify(obj) 序列化
•JSON.parse(str) 反序列化
•decodeURI( ) URl中未轉義的字符
•decodeURIComponent( ) URI組件中的未轉義字符
•encodeURI( ) URI中的轉義字符
•encodeURIComponent( ) 轉義URI組件中的字符
•escape( ) 對字符串轉義
•unescape( ) 給轉義字符串解碼
•URIError 由URl的編碼和解碼方法拋出
•eval()
•EvalError 執行字符串中的JavaScript代碼
1)、定義正則表達式 •/.../ 用於定義正則表達式 •/.../g 表示全局匹配 •/.../i 表示不區分大小寫 •/.../m 表示多行匹配 JS正則匹配時自己就是支持多行,此處多行匹配只是影響正則表達式^和$,m模式也會使用^$來匹配換行的內容)
1 var pattern = /^Java\w*/gm; 2 var text = "JavaScript is more fun than \nJavaEE or JavaBeans!"; 3 result = pattern.exec(text) 4 result = pattern.exec(text) 5 result = pattern.exec(text)
注:定義正則表達式也能夠 reg= new RegExp()正則表達式
2)、匹配api
JavaScript中支持正則表達式,其主要提供了兩個功能:數組
a. test(string) 檢查字符串中是否和正則匹配(沒有匹配到不會有返回值)瀏覽器
n = 'uui99sdf' reg = /\d+/ reg.test(n) ---> true # 只要正則在字符串中存在就匹配,若是想要開頭和結尾匹配的話,就須要在正則前
b. exec(string) 獲取正則表達式匹配的內容,若是未匹配,值爲null,不然,獲取匹配成功的數組。閉包
容,若是未匹配,值爲null,不然,獲取匹配成功的數組。 非全局模式 獲取匹配結果數組,注意:第一個元素是第一個匹配的結果,後面元素是正則子匹配(正則內容分組匹配) var pattern = /\bJava\w*\b/; var text = "JavaScript is more fun than Java or JavaBeans!"; result = pattern.exec(text) var pattern = /\b(Java)\w*\b/; var text = "JavaScript is more fun than Java or JavaBeans!"; result = pattern.exec(text) 全局模式 須要反覆調用exec方法,來一個一個獲取結果,直到匹配獲取結果爲null表示獲取完畢 var pattern = /\bJava\w*\b/g; var text = "JavaScript is more fun than Java or JavaBeans!"; result = pattern.exec(text) var pattern = /\b(Java)\w*\b/g; var text = "JavaScript is more fun than Java or JavaBeans!"; result = pattern.exec(text)
3)字符串中相關方法dom
obj.search(regexp) 獲取索引位置,搜索整個字符串,返回匹配成功的第一個位置(g模式無效) obj.match(regexp) 獲取匹配內容,搜索整個字符串,獲取找到第一個匹配內容,若是正則是g模式找到所有 obj.replace(regexp, replacement) 替換匹配替換,正則中有g則替換全部,不然只替換第一個匹配項, $數字:匹配的第n個組內容; $&:當前匹配的內容; $`:位於匹配子串左側的文本; $':位於匹配子串右側的文本 $$:直接量$符號
JavaScript中提供了時間相關的操做,時間操做中分爲兩種時間:
•時間統一時間
•本地時間(東8區)
更多操做參見:http://www.shouce.ren/api/javascript/main.html
JavaScript中支持兩個中條件語句,分別是:if (與python用法相似)和 switch
if(條件){ }else if(條件){ }else{ }
switch(name){ case '1': age = 123; break; case '2': age = 456; break; default : age = 777; }
var names = ["alex", "tony", "rain"]; for(var i=0;i<names.length;i++){ console.log(i); console.log(names[i]); }
var names = ["alex", "tony", "rain"]; for(var index in names){ console.log(index); console.log(names[index]); }
while(條件){ // break; // continue; }
try { //這段代碼從上往下運行,其中任何一個語句拋出異常該代碼塊就結束運行 } catch (e) { // 若是try代碼塊中拋出了異常,catch代碼塊中的代碼就會被執行。 //e是一個局部變量,用來指向Error對象或者其餘拋出的對象 } finally { //不管try中代碼是否有異常拋出(甚至是try代碼塊中有return語句),finally代碼塊中始終會被執行。 }
注:主動跑出異常 throw Error('xxxx')
1 // 普通函數 2 function func(arg){ 3 return true; 4 } 5 6 // 匿名函數 7 var func = function(arg){ 8 return "tony"; 9 } 10 11 // 自執行函數 12 (function(arg){ 13 console.log(arg); 14 })('123')
基本瞭解:每一個函數都有本身的做用域(當函數存在時,就已經存在做用域了)
切記:全部的做用域在建立函數且未執行時候就已經存在。
例子:(每一個函數裏的變量是本身的一個域)
function func(){ for(i=0;i<3;i++){ setInterval(function(){ # setInterval定時器不影響函數的運行,定時器有本身的解析器; console.log(i); },1000) } } func(); 輸出的結果是:3(每秒出現一次3) 例子2: <div id="btns"> <input type="button" value="點我1" /> <input type="button" value="點我2" /> <input type="button" value="點我3" /> </div> <script> var btns = document.getElemetById('btns').chidren; for(var j=0;j<btns.length;j++){ var current_input = btns[j]; current_input.onclick = funtion(){ # 1)點擊按鈕執行funtion函數,j在funtion函數做用域裏找不到值; alert(j) # 2)j往父集找,這時for循環已經執行完,j=3; } } </script>
基本瞭解:指嵌套函數被傳入了變量而沒有執行。
閉包是指能夠包含自由(未綁定到特定對象)變量的代碼塊。
「閉包」,是指擁有多個變量和綁定了這些變量的環境的表達式(一般是一個函數),於是這些變量也是該表達式的一部分。
閉包是個函數,而它「記住了周圍發生了什麼」。表現爲由「一個函數」體中定義了「另個函數」
因爲做用域鏈只能從內向外找,默認外部沒法獲取函數內部變量。閉包,在外部獲取函數內部的變量。
function f2(){ var arg= [11,22]; function f3(){ return arg; } return f3; } ret = f2(); ret();
1 function Foo (name,age) { 2 this.Name = name; 3 this.Age = age; 4 this.Func = function(arg){ 5 return this.Name + arg; 6 } 7 } 8 9 var obj = new Foo('alex', 18); 10 var ret = obj.Func("sb"); 11 console.log(ret);
對於上述代碼須要注意:
上述代碼中每一個對象中均保存了一個相同的Func函數,從而浪費內存。使用原型和能夠解決該問題:
1 function Foo (name,age) { 2 this.Name = name; 3 this.Age = age; 4 } 5 Foo.prototype = { 6 GetInfo: function(){ 7 return this.Name + this.Age 8 }, 9 Func : function(arg){ 10 return this.Name + arg; 11 } 12 }