標籤:連結 理解 blank 沒有 圖片 ++ 否則 提交表單 複合
+:算符的加法;連接字串
加法會將其它類型的值,自動轉為字串,然後再進行串連運算!
1 var a=1+2; 2 console.log(‘first: ‘+a); 3 var a=1+2+‘3‘;//先計算1+2,然後與‘3‘字串串連 4 console.log(‘second: ‘+a); 5 var x=10; 6 var a=x+‘‘;//將一個值轉化為字串 7 console.log(‘third: ‘+a); 8 //注意下面這種情況 9 var now=new Date();10 console.log(typeof (now+2));//string11 console.log(typeof (now-1));//number
JavaScript中有9個運算子:
+(加法:Addition),-(加法:Subtraction),*(乘法:Multiplication),/(除法:Division),%(取餘:Remainder),++(自增:Increment),--(自減:Decrement),+(數值運算子:Convert to Number;+x),-(負數值運算子:Negate;-x)
1 console.log(1+2);//3 2 console.log(1-2);//-1 3 console.log(1*2);//2 4 console.log(3/2);//1.5 5 console.log(‘取餘運算的結果的符號由第一個運運算元的符號決定‘); 6 console.log(3%2);//1 7 console.log(-3%2);//-1 8 //數值運算子(+)只需要一個運算元,而加法需要兩個運算元 9 //數值運算子(+)與Number()效果相同10 console.log(‘數值運算子‘);11 console.log(+‘1‘);//112 console.log(+false);//013 console.log(+[]);//0
賦值運算子&複合運算子:注意符號是連在一起的(例如 +=不能寫為 + =,即中間沒有空格;否則報錯!)
1 var x=1,y=2; 2 x=y;//賦值運算子,將y值賦值給x 3 x+=y;//即x=x+y; 4 x-=y;//x=x-y; 5 x*=y;//x=x*y; 6 x/=y;//x=x/y; 7 x%=y;//x=x%y; 8 x>>=y;//x=x>>y; 9 x<<=y;//x=x<<y;10 x >>>=y;//x=x>>>y;11 x &= y;//x=x&y;12 x |=y;//x=x|y;13 x ^=y;//x=x^y;
8個比較子:==(相等,equal),===(嚴格相等,strict equal),!=(不相等),!==(不嚴格相等),<(小於),<=(小於等於),>(大於),>=(大於等於),=(等於)
比較後結果,返回布爾值!
1 console.log(2>1);//true2 console.log(‘cat‘>‘Cat‘);//true,ASCII碼c比C大3 console.log(‘catdog‘>‘cat‘);//true4 console.log(‘abc‘>‘bcde‘);//false
對象作比較時:
1 //對象作比較時,一般先call valueOf()方法;如果返回的還是對象,call toString()方法2 console.log(‘---‘);3 var result=[2] > ‘11‘;//相當於[2].valueOf().toString()>‘11‘4 console.log(result);5 var result1=[2]>[1];//相當於[2].valueOf().toString()>[1].valueOf().toString()6 var result2={x:1}>={y:2};//{x:1}.valueOf().toString()>={y:2}.b=valueOf().toString();即‘[object object]‘>=‘[object object]‘7 console.log(result1,result2);
==運算子的不足:故盡量少用(甚至不用)==運算子,使用===運算子進行相關操作!
1 console.log(false == ‘false‘);//false2 console.log(null == undefined);//true3 console.log(false == ‘‘);//true4 console.log(false == null);//false
位元運算符:直接對二進位位進行運算,共有7個:
或運算(or):|;兩個二進位位均為0,則結果為0;否則為1
與運算(and):&;兩個二進位位均為1,結果為1;否則為0
否運算(not):~;對二進位位取反
異或運算(xor):^;兩個二進位位不同,則為1;否則為0
左移運算(left shift):<<;<<n:相當於乘上2的n次方
右移運算(right shift):>>;>>n:相當於除以2的n次方
帶符號位的右移運算(zero filled right shift):>>>
位元運算直接處理每一個位元位,是非常底層的運算,操作速度非常快;缺點是不直觀,很多場合下不能使用,否則代碼難以理解與排錯!
位元運算只對整數起作用:在javascript內部,數值是以64位浮點數進行儲存,但在位元運算時,是以32位帶符號的整數進行運算,傳回值也是32位帶符號的整數!
轉化為相應整數可以:(|0 ;捨去小數部分,只留下整數部分)
否運算樣本:
1 console.log(‘---‘);2 console.log(~ 3);//-4 可以簡單記憶為一個值與自身的取反值相加得到-13 console.log(~~ 3);//兩次否運算得到本身4 console.log(~~ 3.1);//取整效果,速度最快
異或運算樣本:
1 console.log(1^2);2 //不引入臨時變數,交換兩個資料的值3 var a=99,b=100;4 a^=b;5 b^=a;6 a^=b;7 console.log(a,b);//100,998 console.log(10.5^0);//取整效果
void運算子:執行一個運算式,不返回任何值;也可以說返回undefined
void運算子的一個主要作用是:在超連結中插入代碼,返回undefined,防止頁面跳轉。
1 <body> 2 <!-- 此時會發生跳轉 --> 3 <a href="www.test.com" onclick="f();">test</a> 4 <!-- 此時不發生跳轉 --> 5 <a href="www.test.com" onclick="f();return false;">test1</a> 6 <!--此時也不發生跳轉 --> 7 <a href="javascript:void(f())">test2</a> 8 <script> 9 function f(){10 return false;11 }12 </script>13 <!-- 下面可以使提交表單時頁面不發生跳轉 -->14 <a href="javascript:void(document.form.submit())">test3</a>15 </body>
()可以提高運算優先順序,為了結構清晰,建議複雜的式子總是添加()!
注意:()中只能放置運算式;不能放置語句!
資料類型轉換:強制資料類型轉換;自動資料類型轉換
強制轉換:Number(),String(),Boolean()三個建構函式!
Number():
注意Number()對對象的強制轉換:先valueOf,然後toString
String():
注意String()對對象的強制轉化:先toString,然後valueOf
Boolean():undefined,null,0,NaN,‘‘或""轉化為false;其餘均為true!
而其它諸如[],{}等均為true。
自動轉換:建議需要的地方總是添加Number(),String(),Boolean(),利於檢查和排錯!
參考:阮一峰JavaScript標準參考教程
JavaScript(四):運算子&資料類型轉換