1. ***js是弱類型編程語言:3點:
1.聲明變量時,不用考慮變量中將要存儲的數據類型
2.賦值時,動態判斷數據的類型,同一個變量,先後可保存不同類型的數據。
3.運算時,js會根據自己的需要,動態轉換數據類型
2.大類:
1.隱式轉換:無需程序員干預,而自動完成的轉換。
先討論算數運算中的隱式轉換:
規律:
1.默認情況下,一切轉數字類型,做算數計算
boolean類型,true-->1 flase-->0
2.+法中,只要有一個字符串,都轉爲字符串,+變爲字符串拼接
例:
var n1= 2,n2=3; s1="2",s2="3", b1=true,b2=false; console.log(n1+n2);//5 console.log(s1+n2);//23 console.log(s2-n1);//1 console.log(s2-b1);//2 console.log(s1*b2);//0 console.log(b1+b2);//1 console.log(s1+b2);//2false
從左向右兩兩計算
console.log(n1+s2+b1);//23true console.log(n1+b1+s2);//33
表達式:由數據,變量和運算符組成的公式
*默認,從左向右,兩兩計算
NaN:“不是一個數字”的數字,
=Not a Number
何時遇到:當無法轉爲數字時,或無法正常計算時,結果爲NaN
特點:和任何數據做計算,結果永遠爲NaN
加法計算中,碰上字符串,也會被字符化“NaN”
var s="Hello"; var n=NaN; console.log(s-n);
-->結果爲NaN
typeof(x);返回x的數據類型名稱:Number String Boolean Undefined
2.強制轉換:程序員主動調用專門的函數完成的轉換
1.任意 to String:2種:
var str=x.string();
var str=String(x); -->相當於隱式轉換
區別:***String(x); 萬能方法;
x.string();對於null和undefinded轉不了
何時使用:通常都是js在需要時,自動調用;
2.***任意 to Number :3種:
1.任意 to Number:var n=Number(x); --隱式
何時使用:將非字串類型轉爲數字類型時使用
將純字符串組成的字符串轉爲數字類型時
特例:Number(" ") -->0
2.String to Number:
1. to 整數:var n= parselnt(String(str));
何時使用:將*字符串*轉爲整數時使用
如果傳入的不是字符串,則先隱式轉爲String
原理:從頭開始讀取字符串中每個字符,跳過開頭的空字符,只讀取數字字符,只要碰到第一個不是數字的字符,就退出;不認識小數點。
console.log(parseInt("12px"));//12 console.log(parseInt("1 2px"));//1 console.log(parseInt("12.5px"));//12 console.log(parseInt("$12"));//NaN console.log(parseInt(true));//NaN console.log(parseInt("true"));//NaN
對比:Number(x) vs pareslnt(str)
Number只認識純數字組成的數字串,可轉Bool類型
pareslnt(str)認識包含非數字字符的字符串開頭位置的數字,無法轉換Bool類型
2.String to 浮點數:var n=parseFloat(str);
何時使用:只要將字符串轉爲小數時,用法和parselnt用法完全一樣,只認第一個碰到的小數點。
3.任意類型 to Boolean: var Bool=Boolean(x);
" " 0 NaN underfined null --> false
其他都是true
3.運算符和表達式:(隱式轉換,默認都轉爲number);
程序:人的想法在計算機中的執行步驟
運算符:程序中模擬人的思維運算或判斷的符號
表達式:由數據,變量,和運算符組成的公式
算數運算符:+ - * % ++ --
%模運算(取餘數):m%n:m/n,取 除不盡的餘數部分
何時:
1.判斷能否整除:
比如:判斷奇偶數:m%2等於0,說明m是偶數;m%2不等於0,說明m是奇數;
2.限制計算結果,永遠小於除數;
***遞增,遞減運算:++ --
n++:n=n+1;將n中的值+1,再保存回n中
2種情況:
++n:前++,先將n中的值+1,返回*新*值
n++:後++,將n中的值+1,返回*舊*值
++n或n++,單獨使用,無影響;
但是參與其他表達式中時,會影響執行結果:
var my=10; var lp=my++; console.log(lp);//10 console.log(my);//11 var lp=++my; console.log(lp);//11 console.log(my);//11
筆試題:
var n=3; console.log(n++ + ++n + n++);//從左往右依次相加,n值頁進行累計 3+5+5=13 console.log(++n +n++ + ++n);//從左往右依次,7+7+9=23 console.log(n);//9
***運算關係:做比較,比大小 --> >< <= <= != ==都帶有隱式轉換
返回值:true false
隱式轉換:默認都轉爲數字再比較
特殊情況:
1.如果無法轉爲數字:轉爲NaN
NaN不等於,不大於,不小於任何值,甚至自己 -->NaN!=x -->true
isNaN(num):專門判斷一個num數值是否爲NaN;如果是NaN,就返回true;否則返回false
何時使用:只要判斷一個數值無效,就用isNaN
開發中何時使用:反着用
用isNaN判斷一個num是不是數字,或是否能被隱式轉爲數字使用
isNaN(num):返回true -->num是數字
返回false -->num不是數字
2.比較
undefined vs null
underfined:所有變量的默認初始值,自動賦值
null:主動清空一個變量,釋放一個對象
例:
var n;var m=null;console.log(n==m); -->true
var n;var m=null;console.log(n===m); -->false
typeof(undefined) -->underfined
typeof(null) -->object
===:全等,嚴格相等,首先類型必須相同,其次值相同
何時使用:要求類型相同,且值相等
3.如果參加比較的兩個值都是字符串類型,不再轉數字,而是pk每個字符的unicode號
(怎麼判斷中午的unicode)“李”.charCodeAT(0)
凡是條件:一般都是關係運算或邏輯運算
****邏輯運算:多個條件(關係運算),綜合得出最後的結論,只能返回true/false
隱式轉換:默認轉換爲bool類型:boolean(x) null NaN underfined 0 " "空 轉換爲false
何時使用:只要綜合多個條件,得出最終結論
如何使用:3種:
&&:讀作且,程序中稱之爲“邏輯與”
條件1&&條件2:必須條件1和條件2都爲true,結果才爲true,只要任意一個爲false,結果就爲false
||:讀作或,程序中稱之爲“邏輯或”
條件1||條件2只要:任意一個條件爲true,結果就爲true,只有所有條件都爲false,結果才爲false
!:讀作不,程序中稱之爲“邏輯非”
!條件:顛倒條件的true或者false的結果
使用套路:
***短路邏輯:邏輯運算中,如果前一個條件已經可以得出結論,則後續所有條件不再執行
***利用短路邏輯實現按條件執行語句:條件&&操作:如果條件滿足,則執行操作;否則,什麼也不做
邏輯與: 1個條件,1件事,滿足就做,不滿足就不做
邏輯或:值1||值2:如果值1有效,就返回值1,否則返回值2
筆試題:
4&&5;//5 4||5;//4 0&&5;//0 0||5;//5
何時使用:1個條件,1件事,滿足就做,不滿足就不做
var total=400; total>=500&&(total=total*0.8); console.log("實際收款:"+total);
利用邏輯或實現默認值效果,或者實現二選一取值效果:
值1||值2:如果值1有效,就返回值1,否則返回值2
var reply=prompt("請用戶輸入回覆"); console.log(reply||"主人很懶");
(瞭解即可)位運算:將數值的二進制左移或者右移n位
左移n位:相當於*2的n次方
右移n位:相當於/2的n次方
*賦值運算:基本賦值運算:=
所有表達式都會返回一個結果
***賦值運算的結果,是等號右側表達式的值
(擴展)賦值運算:對變量內部的值進行修改的簡寫方法
比如:total=total*0.8 --> total*=0.8
何時使用擴展賦值運算:需要修改變量中的值,再存回變量中
包括:+= -= *= /= %= 用法完全一樣
***三目運算:根據不同條件,判斷執行不同操作,或返回不同的值
三目運算 即 條件運算
何時使用:多個條件,多件事,必須多選一執行
如何使用:
條件1?操作1:
條件2?操作2:
more?more。。。。
特點: