1. 程式人生 > >js知識點亂燉

js知識點亂燉

有一個 生命 方式 操作 ring 選擇器 標簽 並且 轉換

修改屬性 元素.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

語法
* switch(變量){
* case 值:
* 當這個值與變量的值相同的時候,才會走這裏的代碼
* break; 停止以下代碼繼續執行
* case 值:
* 當這個值與變量的值相同的時候,才會走這裏的代碼
* break; 停止以下代碼繼續執行
* case 值:
* 當這個值與變量的值相同的時候,才會走這裏的代碼
* break; 停止以下代碼繼續執行
* default:
* 當以上變量都不滿足的時候,會執行這裏的代碼
* }

定時器:js中內置的一個方法

每隔一段時間或者延遲一段時間就執行一段指定的代碼

setInterval(function(){
* 每隔一段時間就會執行這裏的代碼
* },時間)

setTimeou(function(){
* 當時間到達後,會執行這裏的代碼
* },時間);
如果函數是寫在外面的,在這裏調用的時候只用寫函數的名字,不能加括號

定時器裏的this是指向window的,因為定時器是window身上的一個方法,所以this指向window

清除定時器:clearInterval(timer);

clearInterval(定時器的返回值)

運動的原理
* 在定時器裏不斷的去修改元素的屬性,修改完成以後再把結果重新賦給元素

技術分享圖片

* 運動的問題
* 1、如果每次的步長如果與目標值不成倍數的話,就到達不了目標值
* 解決:把判斷條件改成大於等於就可以
* 2、如果用戶連續點擊開始按鈕的話速度就會越來越快
* 原因:用戶不斷去點擊按鈕話會重復開啟多個定時器,造成速度累加
* 解決:在點擊的時候先把上一個定時器給它清除了

js知識點亂燉