JS DOM和BOM:
ECMAScript標準 js基本語法
- DOM 文件物件模型 DOM提供了方法操作DOM樹上的節點
- BOM 瀏覽器物件模型 通過BOM可以 獲得螢幕解析度 控制瀏覽器跳轉 彈出框
- BOM中的頂級物件就是window,DOM中的頂級物件是document。document是window的一個子物件。
window.onload(){}
setInterval()
clearInterval()
setTimeout()
clearTimeout()
- Location 物件
包含的屬性有hash
(位址列#後的內容)、href
(地址)、protocol
(協議)、port
(埠)、host
(主機和埠號)、hostname
(主機名字)、pathname
(路徑名字)、search
(搜尋的內容:獲取的?後的內容)location.assign()
//和location.href一樣的操作location.replace()
//替換的地址,沒有歷史記錄location.reload()
//頁面重新載入 - History 物件
historty.forward()
//前進history.back()
//後退history.go()
//正數就是前進,負數就是後退 - DOM物件:
document.getElementById(`div`);
//返回一個ID屬性為‘div’的物件document.getElementByTagName(`div`);
//返回由所有div標籤的組成的陣列document.getElementByClassName(`div`);
//返回所有含有類名為‘div’的元素陣列document.getElementByName(`div`);
//返回含有屬性名為‘div’的元素陣列document.querySelector("a[targe]");
//返回第一個含有target屬性的‘a’元素document.querySelectorAll(".example");
//返回是多個含有類名為example的元素的陣列
JS有五種基本資料型別:
number
/string
/boolean
/undefined
/null
(可使用typeof
方法 來判斷基礎物件型別)
- 引用型資料型別:
function / object
引用資料型別會開闢出堆記憶體,它們指向的是 記憶體地址。
字串 之間用 `+` 會拼接字串,如果其他型別資料和字串拼接,會被轉換為字串,這其中涉及到變數的隱式轉換
型別轉換:
數字型別轉換:parseInt() / parseFloat() / Number() *(總結:想要轉整數用parseInt(),想要轉小數用parseFloat(),想要轉數字:Number();更嚴格。)*
其他型別轉換:
.toString() / String() / Boolean() NaN 不是一個數字,或者不是數字與數字的計算就會得到 NaN (isNaN() 判斷一個值是不是 NaN) ! 表示非, !false == true 的結果為true
操作符:
算數運算子:+ - * / % 一元運算子:++ -- 二元操作符:&& || 三元操作符: 條件?結果1 : 結果2 複合運算子: += -= *= /= %=
流程控制:
if(){ } else if(){ }else{ } switch(){ case : ;default: ; } while(){ } do{ }while() for( ; ; ){ } (break 用來取消後續迴圈,continue 用來取消本次迴圈) (switch中的條件判斷 使用的是嚴格模式的全等於)
JS內建物件:
例項方法:通過new的方式建立的物件(例項物件)來呼叫的方法 靜態方法:直接通過建構函式呼叫的方法
- Array 建立方式有兩種:
var a =[];
//直接通過字面量建立var a = new Array()
//通過建構函式進行建立- Array物件的靜態方法:
Array.isArray(物件)
//判斷這個物件是不是陣列- Array物件的例項方法:
.concat(陣列,陣列,..)
//組合一個新陣列.every(函式)
//返回布林值,函式作為引數使用,函式中有三個引數,分別是元素的值,索引值,原來的陣列(沒用)
//陣列中的每個元素都符合條件,才返回true.filter(函式);
//陣列中複合條件的元素,組成新陣列.map(函式);
//每個元素都執行這個函式,把執行後的結果重新放在一個新的陣列中.forEach(函式)
//遍歷陣列用.push(值);
//把值追加到最後了,返回值是追加資料後的陣列長度.pop();
//刪除最後一個元素,返回值就是刪除的這個值.shift();
//刪除第一個元素,返回值就是刪除的這個值.unshift();
//向第一個元素前插入新元素,返回值是插入後的長度.indexOf(元素值);
//返回的是索引,沒有則是-1.join("字串");
//返回的是一個字串.reverse();
//反轉陣列.sort();
//排序.slice(開始,結束);
//把擷取的陣列的值放在一個新的陣列中,但是不包含結束的索引對應的元素值.splice(開始,要刪的個數,替換的值);
//一般是用於刪除陣列中的元素,或者是替換元素,或者是插入元素Math 物件 :
- Math物件的靜態方法:
Math.PI
—π—Math.sqrt()
—取平方根—Math.pow(a,b)
—a的b次方—Math.E
—自然常數—Math.abs
—絕對值—Math.ceil()
—向下取整—Math.floor
—向上取整—Math.Max()
—取最大值—Math.Min()
—取最小值—Math.random()
—取0-1之間隨機值(不包括1)—Date 物件
- Date物件的靜態方法:
Date.now()
//獲取當前時間- Date物件的例項方法:
.getFullYear()
//獲取年份.getMonth()
//獲取月份從0開始.getDate()
//獲取日.getHours()
//獲取小時.getMinutes()
//獲取分鐘.getSeconds()
//獲取秒數.getDay()
//獲取星期數.toLocaleDateString()
//”2019/1/25″.toLocaleTimeString()
//”下午2:20:26″.valueOf()
//1548397226024.toString()
//”Fri Jan 25 2019 14:20:26 GMT+0800 (中國標準時間)”String 物件
字串可以看作是由很多字元組成的陣列,字串有不可變的特性,字串的值之所以看起來是改變的,那是因為指向改變了,並不是真的值改變了。
- 字串的常用屬性:
.length
字串長度.charAt(索引)
//返回值是指定索引位置的字串,超出索引,結果是空字串.concat(字串1,字串2,...);
//返回的是拼接之後的新的字串.indexOf(要找的字串,開始的索引值);
//返回的是這個字串的索引值,沒找到則返回-1.lastIndexOf(要找的字串);
//從後向前找,但是索引仍然是從左向右的方式,找不到則返回-1.replace("原來的字串","新的字串");
//用來替換字串的.slice(5,10);
//從索引5的位置開始提取,到索引為10的前一個結束,沒有10,並返回這個提取後的字串.split("字串",切割後留下的個數);
//切割字串.substr(開始的位置,個數);
//返回的是擷取後的新的字串.substring(開始的索引,結束的索引)
//返回擷取後的字串,不包含結束的索引的字串.toLowerCase();
//轉小寫.toLocaleUpperCase()
轉大寫.toUpperCase();
//轉大寫.trim();
//幹掉字串兩端的空格
作用域:
- 分為全域性作用域和區域性作用域,根據所在的作用域不同,變數又分為全域性變數和區域性變數。此外,還有塊級作用域,被`{ }`包裹就可以看成一個塊,其實的變數定義,使用var 定義可以被外部使用, 使用 const、let 不可以被外部使用。
- 區域性變數在函式作用域銷燬時,就會被釋放,而全域性變數一旦被建立,就不會被釋放,除非頁面關閉(但是隱式全域性變數可以被銷燬,沒有使用var宣告的全域性變數)。
-
在所有作用域建立的時候,js引擎會有一個處理,預解釋,它所做的事,就是提前把所有的變數宣告瞭,所有的函式宣告並定義了(所以你可以在定義函式之前來呼叫這個函式)。
- 預解釋中的變數提升,只會提升到當前作用域的最前面,而不是其他作用域。
- 預解析會分段(多對的script標籤中函式重名,預解析的時候不會衝突)。
JSON物件:
一組無序屬性的集合的鍵值對,屬性的值可以是任意型別,這就是物件。JSON也是一個物件,資料都是成對的,一般json格式的資料無論是鍵還是值都是用雙引號括起來的。
JSON物件擁有兩個方法,parseInt() (將字串轉換為JSON物件)和 stringify() (將JSON物件轉換為字串),這兩個一般用於 資料儲存或者與後臺互動。
- 遍歷物件:
for(var key in json ){
console.log(key +`===========` + json[key]);
}