算數運運算元 + - * / %
1、 數值的+ , - ,* , / , %(取模)和數學運算完全相同
2、 小數點運算時會產生誤差
3、 - * / % 都是隱式轉換成數值,不論有沒有字元
+ 運算
1、 如果是字元和非字元相加,則會自動將非字元隱式轉換成字元 String() 此時+為拼接符首尾相連
2、 數值 + NaN = NaN
3、 true + false = 1
4、 如果一側是布林值,重要是另一側值,會根據另一側轉換
5、 如果兩測都沒有字元或者數值,就會都轉換為數值運算
6、 布林值一旦遇到物件都會隱式轉換為字元相加
true+ {a:1}結果為true[object Object]
7、 true+[]或true+null結果為1
- * / % 都是隱式轉換成數值,不論有沒有字元
賦值運運算元 += -= *= /= %=
看到一個=號時,就是表示將等號右側的結果賦值給等號左側,並且返回一個值
在後設資料的基礎上進行累加 累減等操作,得到計算後的新值,原資料也會發生改變
a += 2; 等價於 a = a+2; 其中2為布長
連續取模無意義
一元運運算元
a++ <=> a=a+1 a為數值的情況下,一元運運算元使用時會全部隱式轉換為數值進行計算
++a與a++的區別:運算後a的值沒有區別
++a是先自增運算,再使用返回a的值
a++是先使用返回a的值,再自增運算
var a=2;
var y=a++;
console.log(y,a);——2,3
var y=++a;
console.log(y,a);——3,3
var a=「10.35」;
a=a-0;
console.log(a);——10(數值10)
快速轉換為數值型
a-=0;快速轉換為數值型
var a=10;
a=a+"";
console.log(a);——10(字元10)
快速轉換為字元型
a+="";快速轉換為字元型
關係運算子 > >= < <= == != ===
關係運算子返回一個布林值
判斷,比較時使用
隱式轉換內容為數值,如果都是字元,則通過ASCII轉換成編碼值,再比較
沒辦法比較時,結果為 false
null和undefined特殊都沒有值 不和其他值進行比較
console.log(null == undefined);——true
console.log(0 == null);——false null是用來切斷參照關係的
console.log("" == 0);——true空字串會隱式轉換成數值 0
console.log("" == false); ——true
console.log(0 == false); ——true
console.log(![] == false); ——true![] 優先將[]看做物件,所以[]就是true ,取反後變成false
console.log([] == false); ——true陣列比較時,如果比較布林值,優先將陣列轉換為字串,再比較
console.log(![] == []);——true
console.log(" " == true); ——false空格字串,布林值轉換為字串console.log(2 == true); ——false布林值轉換為數值
console.log(undefined == false); ——false不能轉換為undefined,所以不相同
console.log(null == false); ——false不能轉換為null,所以不相同
console.log({a:1} == true); ——false不能轉換為物件,所以不相同
console.log(NaN == NaN);——false非數值永不等
console.log(isNaN(Number(「a」)));判斷是否是數值型的方法
console.log(「undefined」 == undefined);——false
console.log(「null」 == null); ——false
console.log("" == null); ——false
console.log("" == undefined); ——false
console.log("[object Object]"=={a:1});——true
console.log({a:1}.toString());——[object object]
console.log([「a」].toString())——a
console.log(「a」 == [「a」]);——true陣列轉換為字串
console.log(「3」 == true);——false字串和布林值比較,布林值轉字串
console.log(3 == true);——false數值和布林值比較,布林值轉換為數值
當字元型別和參照型別比較時,優先將參照型別執行toString()轉換為字元型別
isNaN() 用來判斷是不是非數值
返回值 true => 非數值
false => 數值
!==(絕對不等) 和 === (絕對相等)都不會隱式轉換
===
使下列函數能執行的a
1、 if(!a){
}——"",undefined,0,null,false,NaN
2、 if(a==false){
}—— 0 "" false
3、 if(a==undefined){
}——null undefined
4、 if(a===undefined){
}——undefined
Object.is類似於===
console.log(Object.is(「3」,3));——false
console.log(Object.is(3,3));——true
console.log(Object.is(NaN,NaN));——true
console.log(Object.is([], [])😉——false
==是否相等 其實是由valueOf方式決定的,在此不做詳細解釋
if(a==1 && a==2 && a==3){
console.log("aaa");
}
邏輯運運算元&& || !
&&
一假即假
遇到第一個條件為假,則停止後續的判斷,返回其假值,否則則一直執行到最後,若最後一個條件為真,則返回該值
true && true =true 返回最後一個值
true && false =false 返回false對應的值
false && true =false 返回false對應的值
false && false =false 返回第一次遇見false對應的值
||
一真即真
遇到第一個條件為真,則停止後續的判斷,返回其真值,否則則一直執行到最後,若最後一個條件為假,則返回該值
true || true =true; 第一個遇到true的對於值
true || false =true; 返回true對應的值
false || true =true; 返回true對應的值
false || false =false 返回最後一個false對應的值
!
遇到! 優先將後面的內容先轉換布林值再取反
簡單案例:
1、點選按鈕實現反選(建立兩個div,ID分別為bn0和bn1)
var bn0=document.getElementById(「bn0」);
var bn1=document.getElementById(「bn1」);
bn0.οnclick=function(){
bn1.checked=!bn0.checked;
}
2、實現點選按鈕html背景色改變(建立一個按鈕,ID為bn0)
document.documentElement HTML標籤
var bool=false;
var bn0=document.getElementById(「bn0」);
bn0.οnclick=function(){
bool=!bool;
if(bool){
document.documentElement.style.backgroundColor="#000000";
else{
document.documentElement.style.backgroundColor="#FFFFFF";
}