JS基礎(1)
JS分為三部分:
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對象:
普通的標簽的屬性:src/href/title/width/height/...
表單標簽的屬性:name/value/type/checked/disabled/selected/...
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(函數);返回的是數組中每一個元素都復合條件的元素,組成了一個新的數組
.push(值);--->把值追加到數組中,加到最後了---返回值也是追加數據之後的數組長度
.pop();--->刪除數組中最後一個元素,返回值就是刪除的這個值
.shift();--->刪除數組中第一個元素,返回值就是刪除的這個值
.unshift();--->向數組的第一個元素前面插入一個新的元素,----返回值是插入後的程度
.forEach(函數)方法---遍歷數組用---相當於for循環
.indexOf(元素值);返回的是索引,沒有則是-1
.join("字符串");----返回的是一個字符串
.map(函數);--->數組中的每個元素都要執行這個函數,把執行後的結果重新的全部的放在一個新的數組中
.reverse();----->反轉數組
.sort();---排序的,可能不穩定,如果不穩定,請寫MDN中的那個固定的代碼
.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(索引),返回值是指定索引位置的字符串,超出索引,結果是空字符串
.fromCharCode(數字值,可以是多個參數),返回的是ASCII碼對應的值
.concat(字符串1,字符串2,...);返回的是拼接之後的新的字符串
.indexOf(要找的字符串,從某個位置開始的索引);返回的是這個字符串的索引值,沒找到則返回-1
.lastIndexOf(要找的字符串);從後向前找,但是索引仍然是從左向右的方式,找不到則返回-1
.replace("原來的字符串","新的字符串");用來替換字符串的
.slice(開始的索引,結束的索引); 從索引5的位置開始提取,到索引為10的前一個結束,沒有10,並返回這個提取後的字符串
.split("要幹掉的字符串",切割後留下的個數);切割字符串
.substr(開始的位置,個數);返回的是截取後的新的字符串
.substring(開始的索引,結束的索引),返回截取後的字符串,不包含結束的索引的字符串
.toLocaleLowerCase();轉小寫
.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]);
}
JS基礎(1)