Javascript Review 1
第一天:
一.變數命名規則
1.變數名不能數字起頭,必須用英文字母或者下劃線起頭;
2.變數必須使用駝峰式命名法,如:getNumberSum;
3._num,下劃線起頭定義臨時變數或者函式中引數;
4.不能使用關鍵字,保留字;
5.在script中直接定義的變數實際上是window的屬性。某些變數不能重複;
var x=5===window.x=5
status=window.status 而window.status是字元型別,因此最好不要設定這個變數;
window下的屬性名稱最好不要定義為變數,這樣會重複覆蓋。
二.常亮定義
1.定義一次後不能再改變值;
2.常亮名稱必須使用全部大寫字母,中間用下劃線分割;
3.使用const定義。
三.資料型別
string、Boolean、null、undefined、number、object、symbol(es6)
""、null、false、undefined、0、NAN 這六種轉為布林值為false。
第二天
一.資料轉換
1.NaN 非數值,強制了資料型別是數值型,但是值並不是數值,這時候就是NaN;
2.使用Number強轉,如果內容有字元,就直接判定為NaN;
3.使用parseInt方法,如果前面是數字,後面是字元,拋棄後面字元,將前面的數字轉換為數值;如果第一位是字元,直接變成NaN;
4.parseInt遇到小數點時,忽略小數點後的內容;
5.布林值轉換為數值是NaN;
6.toString() 按進位制轉換為字元;
7.toFixed() 保留幾位小數,自動四捨五入;
二.算數運算子
1.字串相加,首尾相連;
2.隱式轉換
數值、布林、undefined、null、加字串,先把數值、布林、undefined、null轉換為字元,然後再字元相加;
數值和布林值相加,現將布林值轉換為數值,true是1,false是0;
數值加null,null被轉換為數值後是0,數值+0;
數值加undefined,因undefined轉換後是NaN,因此為NaN;
字元、布林、undefined、null與數值的減法,乘法,除法,取模
%取模運算,就是取餘;
先把字元等轉換為數值,然後求值。
三.一元運算子
var y=x++;//先把x賦值給y,然後x+1;
var y=++x;//先把x+1,然後把執行的結果賦值給y。
四.關係運算符
false、“”、0 在布林判斷時相等
undefined、null
NaN
== 比較
=== 精確比較
五.位運算子
1.二進位制轉換
// 8421 8421 8421
// 111 1000
// 1011010=90
// 6*16+15=111
// 120/16=7-8
// 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,10,11,12,.....,1f,20,.....ff,100
// 10ff=1*16(3)+f*16(1)+f;
// 15 15
// 8421 8421 8421
// 101 1101 1111
// 5 d f
// 16(2)16(1)16(0)
2.運算子
&位與,1&1=1,其他都是0;
|位或,0|0=0,其他都是1;
^位非,相同為0,不同為1;
~位異或,加1取負;
1<<8,二進位制向左移八位,後面補零 1<<n 2的n次冪
256>>7,二進位制轉換後向右刪除後面的數量,100000000>>7-->10
3.找到判斷條件
if(~str.indexOf(""g)){
//在str字串中找到g
}
第三天
一.switch(表示式),表示式是一個變數或者一個運算式,這個運算的結果或這個變數的值等於下面case中那一個,就會執行那個內容,只能判斷等於關係;
switch(表示式){
case " " :
break;
...
defalt:
break;
}
二、while迴圈
1.跳出迴圈有兩種形式
1)迴圈條件不滿足;
2)迴圈語句塊中有條件判斷,並且使用break跳出迴圈。
2.建立死迴圈
目的是為了讓值不斷變化,直到滿足一個條件,並且使用break跳出迴圈,這樣才可以完成
while(true){
if(){
break;
}
}
3.迴圈不能超出千萬級以上,否則會造成卡頓狀態,甚至卡死。
第四天
一.迴圈求素數
1.當判斷問題時條件比所有其他條件要少,尋找反向條件;
2.標記,當某些條件滿足時做標記;
3.break,跳出
1)不需要再執行,強制終止迴圈;
2)找到了需要找的東西,不需要浪費CPU計算。
var bcs=2;
while (bcs<100){
var cs=2;
var s=false;
while (cs<bcs){
// bcs%cs===0//不是質數
if(bcs%cs===0){
s=true;
break;
}
cs++;
}
if(!s){
console.log(bcs);
}
bcs++;
}
二.for迴圈
// var sum=0;
// for(變數初始化;變數相關條件;變數的變化)
/* for(var i=0;i<=100;i++){
sum+=i;
}*/
// 變數初始化僅運行了一次
// 變數變化實際上也是在做迴圈的過程,但是如果有多個內容時,我們可以使用,分隔
for(var i=0,sum=0;i<100;i++,sum+=i){
// 語句塊中一樣
}
console.log(sum);
/* var j=0;
while (j++<100){
sum+=i++
}*/
/*
* 偶數
*
* */
/*for(var i=0;i<100;i+=2){
}*/
/*
* 死迴圈
*
* */
/* for(var s=0;;s++){
if(s>50){
break;
}
}*/
/* var sums=0;
for(;;){
sums++;
if(sums>100){
break;
}
}*/
三.物件
1.delete 刪除物件的屬性,不能刪除window的屬性;
2.遍歷,for(var 屬性變數名 in 物件) 在js中,物件的屬性新增的先後順序就是for in 迴圈的先後順序。
四.函式
1.變數名必須首字母小寫,不能數字,駝峰式命名法;
2.不能使用關鍵字,保留字,不能重複,不能喝變數名衝突;
3.如果是建構函式,首字母必須大寫;
4.函式就是可以重複執行的語句塊,函式也是物件,放在堆中;
5.使用function定義函式,執行函式的位置可以任意位置,若定義一個匿名函式,並且賦值給變數,這樣的函式,執行方法必須在定義之後;
6.
/*
* 這種寫法,瀏覽器會自動將字串變為程式碼,然後再執行,因此效率極其低下
*
* 不推薦大家使用
* */
// var cde=new Function("console.log('a');console.log('b');console.log('c');");
// cde();
/*
* 自執行匿名函式
* 只能執行一次
* */
(function () {
console.log("a");
console.log("b");
console.log("c");
})();
五.引數
1.引數的適用範圍僅在函式內;
2.引數名儘量表達清晰,如果這個引數名稱與其他變數發生重複,這是我們可以使用在前面加_,作為臨時變數使用。
第五天
一.變數的作用域
1.全域性變數,在函式外定義,在函式外和函式內都可使用,在函式內操作全域性變數,這個變數的值會改變並且保留;
2.區域性變數,在函式體內定義的所有變數,使用範圍僅限於函式內,函式外是不可能獲得的,所以每個函式中的空間是獨立的,在這個獨立空間內我們可以呼叫自身的區域性變數也可以呼叫函式外的全域性變數,當函式執行完成後,內部區域性變數就會被銷燬,下一次呼叫該函式,原來的那個區域性變數已經不存在 了;
3.如果全域性變數名稱和區域性變數名稱相同時
* 1、區域性變數定義以後,呼叫這個變數,變數實際上是區域性變數
* 函式中區域性變數優先於全域性變數在函式中使用
* 2、區域性變數定義之前,呼叫這個變數,因為函式實際在程式碼執行
* 之前已經被放入堆中,因此,函式內的內容認為該變數已經定義
* 一次不會報錯,但是還沒有賦值,所以這是列印這個函式內變數
* 仍然是區域性變數,值是undefined;
* 3、如果函式中並沒有定義與全域性變數相同名稱變數,在函式中呼叫
* 變數,使用的是全域性變數
4. 當函式名和變數名相同時
* 1、如果變數僅定義沒有賦值的情況下,列印這個名稱,實際上是函式
* 所以這個時候的函式是可以使用的(可以執行)
* 2、如果變數賦值了,這個時候函式就會被覆蓋掉了,將不能被呼叫
* 這時候列印這個名稱,實際上是列印了變數,如果使用變數名()
* 將會報錯,這個變數不是一個函式
5.引數也是區域性變數,引數的值是由外面帶入;
6.函式中的引數是區域性變數,
* 1、如果引數帶入的是除了物件型別以外的內容時,函式執行完成後,
* 這個引數會銷燬,數值不保留
* 2、如果引數帶入的是物件型別,實際上是將物件的引用地址帶入了
* 所以,引數中的物件和外部的全域性物件實際上是指向同一個
* 堆中的物件,因此函式中引數修改了這個物件下的屬性,全域性
* 物件也會對應被修改。
二.return
1、return只能返回一個值,如果需要返回多個值,我們可以用物件返回
2、不在函式中,不能使用return
3、break跳出迴圈;continue跳出當前條件,並且繼續迴圈;return直接跳出函式
三.事件return
1、e僅且只有一個,e事件物件
2、事件函式中是不能傳參的,不能定義引數
3、事件函式中不能返回值,可以return跳出
4、函式的length是函式的引數個數