位運(yùn)算符:
位運(yùn)算符只針對(duì)數(shù)字的二進(jìn)制形式進(jìn)行。
var v1 = 5; //這是10進(jìn)制,二進(jìn)制其實(shí)是:101,在計(jì)算機(jī)內(nèi)部其實(shí)類似這樣: 00000101
var v2 = 6; //這是10進(jìn)制,二進(jìn)制其實(shí)是:110,在計(jì)算機(jī)內(nèi)部其實(shí)類似這樣: 00000110
按位與:
符號(hào): &
含義:將兩個(gè)二進(jìn)制數(shù)字的對(duì)應(yīng)位上的數(shù)字進(jìn)行“與運(yùn)算”,結(jié)果還是這些位運(yùn)算的結(jié)果組成的二進(jìn)制數(shù)所代表的值。
解釋:二進(jìn)制數(shù)字進(jìn)行“與運(yùn)算”的規(guī)則是:
1 & 1 è 1
1 & 0 è 0
0 & 1 è 0
0 & 0 è 0
舉例:
var v1 = 5,? v2 = 6,運(yùn)算圖示為:
v1=5 0 0 0 0 0 1 0 1
v2=6 0 0 0 0 0 1 1 0
v1 & v2 0 0 0 0 0 1 0 0
var v3 = v1 & v2 = 00000100(2) = 4(10)
按位或:
符號(hào): |
含義:將兩個(gè)二進(jìn)制數(shù)字的對(duì)應(yīng)位上的數(shù)字進(jìn)行“或運(yùn)算”,結(jié)果是這些位運(yùn)算的結(jié)果組成的二進(jìn)制數(shù)所代表的值。
解釋:二進(jìn)制數(shù)字進(jìn)行“或運(yùn)算”的規(guī)則是:
1 | 1 è 1
1 | 0 è 1
0 | 1 è 1
0 | 0 è 0
按位非:
符號(hào): ~ //這是一個(gè)“單目運(yùn)算符”
含義:將一個(gè)二進(jìn)制數(shù)字的對(duì)應(yīng)位上的數(shù)字進(jìn)行“非運(yùn)算”,結(jié)果是這些二進(jìn)制數(shù)字所代表的值。
解釋:二進(jìn)制數(shù)字進(jìn)行“非運(yùn)算”的規(guī)則是:
~1? è? 0
~0? è? 1
按位左移運(yùn)算:
符號(hào): <<
含義: 將一個(gè)二進(jìn)制數(shù)的每一個(gè)位上的數(shù)字往左邊移動(dòng)指定的位數(shù),并且左邊“冒”出去的就不管了(不算了),右邊空出來的位上填入“0”,得到的結(jié)果就是該二進(jìn)制數(shù)字所代表的值。
舉例:
var v1 = 5;var? v2 = 5 << 2; 運(yùn)算圖示為:
v1=5 0 0 0 0 0 1 0 1
v2= 5 << 2 0 0 0 1 0 1 0 0
var v2 = 5 << 2 = 00010100(2) = 1 * 24 + 1*22 = 16+4 = 20(10)
按位左移運(yùn)算:
符號(hào): >>
含義: 將一個(gè)二進(jìn)制數(shù)的每一個(gè)位上的數(shù)字往右邊移動(dòng)指定的位數(shù),并且右邊“冒”出去的就不管了(不算了),左邊空出來的位上填入原來的左邊的數(shù)字,得到的結(jié)果就是該二進(jìn)制數(shù)字所代表的值。
舉例:
var v1 = 5;var? v2 = 5 >> 2; 運(yùn)算圖示為:
v1=5 0 0 0 0 0 1 0 1
v2= 5 >> 2 0 0 0 0 0 0 0 1
var v2 = 5 >> 2 = 00000001(2) = 1(10)
運(yùn)算符其他內(nèi)容:
賦值運(yùn)算符:其實(shí)就一個(gè)基本的賦值運(yùn)算符: = ,其含義是將等號(hào)右邊的數(shù)據(jù)放到等號(hào)左邊的變量中去。
錯(cuò)誤的語法:
var v1 = 1,? v2 = 2,? v3 = 5,? v4 = -2;
v1 + v2 = v3 + v4; //錯(cuò),大錯(cuò),大錯(cuò)特錯(cuò)
復(fù)合賦值運(yùn)算符: +=? -=? *=? /=? %=
運(yùn)算符的優(yōu)先級(jí) —— 太多,較為復(fù)雜,記不住,但請(qǐng)記住一下幾條規(guī)則:
1, 要心如明鏡:運(yùn)算符有優(yōu)先級(jí)(先后順序)問題。
2, 括號(hào)最優(yōu)先,等號(hào)(賦值)最落后。
3, 先乘除后加減
4, 想不清楚或用不明白的,使用括號(hào)來解決
5, 括號(hào)只有小括號(hào),可以一層層嵌套。
舉例:
var? year = 2013;
//判斷閏年:一個(gè)年份能被4整除并且不能被100整除是閏年,或者能被400整除,也是閏年。
if (? ( (year? %? 4 == 0)? &&? (year % 100 != 0) )? ||? (year % 400 == 0)? )
{? documment.write(? year? + “是閏年”)? ;}
數(shù)據(jù)的傳值方式:
var v1 = 10;
var v2 = v1;? ? //將v1中值拷貝一份,放到v2這個(gè)變量中去了——此時(shí)也可以說成“將v1的值傳遞給v2”
var v1 = v1 + v1;? ? //v1的值改變了,但并不影響v2——因?yàn)関2本身也是一個(gè)獨(dú)立的變量。document.write(“<br/>v1=" + v1);? ? ? ? //20
document.write("<br/>v2=" + v2);? ? ? ? //10
上述“v2 = v1”就稱為“拷貝傳值”——取得v1的值并拷貝一份,然后賦值給v2
拷貝傳值圖示如下:

