數(shù)據(jù)的運(yùn)算:
說(shuō)直白點(diǎn):就是利用數(shù)學(xué)的運(yùn)算方式來(lái)對(duì)我們變量中存儲(chǔ)的數(shù)據(jù)進(jìn)行:計(jì)算,對(duì)比,條件設(shè)置,賦值等處理
運(yùn)算所使用的符號(hào)叫做運(yùn)算符:
運(yùn)算符分為:算術(shù)運(yùn)算符,關(guān)系運(yùn)算符,邏輯運(yùn)算符,賦值運(yùn)算符,三目運(yùn)算;
算術(shù)運(yùn)算符:
加號(hào):+:當(dāng)+號(hào)在運(yùn)算中遇到字符串,加號(hào)變成拼接符,所有數(shù)據(jù)類型都變成字符串;當(dāng)布爾值參與數(shù)字相加的時(shí)候,布爾值自動(dòng)轉(zhuǎn)化為數(shù)字,true=1;false=0;
var a=10;
var b="12";
var c=a+b;
console.log(c)//1012
console.log(typeof(c))//string
var a=true;
var b=false;
var c=a+b//1,數(shù)據(jù)類型:number。
減號(hào):-;當(dāng)數(shù)字與數(shù)字類型的字符串進(jìn)行減法運(yùn)算的時(shí)候,計(jì)算機(jī)先強(qiáng)制將數(shù)字類型字符串轉(zhuǎn)變位數(shù)字在參與計(jì)算。得到結(jié)果是一個(gè)number類型。
var a=10;
var b="12";
var c=a-b;
console.log(c)//-2
console.log(typeof(c))//number
var a=10;
var b="12a";
var c=a-b;
console.log(c);//NaN
console.log(typeof(c));//number
所有的數(shù)據(jù)類型在參與減法運(yùn)算中,都會(huì)被強(qiáng)制轉(zhuǎn)化為數(shù)字,在參與計(jì)算。當(dāng)非數(shù)字字符串參與減法運(yùn)算,結(jié)果出現(xiàn)NaN。
乘號(hào):*
一切乘法運(yùn)算中,先把數(shù)據(jù)類型轉(zhuǎn)化為數(shù)字,然后相乘。當(dāng)非數(shù)字字符串參與乘法運(yùn)算得到NaN結(jié)果。
當(dāng)我們遇到NaN數(shù)據(jù)的時(shí)候,我們不能直接使用typeof()進(jìn)行判斷,而是需要isNaN()進(jìn)行判斷,判斷的結(jié)果是:TRUE或者FALSE
在我們做算術(shù)運(yùn)算中,如果出現(xiàn)小數(shù)的加減乘除運(yùn)算的時(shí)候,出現(xiàn)小數(shù)點(diǎn)后的取值出現(xiàn)誤差,這樣的誤差叫做舍入誤差。
解決方案:c.toFixed(2);意思是將變量c的結(jié)果取小數(shù)點(diǎn)后兩位數(shù),并且自動(dòng)四舍五入。
例如:var c=1.2-0.5;//0.7000000001;c.toFixed(2)//0.70;
除法:/,所有的數(shù)據(jù)先轉(zhuǎn)化為數(shù)字類型,然后參與相除,1除以0//infinity,無(wú)窮大。、
求模運(yùn)算:a%b
var a=123;
var b=10;
var c=a%b;
c的結(jié)果是123除以10之后所剩余的量。結(jié)果為3.所以求模運(yùn)算就是一種取除法中的余數(shù)運(yùn)算。
自增運(yùn)算:
var a=10;
console.log(a+a++);
a++在運(yùn)算中先參與運(yùn)算在第二步運(yùn)算的時(shí)候才開始加1;
a + a++=10+10=20//這個(gè)時(shí)候的a++必須等待第三個(gè)a出來(lái)才會(huì)讓第三個(gè)a+1;
a++ +a =10+11=21//此時(shí)a++參與第一步運(yùn)算,遇到第二a,所以他將加1之后的值賦給了第二個(gè)a.
練習(xí)作業(yè):
var a=2;
var b=3;
a+b++ +a++ +b=?
在自增運(yùn)算中,n++和++n的區(qū)別是什么?
n++是先運(yùn)算后自加,只有公式中出現(xiàn)第二個(gè)n才會(huì)講增加的1賦值給第二個(gè)n上。
++n是先自加后運(yùn)算。
在不參與運(yùn)算的情況下,n++,與++n的值是一樣的。
計(jì)算機(jī)的計(jì)算順序:1,先算括號(hào)內(nèi),2,再算乘除,3,算加減
var a=1;
var b=2;
var c=3;
(a++*++a -++b)/++c=?
關(guān)系運(yùn)算符:
其實(shí)就是求幾個(gè)數(shù)據(jù)之間的大小關(guān)系。
有大于>,
小于<
大于等于>=
小于等于<=
==等于
===絕對(duì)等于
!=不等于;
關(guān)系運(yùn)算結(jié)果返回的是一個(gè)boolean值,只有true或者false;
面試題:==和===的區(qū)別。
==是先進(jìn)行數(shù)據(jù)類型轉(zhuǎn)化,然后再比較是否相等。
===是不進(jìn)行數(shù)據(jù)類型轉(zhuǎn)化,直接比較,更加嚴(yán)格一些、
在關(guān)系運(yùn)算中,一切數(shù)據(jù)類型遇到數(shù)字,都先轉(zhuǎn)化為數(shù)字再對(duì)比。如果無(wú)法轉(zhuǎn)化為數(shù)字,就會(huì)出現(xiàn)false結(jié)果
再字符串的關(guān)系對(duì)比中,按照大小順序是根據(jù)Unicode編碼順序來(lái)進(jìn)行的。
A-Z之間的Unicode編碼順序:65-90;
a-z之間的unciode編碼順序:97-122;
0-9之間的順序:48-57;
漢字的Unicode編碼順序:u4e00-9fa05
邏輯運(yùn)算:
其實(shí)就是設(shè)置運(yùn)算的條件,有“與”“或”“非”三種
var a=prompt("請(qǐng)輸入數(shù)字")
if(!(a>70)){//邏輯非運(yùn)算,凡是小于等于70才成立
alert("你好");
}
if(a>70||a>90){//邏輯或運(yùn)算,多個(gè)條件滿足其一即可
alert("你好");
}
if(a>70&&a<90){//邏輯與運(yùn)算。多個(gè)條件必須同時(shí)滿足才行。
alert("你好");
}
賦值符運(yùn)算:
賦值運(yùn)算 =? +=? -=? *=? /=? %=
等號(hào):將等號(hào)右側(cè)的內(nèi)容賦值給左側(cè)的名字。
+=:str+=5;str=str+5 //此時(shí)返回的結(jié)果是11
面試題:
var str="hello";
var str=str+"world";
創(chuàng)建了幾個(gè)變量?標(biāo)準(zhǔn)答案:3個(gè);
解析過(guò)程:因?yàn)樽址兞恳坏﹦?chuàng)建,空間不可改變,所以為了容納helloworld,我們必須創(chuàng)建一個(gè)新變量他的值就是helloworld。加上之前的hello變量和world變量,總共是3個(gè)。
條件三目運(yùn)算:
其實(shí)就是一個(gè)條件判斷運(yùn)算。
其中語(yǔ)法包含:條件?“條件成立執(zhí)行的結(jié)果”:“條件不成立執(zhí)行的結(jié)果”
數(shù)據(jù)類型的轉(zhuǎn)化:
隱式轉(zhuǎn)化:
在數(shù)據(jù)運(yùn)算中,js程序自動(dòng)根據(jù)運(yùn)算的環(huán)境,對(duì)數(shù)據(jù)類型進(jìn)行自動(dòng)轉(zhuǎn)化,例如在加運(yùn)算中,所有數(shù)據(jù)遇到字符串,都會(huì)變成字符串,在關(guān)系運(yùn)算中,
所有數(shù)據(jù)遇到number都會(huì)轉(zhuǎn)變成number類型。這樣的轉(zhuǎn)化被稱為隱式轉(zhuǎn)化。
隱式轉(zhuǎn)化:會(huì)自動(dòng)根據(jù)環(huán)境進(jìn)行轉(zhuǎn)化,不需要人工操作,缺點(diǎn):轉(zhuǎn)化不可控
為了能夠讓數(shù)據(jù)的使用可控,我們需要能夠?qū)?shù)據(jù)轉(zhuǎn)化人為可控制。
這種需要人為轉(zhuǎn)化的:我們稱為顯式轉(zhuǎn)化或者強(qiáng)制轉(zhuǎn)化。
強(qiáng)制轉(zhuǎn)化就需要我們使用相應(yīng)的數(shù)據(jù)類型轉(zhuǎn)化的方法;
1,所有數(shù)據(jù)變成string類型:
方法1,String(“內(nèi)容”);常用
方法2,x.toString();
2, 所有數(shù)據(jù)轉(zhuǎn)化為number類型:
方法1:Number(x);
//將所有數(shù)據(jù)轉(zhuǎn)化為number類型,如果遇到非數(shù)字類型轉(zhuǎn)化結(jié)果為:NaN;帶有小數(shù)點(diǎn)的數(shù)字內(nèi)容直接轉(zhuǎn)化為小數(shù)。
方法2:parseInt(x);將所有數(shù)據(jù)轉(zhuǎn)化為整數(shù)。遇到數(shù)字在前,文字內(nèi)容在后的,該方法直接讀取能夠讀到的數(shù)字部分轉(zhuǎn)化為整數(shù)。,小數(shù)只顯示整數(shù)部分
方法3:parseFloat(x);將所有數(shù)據(jù)讀取出來(lái),如果有小數(shù)將顯示小數(shù)內(nèi)容。
總結(jié):parseInt(),parseFloat(),只是將字符串string轉(zhuǎn)化為數(shù)字類型number,所以在上述兩種方法中。圓括號(hào)內(nèi)如果直接寫內(nèi)容就必須加雙/單引號(hào)。
練習(xí):做一個(gè)超市的收銀程序:
1,工作流程:
3,Boolean(x)//將所有數(shù)據(jù)類型轉(zhuǎn)化為布爾值。除了,null,undefined,""空字符,0,false這些返回結(jié)果是false之外,其他都是返回true。