js知識點亂燉
修改屬性 元素.style.樣式=值 document.getElementById(‘box‘).style.width=‘200px‘;
屬性操作方式
1、. 的
元素.屬性名
如果屬性是單一屬性,用點操作符是取不到的,而且還會報錯:點操作屬性的時候,後面只能跟真正的屬性名稱,不能跟變量名
如果想用點操作符去獲取帶橫杠的屬性,那首先要把橫杠去掉,然後把橫杠後面的第一個字母大寫
2、[] 的
如果屬性中帶橫杠,用[]的方式去操作屬性:[]操作屬性的時候,裏面可以放屬性名稱與變量名,如果放的時屬性名,那要加引號,如果放的是變量名,那不需要加引號
屬性 :元素身上所具有的一些特征
1、系統自帶的屬性
* type、id、style、value、src
2、自己添加的屬性 btn.kaivon=‘名字‘;
* 自定義屬性,系統當中是沒有的,我們自己添加的
* 系統自帶的屬性,滿足不了我們的需求,給一個自己添加的屬性
inputs[i].index=i; //給每個按鈕添加一個自定義屬性,存的是它們對應的索引值
表單的值:元素.value
獲取屬性class:用元素.className
獲取到是一個標簽對裏的所有內容(包括子標簽對):元素,innerHTML
地址:href(連接的地址) 和src(圖片的地址):href與src取到的是絕對地址,不是屬性裏的值;切記不要拿href與src取到的值去做判斷
如果元素沒有加載完,js獲取的對象就為null 所以ji代碼要放在window.onload=function(){}裏
函數的定義
function 函數名(參數){
//在這裏就可以使用這個參數
//這裏放的就是要重復利用的代碼
}
函數調用 函數名(參數);
函數表達式:
var 變量=function(參數){
要執行的代碼
}
函數表達式調用: 變量(參數)
匿名函數 沒有名字的函數
* 匿名函數不能直接聲明,會報錯
*
* 匿名函數怎麽用
* 當匿名函數是以被賦值的形式所出現,並且它是被事件調用
事件 window.onload 賦值 =
事件=匿名函數
window.onload=function (){
alert(1);
}
break:停止剩下的所有循環
continue:停止本次循環
return:返回,讓函數停止執行,它只能用在函數內
函數參數: 函數外面傳到函數裏面的數據,從而函數裏面能使用這個數據;多個的話就用逗號隔開
arguments對象:代表了所有的實參集合(類數組) 這個集合還有一個length,代表了實參的個數 它只能在函數內使用
函數運算結果返回值:return
有就返回return結果,並且return;後的代碼不再執行,函數就此結束;沒有就返回undefined;
作用域 全局變量是window下的屬性,在函數外面聲明
局部變量與局部函數只能在聲明它們的地方用,在其它的地方是用不到的
函數(函數聲明,不是函數調用)可以嵌套的,嵌套的函數(局部函數)可以訪問父函數裏的內容
子對象會一級一級地向上尋找所有父對象的變量。所以,父對象的所有變量,對子對象都是可見的,反之則不成立
js會把函數或者變量提前解析一下
步驟
1、先找var 、function(函數聲明)關鍵字以及參數
2、如果找到了var(聲明的變量,參數),會給他賦一個undefined。如果找到了function,那它會把整個函數都拿過來
3、把找到的東西,放到對應的作用域的最開始的位置
4、逐行執行代碼
備註:函數表達式,不會被預解析,所以只能先聲明再調用,不能把調用放在聲明的前面(不然就報錯)
生命周期
變量或函數在相應的作用域裏存在的時間
函數執行完,局部變量生命結束
頁面關閉,全局變量生命結束
閉包
函數嵌套函數,子函數訪問父函數的變量,就產生了一個閉包環境
閉包的作用:1、函數外可以使用函數內的局部變量和局部函數; 2、在循環當中找到對應的i的值
它的最大用處有兩個,一個是前面提到的可以讀取函數內部的變量,另一個就是讓這些變量的值始終保持在內存中。
垃圾回收機制
變量存在內存當中的,變量在使用完以後,沒有在其它的地方再使用,就會被清除,用來釋放內存。垃圾回收機制會按照固定的時間,周期性的執行
字符串拼接 :+ 當加號的任意一邊有一個是字符串,那它就是字符串連接的意思
* if語法
* if(判斷條件){
* 當判斷條件成立的時候,執行這裏的代碼
* }else if(判斷條件1){
* 當頭條條件1成立的時候,執行這裏的代碼
* }else if(判斷條件2){
* 當判斷條件2成立的時候,執行這裏的代碼
* }else{
* 當以上條件都不成立的時候,執行這裏的代碼
* }
當一個條件滿足的時候,代碼只會走滿足條件對應的大括號裏的內容。其它的都不會走
數組 length屬性
document.getElementById(id名稱)
querySelector(css選擇器)
* 通過css選擇器去獲取一個元素
* 它獲取到的只有一個元素,如果說有重復的,那它只取第一個
*
* 主語
* document 從整個文檔裏去獲取元素
* 父級 從父級裏去獲取元素
* querySelectorAll(css的選擇器)
* 通過css選擇器獲取到一組元素
* 它獲取到的也是一組元素,它也是一個類數組
*
* 主語
* document 從整個頁面中去獲取一組元素
* 父級 從父級下去獲取一組元素
for循環:
for(條件初始化;條件判斷;條件變化){
當條件成立的時候(true)重復執行這裏的代碼
}
第一步:條件初始化
第二步:條件判斷
第三步:走大括號裏的代碼
第四步:條件變化
第二次循環:第二步、第三步、第四步
for in用來遍歷對象當中的數據:
for(var 變量名 in 對象){
* 變量名 對象裏的屬性名(key)
* 對象[屬性名] 屬性名對應的值
* }
while:條件循環
* for 次數循環
* while 條件循環,它一般用在嵌套的元素,或者有嵌套的數據
* this
* 指的是當前對象
* 關鍵詞,不能當作變量名
* 只能讀,不能寫。它的值只能用,不能修改
*
* 1、在函數外用
* this是指向window
* 2、在函數內使用
* 1、函數是直接被調用的
* this指向window
* 2、被事件所調用,並且是以賦值的形式出現
* this指向是,誰調用了函數,那this就指向誰
*
* 誰調用了函數,那this就指向誰
js簡單數據類型:String Number(NaN運算失敗時出現,NaN不等於NaN) Boolean Undefined(未定義:只有undefined;聲明一個變量,但沒給它賦值,那它就是undefined) Null(空: 只有null)
js復雜數據類型:Object(對象 鍵值對:key:value),操作:Object.屬性
檢測數據類型:tyleof(數據)
* 系統定義的數據類型 typeof返回的數據類型
* String string
* Number number
* Boolean boolean
* Undefine undefined
* Null object
* Object object
函數的typeof結果為function
從頁面當中拿到的內容都是字符串
數據類型轉換
js支持把任意一種數據類型轉換成以下類型
* 數字
* 字符串
* 布爾值
* 對象轉成這三種數據是沒有意義,因為對象裏面可以放任意一種數據類型
顯式數據類型轉換
Number(要轉換的值) 把任意類型都轉為數字 Undefined:NaN Null:0 字符串:(空為0 ;純數字為數字;不純為NaN)、、、parseInt() parseFloat() :開頭是空格或數字(否則就是NaN)開始找,直到遇到非數字就停止;
String(要轉換的值):加上引號
Boolean(要轉換的值):Undefined和Null、數字0和NaN、空字符串都是false
isNaN():檢測數字 它會先把參數用Number()方法轉一下 純數字的字符串或是數據都返回false
隱式數據類型轉換:在進行操作的時候,js內部把數據轉換成符合操作的類型
加號兩邊沒有字符串,那就是數學中的加法運算,會把true轉成數字;有字符串的話就都轉成字符串
減號的作用就是數學上的減法運算,會把兩邊都轉成數字
數組和對象的區別:
數組表示有序數據的集合,而對象表示無序數據的集合。如果數據的順序很重要,就用數組,否則就用對象。 數組和對象的另一個區別是,數組的數據沒有”名稱”(name),對象的數據有”名稱”(name)。對象裏的“名稱”是唯一的,很多時候我用對象來去除重復數據。
三元操作符
a?b:c
* 如果a的值為真,返回b,否則返回c
語法
* switch(變量){
* case 值:
* 當這個值與變量的值相同的時候,才會走這裏的代碼
* break; 停止以下代碼繼續執行
* case 值:
* 當這個值與變量的值相同的時候,才會走這裏的代碼
* break; 停止以下代碼繼續執行
* case 值:
* 當這個值與變量的值相同的時候,才會走這裏的代碼
* break; 停止以下代碼繼續執行
* default:
* 當以上變量都不滿足的時候,會執行這裏的代碼
* }
定時器:js中內置的一個方法
每隔一段時間或者延遲一段時間就執行一段指定的代碼
setInterval(function(){
* 每隔一段時間就會執行這裏的代碼
* },時間)
setTimeou(function(){
* 當時間到達後,會執行這裏的代碼
* },時間);
如果函數是寫在外面的,在這裏調用的時候只用寫函數的名字,不能加括號
定時器裏的this是指向window的,因為定時器是window身上的一個方法,所以this指向window
清除定時器:clearInterval(timer);
clearInterval(定時器的返回值)
運動的原理
* 在定時器裏不斷的去修改元素的屬性,修改完成以後再把結果重新賦給元素
* 運動的問題
* 1、如果每次的步長如果與目標值不成倍數的話,就到達不了目標值
* 解決:把判斷條件改成大於等於就可以
* 2、如果用戶連續點擊開始按鈕的話速度就會越來越快
* 原因:用戶不斷去點擊按鈕話會重復開啟多個定時器,造成速度累加
* 解決:在點擊的時候先把上一個定時器給它清除了
js知識點亂燉