var v3 = {name:"小花", age:18, edu:"大學(xué)" };? ? //這是一個(gè)所謂“對(duì)象”類型——其中包括了3個(gè)數(shù)據(jù)。
//操作其中的數(shù)據(jù)類似這樣:document.write("<br />v3這個(gè)對(duì)象的年齡為:" + v3.age);
v3.age = 19;? //v3這個(gè)對(duì)象的age這項(xiàng)數(shù)據(jù)的值重復(fù)賦了一個(gè)新值,類似前面v1 = 20;
var v4 = v3;? ? //此時(shí),是將v3這個(gè)變量的“內(nèi)存地址”傳遞給v4這個(gè)變量,而v3這個(gè)對(duì)象的數(shù)據(jù)本身其實(shí)只是由該地址來獲取。——這就叫做引用傳值——此時(shí),其實(shí)這兩個(gè)變量是一樣的數(shù)據(jù)內(nèi)容,類似一個(gè)人的多個(gè)名字:真名,藝名,網(wǎng)名,小名
document.write("<br />v4這個(gè)對(duì)象的年齡為:" + v4.age);
v3.age = 20;? //
document.write("<br />此時(shí),v4這個(gè)對(duì)象的年齡為:" + v4.age);
圖示:
注意: 基本(簡(jiǎn)單)數(shù)據(jù)類型的變量名和數(shù)據(jù)是直接存在“快速內(nèi)存”(棧內(nèi)存)中,而復(fù)合數(shù)據(jù)類型(對(duì)象和數(shù)組)的存儲(chǔ)分兩個(gè)部分:實(shí)際數(shù)據(jù)存在“慢速內(nèi)存”(堆內(nèi)存)中,棧內(nèi)存中只存變量名和數(shù)據(jù)在堆內(nèi)存中的位置(地址)。如圖所示:

