運算符和表達式
運算符總共
算術運算:+ - * / % ++ --
關系運算:> < >= <= == === != !===
邏輯運算:&& || !
賦值運算:= += -= *= /= %=
字符連接運算符: +
條件(三目)運算: ?:
特殊運算符: typeof instanceof void delete
算術運算
加+ 減- 乘* 除/ 取余%
注:-除了表示減也可以表示符號, +除了表示加可表示字符串的連接
- 使用%運算符
%取余運算
var i=10%3; // 值為1
var i=10.5%3; // 值為1.5
var -10%3; // 值為-1
var i=10%-3; // 值為1
var i=-10%-3; // 值為-1
- 使用"++"和"--"運算符
++自增運算描姚,增量為1
++在后:先使用變量的值争剿,再對變量進行自增
++在前:先對變量進行自增操作,再使用變量的值
關系運算
關系運算用于表示判斷數(shù)據(jù)之間的大小關系(關系表達式的值為boolean類型)
>大于 <小于 >=大于等于 <=小于等于 ==是否等于 !=是否不等于
注意:
1.== 纪吮,!=
只判斷數(shù)值是否相等,與類型無關;
2.全等===
不僅數(shù)值想等,類型還要相同,不全等!==
邏輯運算
作用:判斷多條件以及條件取反時的作用
邏輯與&&
兩邊為真才為真
邏輯或||
有一邊為真就是真
邏輯非!
真變假,假變真
當作假看待的數(shù)值:
0磨镶、0.0邪蛔、undefined急黎、NaN扎狱、null、空
關于"短路邏輯"的問題
對于&&
左邊為假,后面就不用看了,結果是假
對于||
左邊是真,后面就不用看了,結果是真
賦值運算
使用"="進行賦值問題,=用于為變量賦值
使用擴展賦值表達式,+= -= *= /= %=,具體不做解釋
在絕大多數(shù)變成語言中,a+=3由于運行時可以進行優(yōu)化,執(zhí)行效率會優(yōu)于a=a+3
字符連接運算
+作用于兩個數(shù)字時,表示算術運算勃教;+作用于字符串時,表示字符串拼接運算
條件(三目)運算
表達式1?表達式2:表達式3
(其中表達式1的值應該是一個loobean類型);
若表達式1為true,則整個表達式的值為表達式2的值
若表達式1為flase,則整個表達式的值為表達式3的值
函數(shù)(方法)
函數(shù)的定義
什么是函數(shù)(方法,過程)
函數(shù)(Founction)有時也被稱為方法(Method),或者過程(Procedure)淤击。函數(shù)是一端預定義好,并可以被反復使用的代碼塊。其中可以包含多條可執(zhí)行語句故源,函數(shù)實際上是功能完整的對象污抬。定義函數(shù)
1.使用關鍵字founction定義一個函數(shù)
2.函數(shù)名的定義與標識符一致,大小寫敏感
語法:
founction 函數(shù)名(){
可執(zhí)行語句;
}
- 函數(shù)調(diào)用
允許出現(xiàn)JS腳本的地方都可以實現(xiàn)”函數(shù)調(diào)用“
語法:函數(shù)名()
例如:
parseInt();
parseFloat();
Number();
console.log();
- 定義帶參函數(shù)
聲明執(zhí)行參數(shù)或者使用return關鍵字聲明方法的返回值
定義帶參函數(shù)的語法:
function 函數(shù)名(參數(shù)列表){
可執(zhí)行語句;
}
例如:
founction add(num1,num2,num3){
var sum=num1+num2+num3;
return sum;
}
注:多個參數(shù)使用逗號進行分隔,定義時的參數(shù)绳军,稱之為”形參“
return語句執(zhí)行后,此方法就退出執(zhí)行了,故執(zhí)行return方法后不再執(zhí)行其他語句印机。
- 帶參函數(shù)的調(diào)用
語法:函數(shù)名(參數(shù)列表)
;
參數(shù)列表:由一個或多個值組成门驾,按照定義好的順序射赛,往里傳遞。調(diào)用函數(shù)時所傳遞的參數(shù)值奶是,稱之為”實參“
例如:
founction printInfo(userName,userPwd){
console.log('用戶名:'+userName+'密碼:'+usePwd);
}
調(diào)用1:printInfo('Tom','123')
;
調(diào)用2:var name='Mary';var pwd='456';printInfo(name,pwd)
;
- 帶返回值的函數(shù)
語法:
function 函數(shù)名([參數(shù)列表]){
代碼塊楣责;
return 值/表達式;
}
return:返回
1.將指定的值或者表達式帶出到函數(shù)調(diào)用的位置處
2.并終止當前函數(shù)的執(zhí)行
變量的作用域
什么是作用域聂沙?作用域就是變量與函數(shù)可訪問的范圍,它控制著變量的函數(shù)的可見性和生命周期
在JavaScript中,對象的作用域分為:
1.局部作用域,只在固定的代碼片段中可訪問到
2.全局作用域,一經(jīng)定義,在代碼中任何地方都可以訪問到
- 局部變量
局部變量一般只在固定的代碼片段內(nèi)可訪問到,如某個函數(shù)的內(nèi)部,離開此范圍就無法訪問了
function add(){
var sum=1+2; //局部變量
console.log(sum); //正確訪問
}
console.log(sum); //腳本錯誤
- 全局變量
全局變量在代碼的任意位置都可以訪問到
1.在最外層定義的變量是全局變量
var sum=0; //全局變量
function add(){
sum=1+2;
console.log(sum); //正確
}
console.log(sum); //正確
2.未使用var聲明的變量是全局變量
founction add(){
sum=1+2; //全局變量
}
add(); //必須調(diào)用一次
console.log(sum); //正確
注意:全局變量和局部全量沖突時秆麸,優(yōu)先使用的是局部變量
聲明提前
JS程序在正式執(zhí)行前,會將所有的var聲明變量和function的聲明函數(shù)及汉,預讀到所在作用域的頂部
但是沮趣,對變量的賦值依然會保留在原來的位置上按值傳遞
基本數(shù)據(jù)類型在做參數(shù)傳遞時,實際上的數(shù)據(jù)進行復制得到一個副本坷随,將副本傳遞到函數(shù)參數(shù)中函數(shù)的作用域
與變量類似,函數(shù)也有全局函數(shù)和局部函數(shù)
1.在最外層定義的函數(shù)是全局函數(shù)
function add(num1,num2){ //全局函數(shù)
console.log(num1+num2);
}
add(1,2); //正確
2.在一個函數(shù)內(nèi)部定義的函數(shù)是局部函數(shù)
function outer(){ //全局函數(shù)
function inner(){ //局部函數(shù)
console.log("inner";)
}
}
inner(); //腳本錯誤
遞歸方法
在一個方法體內(nèi)調(diào)用了該方法自身,稱為"方法的遞歸調(diào)用"
例子:
function printNumber(){
if(num>0){
console.log(num);
printNumber(--num);
}
}
全局函數(shù)
- 全局函數(shù)概述
ECMAScript中預定了一組全局函數(shù)可供用戶使用的decodeURI() decodeURIComponent() encodeURI() eval() isFinite() isNaN() parseFloat() parseInt()
- encodeURI與decodeURI
encodeURI()函數(shù)用于對統(tǒng)一資源標識符(URI)進行編碼,返回編碼后的URI字符串
decodeURI()函數(shù)用于對使用encodeURI()編碼之后的字符串進行解碼
- eval函數(shù)
eval函數(shù)用于執(zhí)行string形式出現(xiàn)的JavaScript代碼,
使用此函數(shù)使JS可執(zhí)行動態(tài)的JavaScript源代碼
eval()函數(shù)也可以用于將JSON字符串解析為JavaScript對象