唐太宗 李世民 殺了大哥 和弟弟 登上的皇位 一我的當皇帝css
排他性是指一種物品具備能夠阻止其餘人使用該物品的特性。html
排他性思想:node
在程序中但凡是遇到只讓本身怎麼樣,不讓別人怎麼樣的效果,都要用到排他性思想。而排他性思想每每須要使用到for循環進行羣控制。面試
步驟:必定是先排他,再控制本身。數組
排他思想: 首先先清除全部人, 再剩下我本身。瀏覽器
<script>
var btns = document.getElementsByTagName("button");
for(var i=0;i<btns.length;i++) { // 遍歷全部的按鈕
btns[i].onclick = function() {
// 當咱們每次點擊, 首先先清除全部人
for(var j=0;j<btns.length;j++) {
btns[j].className = "";
}
// 剩下我本身
this.className = "current";
}
}
</script>
var index = 10; 變量app
var arr = [];dom
arr.index = 20; // 自定義屬性ide
本質上,index 和 arr.index 他們 同樣 的, 都是變量 。函數
index 變量 miss 女士 自由自在的
arr.index 屬性 mrs 夫人 index 屬於arr 只有在arr 纔可使用
咱們要千方百計的知道,當前盒子的索引號
1 <script>
2 var btns = document.getElementsByTagName("button"); // 獲得了全部的btn
3 var lis = document.getElementsByTagName("li"); // 獲得了全部的btn
4 // alert(lis.length);
5 for(var i=0; i<btns.length;i++) { // 遍歷按鈕
6 // 給每一個小按鈕指定一個 索引號
7 btns[i].index = i;
8 btns[i].onclick = function() {
9 // alert(this.index); 索引號 按鈕
10 // 清除全部人,剩下我本身 li 也是所有都隱藏 剩下 當前li
11 for(var j = 0;j < btns.length; j++)
12 {
13 btns[j].className = "";
14 lis[j].className = "";
15 }
16 this.className = "current"; // 單擊的對象
17 lis[this.index].className = "show"; // 留下當前的一個 li this.index
18 }
19 }
20 </script>
這個語句和 if else if else if ..... 相等的,可是switch 的效率更好,優先考慮使用。 break;
語法格式:
1 switch(參數) {
2 case 「參數1」:
3 語句;
4 break; // 退出的意思
5 case 「參數2」:
6 語句;
7 break; // 退出的意思
8 .....
9 default: // 默認的 能夠寫也能夠不寫
10 語句;
11 }
最終,就是從多個 case 裏面選擇一個來執行, 由於有break 退出switch,所以只能執行一次。效率更高。 若是case參數裏面都沒有,就 執行 default 語句。
注意: 裏面的漢字必需要加引號哦!
下拉列表 不一樣於其餘的表單,由於他有多個值, 可是隻能選擇一個 ,
這是時候咱們用 選擇改變事件 onchange change 改變
select.onchange = function() {}
後面的屏幕縮放事件也是用onchange
window.onload 是等到頁面徹底加載完成纔會觸發事件,頁面徹底下載後,頁面中全部的DOM元素都是能夠訪問的.這種方式有一個很大的優勢:不用考慮DOM元素加載的順序。
<script>
window.onload = function() {
var demo = document.getElementById("demo");
demo.style.backgroundColor = "red";
}
</script>
push 推 送 從後面推
push() 從後面追加 內容
push() 方法可向數組的末尾添加一個或多個元素,並返回新的數組長度。
var arr = [1,3,5,7]; // 原數組
arr.push(9); //把 9 添加 arr 的最後面
console.log(arr); // 13579
a.push(b) 把 b 添加到 a 的最後面 同時 a 變了
<script>
var arr = [1,3,5,7]; // 原數組
arr.push(9); //把 9 添加 arr 的最後面
console.log(arr); // 13579
console.log(arr.push(11)); // 返回的是數組的長度 6
console.log(arr); // 1.3.5.7.9.11
</script>
unshift() 方法可向數組的開頭添加一個或更多元素,並返回數組新的長度
// unshift 組
var arr1 = ["a","b","c"];
arr1.unshift("你好");
console.log(arr1); // ["你好", "a", "b", "c"]
console.log(arr1.unshift("今天")); // 返回數組的長度 5
咱們能夠添加內容,也能夠刪除內容。
pop() 移除最後一個元素 和 push 正好相反
返回值 是 返回最後一個值
並且它每次,只刪除一個,所以他的括號裏面是沒有參數的。
返回的是,刪除的最後一個元素
#ff0000 rgb
// pop() 刪除最後一個元素 而且返回最後一個值
var arrpop = [1,2,3,4,5];
arrpop.pop(); // 刪除一次 把 5刪掉了 [1,2,3,4]
console.log(arrpop); // [1,2,3,4]
console.log(arrpop.pop()); // 把 4 刪掉 剩下 [1,2,3] 返回的是 4
console.log(arrpop); // [1,2,3]
shift 和 unshift 正好相反
shift 刪除第一個 上檔
unshift 從第一個開始添加
shift() 方法用於把數組的第一個元素從其中刪除,並返回第一個元素的值
// shift 刪除第一個元素 而且返回第一個值
var arrshift = ["a","b","c"];
console.log(arrshift.shift()); // a
console.log(arrshift); // [b,c]
arrshift.shift(); // 吧b 刪掉了, 而且返回 b
console.log(arrshift); // 只剩下一個c
添加 a.push(b) 把b 推到a 的最後面 unshift 前面加
pop() 後面刪 shift() 括號裏面沒有 參數 只操做一個
a.concat(b) 把 a數組和b數組鏈接 併成一個新數組。
concat()
該方法用於鏈接兩個或多個數組。它不會改變現有的數組,而僅僅會返回被鏈接數組的一個副本
// 鏈接數組
var aa = [1,2,3];
var bb = ["a","b","c"];
console.log(aa.concat(bb)); // 新的數組 [1, 2, 3, "a", "b", "c"]
console.log(aa);
console.log(bb);
做用是將數組各個元素是經過指定的分隔符進行鏈接成爲一個字符串。
語法
arrayObject.join(separator)
數組名.join(「分隔符」)
數組轉換爲字符串
參數 separator 可選。指定要使用的分隔符。若是省略該參數,則使用逗號做爲分隔符。
// join 將數組轉換爲字符串
var arrjoin = ["2015","12","2"];
console.log(arrjoin.join("-")); // 2015-12-2 字符串
console.log(arrjoin.join("+")); // 2015+12+2
console.log(arrjoin.join("*")); // 2015*12*2
console.log(arrjoin); // 結果是原數組 不影響本數組
split() 方法用於把一個字符串分割成字符串數組
語法
stringObject.split(separator,howmany)
字符串.split(「字符串的分隔符」,[最大長度]);
參數 separator 可選。指定要使用的分隔符。若是省略該參數,則使用逗號做爲分隔符。
howmany 可選。該參數可指定返回的數組的最大長度
// split 將字符串轉換爲數組
var txt = "2015-12-2";
var text = "中國 山東 威海 小漁村";
console.log(txt.split("-"));
console.log(text.split(" "));
1. 核心(ECMAScript)
描述了JS的語法和基本對象。好比變量區分大小寫等
2. 文檔對象模型(DOM) 重點
處理網頁內容的方法和接口 好比怎麼獲得某個表單的值 怎麼去關閉某個div
3. 瀏覽器對象模型(BOM)
與瀏覽器交互的方法和接口 前進, 後退 彈出窗口 跳轉頁面
ECMA 歐洲計算機制造商協會
樓房 蓋房子以前 先建模 。 dom 模型
DOM 爲文檔提供告終構化表示,並定義瞭如何經過腳原本訪問文檔結構。
目的其實就是爲了能讓js操做html元素而制定的一個規範。
DOM樹的根統一爲文檔根— document
由結構圖中咱們能夠看到,整個文檔就是一個文檔節點。
而每個HMTL標籤都是一個元素節點。
標籤中的文字則是文字節點。
標籤的屬性是屬性節點。
一切都是節點……
咱們用的最多的就是 元素節點
元素 就是 標籤 就是標記 就是 div span a .....
好比頁面中有不少的div span 這些標籤 元素 咱們怎麼獲得這些 元素節點呢?
全部的div
這裏有個 div ID 爲 demo的,咱們怎麼得到 div 元素節點?
咱們前面學過:
得到類名這個語法 ie678是不支持的。 咱們只能本身去寫兼容性的寫法。
第一層寫法:
12 // 分兩部分 ,首先是瀏覽器支持de
13 function getClassName(classname) { // 形參
14 // 先看看瀏覽器支不支持
15 if(document.getElementsByClassName) { // 若是支持這個寫法
16 return document.getElementsByClassName(classname); // 直接返回全部元素
17 }
18 // 下面的語句是ie678 執行
19 // 核心思想 把全部的標籤都取過來, 而後一個一個的判斷當前元素的類名是否是 classname
20 //是就留下,不是 就走開
21 // alert(11);
22 var arr = []; //數組用來存儲知足條件的 元素
23 var dom = document.getElementsByTagName("*"); // 把全部的標籤都取過來 * 全部的
24 for(var i=0;i<dom.length;i++) { // 開始遍歷
25 if(dom[i].className == classname) { // 判斷
26 arr.push(dom[i]); // 往 數組後面追加
27 }
28 }
29 return arr; // 返回總的數組
30 }
第二層寫法:
31 // 分兩部分 ,首先是瀏覽器支持de
32 function getClassName(classname) { // 形參
33 // 先看看瀏覽器支不支持
34 if(document.getElementsByClassName) { // 若是支持這個寫法
35 return document.getElementsByClassName(classname); // 直接返回全部元素
36 }
37 // 下面的語句是ie678 執行
38 // 核心思想 把全部的標籤都取過來, 而後一個一個的判斷當前元素的類名是否是 classname
39 //是就留下,不是 就走開
40 // alert(11);
41 var arr = []; //數組用來存儲知足條件的 元素
42 var dom = document.getElementsByTagName("*"); // 把全部的標籤都取過來 * 全部的
43 // 去過全部的標籤以後, 把 每個標籤的類名 (字符串) 轉換爲數組 , 只有數組才能夠遍歷
44 for(var i=0;i<dom.length;i++) { // 遍歷每個標籤
45 // 把每個標籤的類名 轉換爲數組
46 var arrName = dom[i].className.split(" "); // "demo nav test" = ["demo","nav","test"];
47 // var arrName = ["demo","nav","test"]; // 用來存儲每個 類名的數組
48 for(var j=0;j<arrName.length;j++) { // 遍歷 arrname
49 if(arrName[j] == classname) { // 判斷
50 arr.push(dom[i]); // 把當前知足條件的元素 給 arr
51 }
52 }
53 }
54 return arr; // 返回總的數組
55 }
DOM的節點並非孤立的,所以能夠經過DOM節點之間的相對關係對它們進行訪問
父級 兄弟 孩子
這裏特指 父親 的意思 , 親的父親
就是當前元素的上一級。 就是親爹 爺爺不算 。
<script>
window.onload = function() {
var x = document.getElementById("x"); // 事件源
x.onclick = function() {
this.parentNode.style.display = "none"; // 關閉的是他的爸爸
}
}
</script>
nextSibling 下一個兄弟 ie 678 寫法
nextElementSibling
previousSibling 上一個兄弟 ie678
previousElementSibling 谷歌 火狐等
nextSibling 下一個兄弟的意思, 再ie678裏面是正常的,可是在谷歌,火狐瀏覽器裏面,默認的下一個兄弟, 是空格或者是換行。
因此,再谷歌等瀏覽器裏面,咱們使用: nextElementSibling 這個單詞有效的避免了 下一個兄弟是換行等問題。
綜合兼容性的寫法: ||
56 <script>
57 var two = document.getElementById("two");
58 // two.nextSibling.style.backgroundColor = "red";
59 var next = two.nextElementSibling || two.nextSibling;
60 next.style.backgroundColor = "purple";
61 </script>
注意: 必定先寫 nextElementSibling ,由於谷歌認識nextSibling,可是谷歌會報錯,因此咱們優先執行 nextElementSibling 。
第一個和最後最後一個孩子很特殊的。 站在父親的角度來考慮問題,這裏的孩子,其實特指 兒子。 親兒子
firstChild 第一個孩子 lastChild 最後一個孩子
以上 是 ie 6 7 8
firstElementChild 谷歌和火狐等瀏覽器的寫法。
兼容性的寫法:
<script>
var father = document.getElementById("father");
// father.firstChild.style.backgroundColor = "gray";
var first = father.firstElementChild || father.firstChild;
var last = father.lastElementChild || father.lastChild;
first.style.backgroundColor = "gray";
last.style.backgroundColor = "gray";
</script>
咱們想要獲得全部的孩子 , 全部的, 親生兒子 。 其餘的孫子輩的不算。
可是會有一些問題。 再谷歌等瀏覽器裏面, 會把 折行 也看作是一個孩子。
這樣作,是不能夠的, 由於咱們獲得它的全部孩子的目的是爲了遍歷, 咱們得想一個辦法?
nodetype 這個屬性的做用是用來檢測 元素節點類型的。
<a href=」http://www.biadu.com」 > 百度 </a>
其中 a 咱們成爲 元素節點 href 成爲屬性節點 百度 文字節點
平時咱們只須要操做元素節點。
nodeType == 1 表示 的是 元素節點 記住 元素就是標籤
nodeType == 2 表示是屬性節點 瞭解
nodeType == 3 是文本節點 瞭解
<script>
var demo = document.getElementById("demo");
// alert(demo.childNodes.length);
var nodes = demo.childNodes; // 獲取了全部的孩子節點 包含 div 包含 換行等等 7
for(var i=0;i<nodes.length;i++) {
if(nodes[i].nodeType == 1) {
nodes[i].style.backgroundColor = "red";
}
}
</script>
2. children 這個是庶出 ie 發明的 咱們如今用最多的。 幾乎沒有兼容性 。 其餘瀏覽器都支持
children 得到是某個盒子裏面全部的 元素節點。 提倡使用
只得到標籤。
由於children 再 ie678 裏面 包含註釋節點 要注意一下。 能夠避免開的。
<script>
var demo = document.getElementById("demo");
// alert(demo.children.length);
var child = demo.children; // demo 裏面全部的 標籤
alert(child.length);
child[0].style.backgroundColor = "red"; // 第一個孩子
child[child.length-1].style.backgroundColor = "red"; // 最後一個孩子
</script>
咱們的元素節點不少是動態生成的。
好比 : 輪播圖 下面的小圓點 ,是根據 圖片的張數動態生成的。
DOM節點操做 , 添加 刪除 克隆 建立 .....
上面咱們講的都是屬性, 第一個孩子 孩子們 顏色 大小
下面咱們開始講的, 咱們建立節點 等等 都是操做 帶有動詞的特性,都是方法。 是方法帶有括號。
沒有的,咱們能夠給它生成 , 建立節點是從無到有的過程,不一樣於 顯示和隱藏。
var test = document.createElement("div"); // 建立了一個新的div
document.createElement(「標籤名」)
document.createElement("span") 建立新span標籤
建立完畢,要添加到咱們的dom 頁面中。
添加節點就是把咱們建立的節點 放到某個地方 。
1. appendChild() append 追加的意思 追加一個子節點
a.appendChild(b); 把b放到 a 的裏面 而且是 a的孩子們最後面
後追加 。 b 必定是a 的孩子 。 必須的
2. insertBefore()
insertBefore(插入的節點,參照節點)
insertBefore() 方法 ,若是不是在末尾插入節點,而是想放在特定的位置上,用這個方法,該方法接受2個參數,第一個是要插入的節點,第二個是參照節點,返回要添加的元素節點
若是 第二個參數 爲null 則默認插入到後面 不能省略
demo.appendChild(newDiv);
var newSpan = document.createElement("span");
demo.insertBefore(newSpan,newDiv); // 1 參數 插入的子節點 2 參數 參照節點
getAttribute(「屬性」) get 得到 attribute 屬性的意思 得到屬性值
demo.getAttribute(「id」) 能夠得到 demo的id名字 是 demo
setAttribute(「屬性」,」值」) 設置屬性值
demo.setAttribute(「class」,」box」); 給demo 添加一個 class 爲 box
demo.className = 「box」 等價的
removeAttribute(「屬性名」) ; 刪除某個屬性
demo.removeAttribute(「class」) 就把demo 的class 屬性刪掉了
其中 以上寫法, ie67.不支持.
兼容性寫法:
demo.className = 「one」 ;
cssText 能夠更改多個屬性設置
刪除子節點
a.removeChild(b) 刪除a 裏面的 孩子 b 節點 。
用於複製節點, 接受一個布爾值參數, true 表示深複製(複製節點及其全部子節點), false 表示淺複製(複製節點自己,不復制子節點)
<script>
var demo = document.getElementById("demo");
// demo.cloneNode(true); // 克隆節點
demo.parentNode.appendChild(demo.cloneNode(true));
</script>
獲取日期和時間
getDate() 獲取日 1-31
getDay () 獲取星期 0-6
getMonth () 獲取月 0-11
getFullYear () 獲取完全年份(瀏覽器都支持)
getHours () 獲取小時 0-23
getMinutes () 獲取分鐘 0-59
getSeconds () 獲取秒 0-59
getMilliseconds () 獲取毫秒 1s = 1000ms
getTime () 返回累計毫秒數(從1970/1/1午夜) 時間戳
咱們頁面中有不少的效果,是本身的運動的。 這個是用什麼作的呢?
for 循環的效果,可是他一會兒就執行完畢,咱們看到這個輪播圖有什麼效果,每隔n秒 ,就運動一次,是有規律的。
手機有鬧鈴, 天天的 8:30分, 鬧鈴就會響。 定鬧鈴 。
咱們js 裏面也能夠定鬧鈴, setInterval
window.setInterval(「執行的代碼串」,間隔時間);
大部分狀況下, window 都是省略 。
意義: 每隔必定時間,就會去執行一次 代碼串。 永不停歇 。 連續型。
setInterval("console.log('你好嗎')",1000);
後面的時間 單位是 毫秒 1000 ms == 1s
每隔 1秒就去調用一次 console.log 這個語句, 只不過直接寫語句會很是少,咱們大部分都是用函數來代替。
1. setInterval(「fun()」,1000);
2. setInterval(fun,1000); // 最爲經常使用
3. setInterval(function() {},1000)
總結:
必須說明,定時器的一個重要用途就是它能夠不斷刷新某個區域! 不在初始化中執行; 並且是有時間可控的。
咱們再2015年12月12日 作一個活動 , 就要開始倒計時 。
設定目標時間 纔對 。
var endTime = new Date(「2015/12/12 17:30:00」)
咱們計算機裏面時間,都是用毫秒來計算的。 精確。
咱們計算機的時間是從 1970年1月1日 開始 的。
累加的毫秒數
var date = new Date();
console.log(date.getTime());
console.log(date.valueOf());
console.log(Date.now());
console.log(+new Date());
咱們計算的是還剩下多少時間。 2015年12月12
用未來的時間 - 如今的時間 === 剩下的時間
咱們的思路 : 把他們轉換爲 毫秒 各類計算。
總結:
用未來時間的毫秒數 (2015.12.12距離 1970年1.1 的毫秒數) 減去
如今時間的毫秒數 == 一共 還剩下多少毫秒。
咱們前面學過那些運算符。
一元操做符 ++, -- ,+ - 加加 減減 正號 負號 +a -a
邏輯操做符 ! && ||
基本運算符 +, -, *, /, %
關係操做符 >, <, >=, <=, ===, ==, !=, !==
條件操做符 (三元運算符) a ? b : c
賦值運算符 +=, -=, *=, /=, %= a+=2 a = a+2 ;
逗號運算符 , var a=10,c=10;
1 ()
2 !、-、++、-- 一元
3 *、/、%
4 +、-
5 <、<=、<、>=
6 ==、!=、===、!==、
7 &&
8 ||
9 ?:
10 =、+=、-=、*=、/=、%= 賦值 計算完畢,再給值
var aa = 0&&1;
alert(aa) 0
var bb = 1&&0;
alert(bb); 0
var cc = 1&&10;
alert(cc); 10
a&&b
若是 a 爲假 則返回a 的值 0&&1 返回0
若是a 爲真, 則返回 b 的值 1&&10 返回 10
var a = 1 && 2 && 3;
console.log(a); 3
var b = 0 && 1 && 2;
console.log(b); 0
var c = 1 && 0 && 2;
console.log(c); 0
a || b
若是a 爲假 則返回的是 b 的值 。
若是a 爲真 則返回的是 a 的值 (本身的值)
console.log(0||1);
console.log(1||0);
console.log(1||5);
console.log(5||1);
var first = father.firstElementChild || fathter.firstChild;
var a = 0 || 1 || 2;
var b = 1 || 0 || 3;
console.log(a),console.log(b);
var a = 3 && 0 || 2;
var b = 3 || 0 && 2;
var c= 0 || 2 && 3;
alert(a),alert(b),alert(c);
結果是: 必定先算 && 後 算 || 2 3 3
0 && 1 == 0 0 與 任何數 都的 0
0 || 1 = = 1 0 或 任何數 都的 任何數
最後:
var a = 1+4&&3
var b = 0&& 3+1;
var c= 1 || 2 && 5-1;
alert(a),alert(b),alert(c);
d = d>10 ? -d : d
咱們前面學過轉換爲字符串
1. + 」」 轉換爲字符串 var num = 10; console.log(「num」); console.log(num+ 「」);
2. String() 構造函數 String(num);
3. toString(),內置轉換方法(進制基數)
var num = 10; console.log(num.toString());
console.log(demo.toString(2)); // 把 demo 裏面值 轉換爲 2進制
1 charAt,獲取相應位置字符(參數: 字符位置)
註釋:字符串中第一個字符的下標是 0。若是參數 index 不在 0 與 string.length 之間,該方法將返回一個空字符串。
2 charCodeAt獲取相應位置字符編碼(參數: 字符位置) 索引號
charAt()方法和charCodeAt()方法用於選取字符串中某一位置上的單個字符
區別:
charCodeAt()方法,它並不返回指定位置上的字符自己,而是返回該字符在Unicode字符集中的編碼值
my name is andy big5 gb2313 unicode
var txt = "abcdefg";
alert(txt.charAt(3)); // 返回 索引號3 的 字符 d
var demo = "今天是週末";
alert(demo.charAt(2)); // 返回 是
alert(txt.charCodeAt(3)); // 返回的是相應的 字符 的 unicode 編碼
alert(demo.charCodeAt(2));
1 indexOf,從前向後索引字符串位置(參數: 索引字符串)
從前面尋找第一個符合元素的位置 找不到則返回 -1
2 lastIndexOf,從後向前索引字符串位置(參數:索引字符串)
從後面尋找第一個符合元素的位置
找不到則返回 -1
從後面往前面找, 找到後,索引號 數的時候從前面日後數
他們是根據字符返回位置 。
aa.jpg aa.jpeg
var aa = 「abcdefg」 aa.indexOf(「c」) ;
62 <script>
63 function $(id) {return document.getElementById(id)}
64 $("btn1").onclick = function() {
65 // asdf.indexOf("a");
66 alert($("all").value.indexOf($("index").value));
67 }
68 $("btn2").onclick = function() {
69 // asdf.indexOf("a");
70 alert($("all").value.lastIndexOf($("index").value));
71 }
72 </script>
URI (Uniform ResourceIdentifiers,通用資源標識符)進行編碼,以便發送給瀏覽器。有效的URI中不能包含某些字符,例如空格。而這URI編碼方法就能夠對URI進行編碼,它們用特殊的UTF-8編碼替換全部無效的字 符,從而讓瀏覽器可以接受和理解。
var url = 「http://www.itcast.cn?name=andy」
encodeURIComponent() 函數可把字符串做爲 URI 組件進行編碼
decodeURIComponent() 函數可把字符串做爲 URI 組件進行解碼
<script>
var url = "localhost:itcast.cn? name=andy";
var str = encodeURIComponent(url); // 編碼的過程
console.log(str);
console.log(decodeURIComponent(str));
</script>
咱們從一串字符裏面, 取某幾個 。 截取字符串
var txt = 「123」;
console.log(txt.concat(「abc」));
slice,截取字符串(參數:1,截取位置【必須】,2終結點)
asdf.slice(2); // df
意思: 從 索引號2 的位置 開始截取,若是沒有結束位置,則會一直截取到最後。
asdf.slice(2,3) // d
結束位置, 從最左邊數的個數 這裏從a開始數 3個 。
asdf.slice(-1) // f
負號 表示 從右邊開始往左邊取 -1 就是取最後一個 -2 就是取最後兩個的意思。
substr,截取字符串(參數:1,截取位置【必須】,2截取長度)
截取的長度 從當前位置開始數 截取的長度
asdf.substr(2,2); // df 第一個2 從 索引號2 開始取, 第2個2
從當前開始數2個。
substr(-1) 負值是有兼容性問題的。 ie8如下的版本 會直接返回全部字符串。 因此,咱們不建議使用 substr負值 。
兼容性onButtonClick("btn8",div1.substr(div1.length-1,1));
substring 同slice
可是若是 有兩點不一樣就是 會有參數比較大小
substring(6,3) 它會自動轉 substring(3,6)
substring則乾脆將負參數都直接轉換爲0 所有取過來
「12345678」.slice(2,5) 345
「12345678」.substr(2,5) 34567
var PI = 3.141592653;
console.log(PI.toFixed(2));
保留兩位小數 後面小數會四捨五入
1 toUpperCase,轉換爲大寫(參數:無)
2 toLowerCase,轉換爲小寫(參數:無)
var max = Math.max(4,2,6,7,8,3);
var min = Math.min(4,2,6,7,8,3);
若是max函數沒有給出任何參數,返回-Infinity
若是有NaN或者非數字類型的參數,返回NaN
alert(Math.max(1,3,4,'10'));
alert(Math.max(1,3,4,'10abc'));
alert(Math.max(1,3,4,NaN));
alert(Math.max(1,3,4,undefined));
第一個是 10 後面三個都是 NaN 只有裏面 不是數值型的, 返回的結果 就是 NaN.
咱們前面學了 setinterval 如今學習 setTimeout
setTimeout 纔是真正意義上的 定時炸彈。 就結束了
setInterval(fn,1000) 每隔1秒 就執行一次 fn 函數
setTimeout(fn,1000) 1秒鐘以後,去執行一次 fn 函數, 就over了 。 一次性的。
<script>
function $(id) { return document.getElementById(id);} // id函數
function hide(id) { // 隱藏函數
$(id).style.display = "none";
}
function show(id) {
$(id).style.display = "block";
}
setTimeout(closeAd,5000);
function closeAd() {
hide("left");
hide("right");
}
</script>
js 頁面跳轉語句 BOM
window.location.href = 「http://www.itcast.cn」;
函數本身調用本身,咱們成爲遞歸調用。 必定要寫退出條件,不然死循環。
setTimeout延遲時間爲1秒執行, 要執行的代碼須要2秒來執行,那這段代碼上一次與下一次的執行時間爲3秒.
而setInterval卻沒有被本身所調用的函數所束縛,它只是簡單地每隔必定時間就重複執行一次那個函數。
arguments.callee
返回正被執行的 Function 對象。
在使用函數遞歸調用時推薦使用arguments.callee代替函數名自己。
clearInterval(定時器的名字);
clearTimeout(定時器的名字);
clearInterval(timer); // 先清除之前的定時器 timer = setInterval(function() {}