總結(jié):? ? ? ? 在js中,基本數(shù)據(jù)類型使用“拷貝傳值”——傳值的時(shí)候直接就出現(xiàn)了一份新的數(shù)據(jù)(當(dāng)然同時(shí)也是另一個(gè)變量所代表)
? ? ? 復(fù)合數(shù)據(jù)類型(數(shù)組和對(duì)象)使用“引用傳值”——傳值的時(shí)候只是做了一個(gè)地址指向,數(shù)據(jù)仍然只有一份,兩個(gè)變量就指向這同一份數(shù)據(jù)。
if分支結(jié)構(gòu):
控制結(jié)構(gòu):就是使用一定的語法來控制我們程序執(zhí)行的流程——也可以叫“流程控制結(jié)構(gòu)”
分支就是“多條路徑,走一條”。
最簡(jiǎn)形式:
//如果此條件滿足(即條件判斷的結(jié)果是true),則會(huì)執(zhí)行其中的語句塊,否則什么也不做。
if(? 條件判斷語句? )
{
//要執(zhí)行的語句塊——語句塊其實(shí)就是一種表示“n條語句”泛泛說法。
}
二選一分支形式:含義是兩條路,必走一條。
if(? 條件判斷語句? )
{
//要執(zhí)行的語句塊1——前面條件成立時(shí)執(zhí)行
}
else
{
//要執(zhí)行的語句塊2——前面條件不成立時(shí)執(zhí)行
}
多選一分支結(jié)構(gòu):多條路根據(jù)條件的滿足情況走其中一條,但也可能一條都不走:
if(? 條件判斷1 ) //如果此條件滿足,則執(zhí)行語句塊1,然后if就結(jié)束了
{
//語句塊1
}
else? if ( 條件判斷2? ) //如果條件1不滿足,則判斷條件2:如果滿足,則執(zhí)行語句塊2,并結(jié)束if
{
//語句塊2
}
else? if ( 條件判斷3? ) //如果條件2不滿足,則判斷條件3:如果滿足,則執(zhí)行語句塊3,并結(jié)束if
{
//語句塊3
}
…………………… //依此類推。。。。。。如果沒有一個(gè)條件滿足,則其實(shí)到最后什么也不會(huì)執(zhí)行,if結(jié)束。
綜合型式:
if(? 條件判斷1 ) //如果此條件滿足,則執(zhí)行語句塊1,然后if就結(jié)束了
{
//語句塊1
}
else? if ( 條件判斷2? ) //如果條件1不滿足,則判斷條件2:如果滿足,則執(zhí)行語句塊2,并結(jié)束if
{
//語句塊2
}
else? if ( 條件判斷3? ) //如果條件2不滿足,則判斷條件3:如果滿足,則執(zhí)行語句塊3,并結(jié)束if
{
//語句塊3
}
…………….? //依此類推。。。。。。
else
{
//最后的else語句塊。 //此語句塊會(huì)在前面條件都不滿足的時(shí)候去執(zhí)行。
}
注意:綜合型式中是必有一條分支(語句塊)會(huì)得到執(zhí)行。
switch分支結(jié)構(gòu):
switch的分支結(jié)構(gòu)整體含義跟if類似,也是表示“多條路走一條”,其使用形式:
switch (? 一個(gè)變量或表達(dá)式? ) //不管是變量還是表達(dá)式,最終都代表一個(gè)“值”,我們用v1來說話
{
case? 固定值1: //如果v1等于本值1,則會(huì)執(zhí)行語句塊1
//語句塊1;
break; //退出此switch結(jié)構(gòu)
case? 固定值2: 如果v1不等于前面值1,則繼續(xù)判斷是否等于這里的值2,如果相等,執(zhí)行語句2
//語句塊2;
break; //退出此switch結(jié)構(gòu)
case? ………………………………
。。。。。。。。。。。。。。。。。
default: //如果前面各個(gè)判斷都不成立(也就是不相等),則會(huì)執(zhí)行此語句塊。
//注意:switch中此default語句塊可以沒有。
//默認(rèn)語句塊
}
特別注意:if語句其實(shí)是可以使用非常靈活的條件判斷,比如? >? >=? <? <=? ==? !=? ===? ,但,switch這里case的判斷,只能有一種判斷:相等判斷。
while循環(huán)結(jié)構(gòu):
循環(huán)的基本觀念:
1, 循環(huán)就是讓某些程序(語句塊)反復(fù)執(zhí)行
2, 循環(huán)必須能夠有辦法停止——計(jì)算機(jī)沒有自己的判斷能力去決定“累了,不做了”
while循環(huán)的基本語法形式:
while? (? 條件判斷? ) //如果條件判斷滿足了,則會(huì)執(zhí)行其中的語句塊,否則while結(jié)束。
{
//要執(zhí)行的語句塊
} //如果此語句塊執(zhí)行完了,會(huì)立即回到前面while的位置繼續(xù)判斷。
上述形式只是語法上的基本要求,但,在“實(shí)用”中,通常會(huì)需要遵照如下模式:
【循環(huán)變量初始化】
while? (? 【循環(huán)變量作為條件判斷】 )
{
//循環(huán)體,就是要反復(fù)執(zhí)行的語句塊
【循環(huán)變量值的改變】
}
do while循環(huán)結(jié)構(gòu):
do while循環(huán)是一種會(huì)先執(zhí)行一次,然后再根據(jù)判斷條件來決定是否繼續(xù)執(zhí)行并循環(huán)的一種循環(huán)結(jié)構(gòu)。
do while的實(shí)用形式如下:
【循環(huán)變量初始化】
do
{
//循環(huán)體,就是要反復(fù)執(zhí)行的語句塊
【循環(huán)變量值的改變】
} while? (? 【循環(huán)變量作為條件判斷】 ) ;
描述: 先執(zhí)行do后面打括號(hào)中的語句塊,然后再進(jìn)行while語句中的條件判斷,如果判斷成立(true),則繼續(xù)回到上面do后面的大括號(hào)中執(zhí)行語句塊,否則就結(jié)束。
for循環(huán)結(jié)構(gòu)——推薦使用:
for循環(huán)基本形式:
for(? 【循環(huán)變量初始化A】; 【循環(huán)變量作為條件判斷B】; 【循環(huán)變量值的改變C】? )
{
//循環(huán)體D,也就是要反復(fù)執(zhí)行的語句塊
}
for循環(huán)的執(zhí)行邏輯(順序):
A? è? Bètrue? è D? è? C? è Bètrue? è D? è C? è Bè
? ┗èfalseèfor循環(huán)結(jié)束 ┗èfalseèfor循環(huán)結(jié)束
var a = new Date(); //new Date() 就是指“系統(tǒng)時(shí)間”,該時(shí)間其實(shí)就是一個(gè)“復(fù)合數(shù)據(jù)”,其中包括了時(shí)間(日期)中的各項(xiàng)值,比如年份數(shù),月份數(shù),時(shí)分秒,星期等等。其中每個(gè)數(shù)據(jù)都是一個(gè)“數(shù)字”而已。
var week = a.getDay(); //獲取今天系統(tǒng)時(shí)間對(duì)應(yīng)的星期,這里獲取的星期只是一個(gè)0到6的數(shù)而已。0代表禮拜天,1代表禮拜一。
昨日回顧
位運(yùn)算符:指對(duì)二進(jìn)制數(shù)字進(jìn)行的運(yùn)算
按位左移:將所有數(shù)位往左邊移動(dòng)指定的位數(shù),左邊冒出去的不管,右邊補(bǔ)0
按位右移:將所有數(shù)位往右邊移動(dòng)指定的位數(shù),右邊冒出去的不管,左邊補(bǔ)原來左邊的數(shù)字(0或1)
按位與:將兩個(gè)二進(jìn)制數(shù)字的對(duì)應(yīng)位進(jìn)行二進(jìn)制數(shù)的“相與”(只有兩個(gè)是1才是1)
按位或:將兩個(gè)二進(jìn)制數(shù)字的對(duì)應(yīng)位進(jìn)行二進(jìn)制數(shù)的“相或”(只有兩個(gè)是0才是0)
按位非:將一個(gè)二進(jìn)制數(shù)字的每一位“取反”所得結(jié)果。
傳值方式:指將一個(gè)變量(A)的值傳給另一個(gè)變量(B)的時(shí)候的不同機(jī)制問題
拷貝傳值:將變量A的值做一份“拷貝”,并賦值給另一個(gè)變量B——B和A此時(shí)是兩個(gè)相互獨(dú)立的變量,但此時(shí)的值相同(相等)——js中,基本數(shù)據(jù)類型使用拷貝傳值。
引用傳值:將變量A的實(shí)際數(shù)據(jù)的“地址”拷貝給變量B(并沒有拷貝數(shù)據(jù))——B和A是兩個(gè)有關(guān)系的變量,即他們實(shí)際上就是指“一份數(shù)據(jù)”,類似“同樣的內(nèi)容不同的名字”——在js中,復(fù)合數(shù)據(jù)類型使用引用傳值。
流程控制之 if? 分支結(jié)構(gòu)
if( 條件判斷1 )
{
//語句塊1
}
else? if( 條件判斷2 )
{
//語句塊2
}
else? if( 條件判斷3 )
{
//語句塊3
}
。。。。。。。。。。。。
else
{
//else語句塊
}
流程控制之 switch 分支結(jié)構(gòu)
switch (? 一個(gè)變量或表達(dá)式? ) //這里最終都應(yīng)該是一個(gè)“值”
{
case? 值1:
語句塊1
break;
case? 值2:
語句塊2
break;
。。。。。。。。。。。。。。。。。。
default:
默認(rèn)語句塊
}
流程控制之 while 循環(huán)結(jié)構(gòu)
循環(huán)變量的初始化
while? (? 循環(huán)變量判斷 )
{
//語句塊
循環(huán)變量的改變
}
流程控制之 do while 循環(huán)結(jié)構(gòu)
循環(huán)變量的初始化
do
{
//語句塊
循環(huán)變量的改變
}
while (? 循環(huán)變量判斷 );
流程控制之 for 循環(huán)結(jié)構(gòu)
for(? 循環(huán)變量的初始化;循環(huán)變量判斷;循環(huán)變量的改變 )
{
//語句塊
}
昨日回顧
位運(yùn)算符:指對(duì)二進(jìn)制數(shù)字進(jìn)行的運(yùn)算
按位左移:將所有數(shù)位往左邊移動(dòng)指定的位數(shù),左邊冒出去的不管,右邊補(bǔ)0
按位右移:將所有數(shù)位往右邊移動(dòng)指定的位數(shù),右邊冒出去的不管,左邊補(bǔ)原來左邊的數(shù)字(0或1)
按位與:將兩個(gè)二進(jìn)制數(shù)字的對(duì)應(yīng)位進(jìn)行二進(jìn)制數(shù)的“相與”(只有兩個(gè)是1才是1)
按位或:將兩個(gè)二進(jìn)制數(shù)字的對(duì)應(yīng)位進(jìn)行二進(jìn)制數(shù)的“相或”(只有兩個(gè)是0才是0)
按位非:將一個(gè)二進(jìn)制數(shù)字的每一位“取反”所得結(jié)果。
傳值方式:指將一個(gè)變量(A)的值傳給另一個(gè)變量(B)的時(shí)候的不同機(jī)制問題
拷貝傳值:將變量A的值做一份“拷貝”,并賦值給另一個(gè)變量B——B和A此時(shí)是兩個(gè)相互獨(dú)立的變量,但此時(shí)的值相同(相等)——js中,基本數(shù)據(jù)類型使用拷貝傳值。
引用傳值:將變量A的實(shí)際數(shù)據(jù)的“地址”拷貝給變量B(并沒有拷貝數(shù)據(jù))——B和A是兩個(gè)有關(guān)系的變量,即他們實(shí)際上就是指“一份數(shù)據(jù)”,類似“同樣的內(nèi)容不同的名字”——在js中,復(fù)合數(shù)據(jù)類型使用引用傳值。
流程控制之 if? 分支結(jié)構(gòu)
if( 條件判斷1 )
{
//語句塊1
}
else? if( 條件判斷2 )
{
//語句塊2
}
else? if( 條件判斷3 )
{
//語句塊3
}
。。。。。。。。。。。。
else
{
//else語句塊
}
流程控制之 switch 分支結(jié)構(gòu)
switch (? 一個(gè)變量或表達(dá)式? ) //這里最終都應(yīng)該是一個(gè)“值”
{
case? 值1:
語句塊1
break;
case? 值2:
語句塊2
break;
。。。。。。。。。。。。。。。。。。
default:
默認(rèn)語句塊
}
流程控制之 while 循環(huán)結(jié)構(gòu)
循環(huán)變量的初始化
while? (? 循環(huán)變量判斷 )
{
//語句塊
循環(huán)變量的改變
}
流程控制之 do while 循環(huán)結(jié)構(gòu)
循環(huán)變量的初始化
do
{
//語句塊
循環(huán)變量的改變
}
while (? 循環(huán)變量判斷 );
流程控制之 for 循環(huán)結(jié)構(gòu)
for(? 循環(huán)變量的初始化;循環(huán)變量判斷;循環(huán)變量的改變 )
{
//語句塊
}
昨日回顧
位運(yùn)算符:指對(duì)二進(jìn)制數(shù)字進(jìn)行的運(yùn)算
按位左移:將所有數(shù)位往左邊移動(dòng)指定的位數(shù),左邊冒出去的不管,右邊補(bǔ)0
按位右移:將所有數(shù)位往右邊移動(dòng)指定的位數(shù),右邊冒出去的不管,左邊補(bǔ)原來左邊的數(shù)字(0或1)
按位與:將兩個(gè)二進(jìn)制數(shù)字的對(duì)應(yīng)位進(jìn)行二進(jìn)制數(shù)的“相與”(只有兩個(gè)是1才是1)
按位或:將兩個(gè)二進(jìn)制數(shù)字的對(duì)應(yīng)位進(jìn)行二進(jìn)制數(shù)的“相或”(只有兩個(gè)是0才是0)
按位非:將一個(gè)二進(jìn)制數(shù)字的每一位“取反”所得結(jié)果。
傳值方式:指將一個(gè)變量(A)的值傳給另一個(gè)變量(B)的時(shí)候的不同機(jī)制問題
拷貝傳值:將變量A的值做一份“拷貝”,并賦值給另一個(gè)變量B——B和A此時(shí)是兩個(gè)相互獨(dú)立的變量,但此時(shí)的值相同(相等)——js中,基本數(shù)據(jù)類型使用拷貝傳值。
引用傳值:將變量A的實(shí)際數(shù)據(jù)的“地址”拷貝給變量B(并沒有拷貝數(shù)據(jù))——B和A是兩個(gè)有關(guān)系的變量,即他們實(shí)際上就是指“一份數(shù)據(jù)”,類似“同樣的內(nèi)容不同的名字”——在js中,復(fù)合數(shù)據(jù)類型使用引用傳值。
流程控制之 if? 分支結(jié)構(gòu)
if( 條件判斷1 )
{
//語句塊1
}
else? if( 條件判斷2 )
{
//語句塊2
}
else? if( 條件判斷3 )
{
//語句塊3
}
。。。。。。。。。。。。
else
{
//else語句塊
}
流程控制之 switch 分支結(jié)構(gòu)
switch (? 一個(gè)變量或表達(dá)式? ) //這里最終都應(yīng)該是一個(gè)“值”
{
case? 值1:
語句塊1
break;
case? 值2:
語句塊2
break;
。。。。。。。。。。。。。。。。。。
default:
默認(rèn)語句塊
}
流程控制之 while 循環(huán)結(jié)構(gòu)
循環(huán)變量的初始化
while? (? 循環(huán)變量判斷 )
{
//語句塊
循環(huán)變量的改變
}
流程控制之 do while 循環(huán)結(jié)構(gòu)
循環(huán)變量的初始化
do
{
//語句塊
循環(huán)變量的改變
}
while (? 循環(huán)變量判斷 );
流程控制之 for 循環(huán)結(jié)構(gòu)
for(? 循環(huán)變量的初始化;循環(huán)變量判斷;循環(huán)變量的改變 )
{
//語句塊
}