原生js學習筆記(一)
for(var i=1;i<=3;i++){
console.log(i);
setTimeout(function(){
console.log(i); //輸出:1,2,3,4,4,4
},0)
}
js定時器有兩種:setTimeout(超時呼叫)和 setInterval(間歇呼叫),都屬於非同步任務,即當主執行緒上所有同步任務執行完畢,且主執行緒讀取任務佇列上的其他非同步任務(Promise、Ajax等)推入執行棧且執行完畢後,才開始執行定時器的程式碼。這裡的同步任務就是指第二行的console.log(i)。並且,這三個4是同時輸出的,因為這三個定時器在同步任務執行完後,同時推入程序,這與後面的延遲時間無關。
js採用嵌入程式碼的優勢:可維護性、可快取、適應未來
ECMAScript有5種基本資料型別:Undefined、Null、Bollean、Number、String;以及一種複雜資料型別:Object。其中,Object本質上是由一組無序的鍵值對組成。
Undefined型別只有一個值,在使用var宣告變數但未對其加以初始化時,就是undefined。
Null型別也算只有一個值的資料型別,其值為null;null值表示一個空指標物件,使用typeof操作符檢測null值時會返回“object”
各資料型別的Boolean值轉換規則
資料型別 true false
String 任何非空字串 空字串
Number 任何非零數字值 0和NaN(Not a Number)
Object 任何物件 null
Undefined 不適用 undefined
浮點值計算會產生舍入誤差,例如0.1+0.2=0.30000000000000004;
NaN有兩個特點:任何涉及NaN的操作都會返回NaN;
NaN與任何值都不相等,包括自身
isNaN()函式,確定接收的引數是否“不是數值”。isNaN("10")返回false,isNaN(true)返回false;
數值轉換函式:Number()、parseInt()、parseFloat()
Number()可用於任何資料型別,對於Boolean值,返回1或0;對於null值,返回0;對於undefined,返回NaN。
parseInt("1234blue") // 1234
parseInt("") // 0
parseInt("22.5") // 22
parseFloat()解析到遇到一個無效的浮點數字字元為止。