一、JavaScript的運(yùn)算符
a、基本的算術(shù)運(yùn)算符(+、-、*、/、%)
-、*、/、%運(yùn)算符會(huì)在必要的時(shí)候?qū)⒉僮鲾?shù)轉(zhuǎn)換為數(shù)字,無法轉(zhuǎn)換成數(shù)字的操作數(shù)將會(huì)轉(zhuǎn)換成NaN,相應(yīng)的運(yùn)算結(jié)果也是NaN。
JavaScript中所有的數(shù)都是浮點(diǎn)型的,所以除法的運(yùn)算結(jié)果也是浮點(diǎn)型的。5/2=2.5;
%運(yùn)算符返回結(jié)果符號(hào)與被除數(shù)一致。-5%2=-1;5%-2=1
二元加法運(yùn)算符可以對兩個(gè)數(shù)字做加法運(yùn)算,也可以連接字符串。兩個(gè)操作數(shù)中只要一個(gè)是字符串或者可以轉(zhuǎn)換是可以轉(zhuǎn)成字符串的對象,則進(jìn)行字符串連接。
兩個(gè)操作數(shù)中有一個(gè)為對象時(shí),日期對象通過toString()方法轉(zhuǎn)換到原始值然后進(jìn)行字符串連接。其他對象通過先valueOf()、toString()方法得到原始值和另一個(gè)操作數(shù)結(jié)合。
1 console.log(1+2+'2');//"32"2 console.log(1+(2+'2'));//"122"3 console.log(null+"1");//"null1"4 console.log(null+1);//1
b、一元運(yùn)算符(+、-,++、--)
一元運(yùn)算符(+、-)把操作數(shù)轉(zhuǎn)換成數(shù)字(或者NaN),并返回這個(gè)數(shù)值。++、--運(yùn)算符的操作數(shù)是一個(gè)左值(只能出現(xiàn)在賦值運(yùn)算符的左邊)(變量、數(shù)組元素、對象屬性)
1 console.log(+null);//02 console.log(-undefined);//NaN3 var i=1,j=i++; //i=1;j=24 var i=1;j=++i; //i=2,j=2
c、關(guān)系運(yùn)算符(返回結(jié)果總是布爾值)
==(相等)、!= 比較時(shí)允許類型轉(zhuǎn)換
===(恒等) 、!== 不允許類型轉(zhuǎn)化
===幾個(gè)特例:null和undefined不相等、0和-0相等、NaN和任何數(shù)都不等(包括自己),兩個(gè)引用指向同一個(gè)對象時(shí)相等。
== 幾個(gè)特例:null==undefined,對象和字符串比較,調(diào)用valueOf()、toString()方法轉(zhuǎn)成成原始值比較。日期對象調(diào)用toString()方法轉(zhuǎn)換。
兩個(gè)操作數(shù)類型相同的時(shí)候直接比較,兩個(gè)操作數(shù)類型不同時(shí)轉(zhuǎn)換成數(shù)字進(jìn)行比較。
1 var now=new Date();2 console.log(now==now.toString());//true
>、>=、<、<=比較的操作數(shù)可能是任意類型的,但是只有是數(shù)字、字符串才能比較(根據(jù)字符在Unicode編碼表中的順序)。兩個(gè)操作數(shù)只要有一個(gè)不是字符串,則轉(zhuǎn)換成數(shù)字比較。
對象的轉(zhuǎn)換規(guī)則:先使用valueOf()獲取原始值,賦值使用toString()方法。
Infinity比任何數(shù)都大、-Infinity比任何數(shù)都笑,0和-0相等,NaN和任何數(shù)比較都返回false;
1 console.log('one'<3);//false 'one'轉(zhuǎn)成數(shù)字是NaN2 console.log('1'<3);//true
d、in運(yùn)算符
in運(yùn)算符的左操作數(shù)是一個(gè)字符串或者可以轉(zhuǎn)換成字符串。右操作數(shù)是一個(gè)對象。in運(yùn)算符用來判斷做操作數(shù)是不是對象的屬性(包含原型上的 )。
1 var o={x:1,y:2};2 console.log('x' in o);//true 3 console.log("toString" in o);//true4 console.log('z' in o);//false5 6 var arr=[1,3];7 console.log(0 in arr);//true8 console.log('3' in arr);//false
e、instanceof運(yùn)算符
instanceof運(yùn)算符的做操作數(shù)是對象,右操作數(shù)是構(gòu)造函數(shù)。如果對象的原型是構(gòu)造函數(shù)的prototype屬性(包含父鏈),則返回true;
1 var o={x:1,y:2};2 console.log(o instanceof Object);//true
f、邏輯運(yùn)算符
&&、||、! (與或非) 當(dāng)操作數(shù)都是布爾值時(shí),返回的是布爾值
&&、||當(dāng)操作數(shù)中有不是布爾值的,返回值不一定是布爾值;a&&b,當(dāng)a是真的時(shí)候,直接返回b的值,當(dāng)a是假的時(shí)候,直接返回 b;a||b,a為真,返回的a,a為假,返回b;
!運(yùn)算符的結(jié)果總是布爾值,?。可以用來判斷x的真假。
if(a>b) a++;等價(jià)于 (a>b)&&(a++);
function(o,p){
p=p||{};//如果不給p傳值,則p的值為空對象。
}
g、賦值運(yùn)算符
var i=1;
a=b=0;//給多個(gè)變量賦值
a+=b//a=a+b 其他的類似
h、eval()函數(shù)
eval()是JavaScript中的全局函數(shù),接受一個(gè)參數(shù),如果參數(shù)不是字符串,直接返回參數(shù),如果是字符串,字符串會(huì)被當(dāng)成JavaScript源代碼執(zhí)行,編譯失敗會(huì)報(bào)錯(cuò),編譯成功執(zhí)行改代碼,并返回最后一條語句的值,如果最后的語句沒有值,返回undefined。
eval('2+3');//5
i、其他運(yùn)算符
1、三目運(yùn)算符(第一個(gè)表達(dá)式的值為真,:前代碼被執(zhí)行,否則執(zhí)行:后的代碼)
1 x>0?x:-x; //求x的絕對值
2、typeof運(yùn)算符
typeof是一個(gè)一元運(yùn)算符,操作數(shù)可以是任意類型的。返回下列的一個(gè)字符串。
3、delete運(yùn)算符
delete 運(yùn)算符用來刪除對象的屬性,刪除成功返回true;delete運(yùn)算的屬性時(shí)一個(gè)左值,如果不是左值,則返回true,不進(jìn)行其他操作。
1 var o={x:2}2 console.log(delete o.x);//true3 console.log(o.x);//undefined
4、void運(yùn)算符
void運(yùn)算符是一個(gè)一元運(yùn)算符,出現(xiàn)在操作數(shù)之前,操作數(shù)可以是任意類型,操作照常進(jìn)行,但是會(huì)返回undefined。
1 var a=void 2;2 console.log(a); //undefined
5,逗號(hào)運(yùn)算符
逗號(hào)運(yùn)算符是一個(gè)二元運(yùn)算符,它會(huì)先計(jì)算左操作數(shù),在計(jì)算右操作數(shù),最終返回有操作數(shù)。
1 var i,j,k;2 var a=(i=1,j=2,k=3);3 console.log(a); //3
二、JavaScript中常見的語句.
JavaScript中的語句是以分號(hào)結(jié)束的,表達(dá)式計(jì)算出一個(gè)值,但語句用來執(zhí)行以使某個(gè)事件發(fā)生。
a、空語句
空允許沒有內(nèi)容,只有分號(hào),當(dāng)創(chuàng)建一個(gè)具有空循環(huán)體的循環(huán)時(shí),空語句很有用。
1 var arr=[];2 //初始化一個(gè)數(shù)組3 for(var i=0;i<4;arr[i++]=0){4 ;5 }
b、聲明語句
1、var語句
var語句用來聲明變量,可以一次聲明一個(gè)變量,也可以一次聲明多個(gè)變量。用var聲明的全局變量無法通過delete運(yùn)算符刪除。
var i; //聲明一個(gè)變量
var i=1,j=2;//聲明多個(gè)變量并初始化
同時(shí),var語句可以用在循環(huán)體內(nèi);
for(var i=0;i<3;i++){ }//相當(dāng)于var i; for(i=0;i<3;i++){ }
for(var i in o){
console.log(i)
}
2、function
function關(guān)鍵字用來聲明一個(gè)函數(shù),函數(shù)可以寫成表達(dá)式的形式;也可以寫成語句的形式。
函數(shù)聲明語句可以出現(xiàn)在最頂層代碼中,也可以出現(xiàn)在函數(shù)體內(nèi)。函數(shù)聲明語句只能出現(xiàn)在函數(shù)的最頂層,函數(shù)定義不可以出現(xiàn)在while、if或其他循環(huán)語句中。
函數(shù)聲明語句和表達(dá)式包含相同的函數(shù)名,但兩者仍有區(qū)別 ,兩者都創(chuàng)建了新的函數(shù)對象。但是函數(shù)聲明語句中的函數(shù)名是一個(gè)變量,變量指向函數(shù)對象,函數(shù)定義語句被顯式的提前到腳本或者函數(shù)的頂部,在整個(gè)腳本或函數(shù)中是可以見,var聲明的函數(shù),只有變量聲明提前,函數(shù)必須在其后調(diào)用;
1 a();//報(bào)錯(cuò)2 var a=function(){3 console.log(123);4 }
3、條件語句
if(表達(dá)式){
//true執(zhí)行這個(gè)語句塊
}else{
//false 執(zhí)行這個(gè)語句塊
}
switch語句
while語句
while(表達(dá)式){
//如果表達(dá)式的結(jié)果為真,一直執(zhí)行該代碼。
}
do/while語句
do{
//先執(zhí)行一次,再根據(jù)表達(dá)式的值執(zhí)行循環(huán)
}while(表達(dá)式);
for()循環(huán)
for(初始化變量的值;循環(huán)條件;變量重新賦值){
//先執(zhí)行初始化,然后判斷條件,重新賦值,然后判斷條件,重新賦值。。。。
}
for/in
for(var p in object){
//遍歷變量的可枚舉屬性(包含原型鏈上的 )
}
4、跳轉(zhuǎn)語句
break
break語句用于跳出最內(nèi)層循環(huán)或者switch語句。
continue
continue語句用于跳過本次循環(huán),執(zhí)行下一次循環(huán)。
return 語句
return語句用來指定函數(shù)調(diào)用時(shí)的返回值,return語句只出現(xiàn)在函數(shù)內(nèi)部,當(dāng)遇到return語句是,函數(shù)執(zhí)行終止。如果return語句沒有表達(dá)式,或者函數(shù)沒有return語句,則調(diào)用時(shí)的返回值時(shí)undefined。
throw 語句,
throw語句用于顯示拋出一個(gè)錯(cuò)誤,如果找不到最近的異常處理程序,JavaScript會(huì)把異常當(dāng)做程序錯(cuò)誤處理。
throw expression中expression的值可以是任意類型的,可以拋出一個(gè)錯(cuò)誤碼數(shù)字或者一個(gè)可讀的錯(cuò)誤消息的字符串?!?/span>
try/catch/finally語句
try/catch/finally語句用于捕獲代碼中的異常,finally中代碼肯定會(huì)執(zhí)行。
1 var a=function(){2 try{3 throw new Error('代碼出現(xiàn)錯(cuò)誤');4 }catch(e){5 console.log(e.message);6 }7 }8 a();//'代碼出現(xiàn)錯(cuò)誤'
5、其他語句
with語句
with語句用來臨時(shí)擴(kuò)展作用域。
with(obj){
語句
}
把obj對象添加到作用域的頭部。執(zhí)行完代碼塊中的代碼,把作用域鏈恢復(fù)原狀。
"use strict"語句
"use strict" 對腳本和函數(shù)啟動(dòng)嚴(yán)格模式
聯(lián)系客服