js基礎概念-操作符
操作符是操作數據值的符號,也叫做運算符。
按照操作個數分為:一元運算符,二元運算符,三元運算符。
按功能分為:位操作符,布爾操作符,乘性操作符,加性操作符,關系操作符,關系操作符,相等操作符,條件操作符,賦值操作符,逗號操作符。
一元操作符,只能操作一個值的操作符。
1.遞增遞減操作符,執行前置遞增遞減的操作符時都是在語句請求前執行的,在計算機科學領域上講,這種情況通常叫做副效應。
規則:
字符串是有限數字字符轉化成數字值在加減1如果不包含有效數字,轉換成NaN
浮點型正常轉換加減1
布爾型,false將轉換成0加減1true相反
對象,先使用valueof()方法,取得一個可操作的值,如果是NaN在使用toString()方法,對象變量變成數值變量。
2,一元加或減操作符
加操作符,放在數值的前面,對大小沒有影響。如果是非數值類型,按照上面規則轉化。
減操作符,放在數值的後面,數值大小取反。如其他類型,按照規則進行轉化。
位操作符
是最基本層次上的,按內存表示數值的位來操作數值。
都是用32位進行操作的,整數以純二進制格式存儲,31位中的每一位都表示2的冪次方,第一是2的0次冪,第二位2的1次冪,以此類推,沒用到位用0補充。負數,也是二進制存儲,但使用補碼。補碼分三步,1,求這個數值絕對值的二進制碼,例如(求-18的二進制補碼,先求18的二進制碼)。2,再求二進制反碼,就是把所有的0替換成1,所有的1換成0。3,得到的二進制反碼在加1。
例如-18的二進制碼:
0000 0000 0000 0000 0000 0000 0001 0010
然後求二進制反碼,也就是0和1互換
1111 1111 1111 1111 1111 1111 1110 1101
最後在二進制反碼加1
1111 1111 1111 1111 1111 1111 1111 1110
但是ECMAscript不會讓我看見這些,我們只需要理解這個轉換過程就好,在以二進制字符串形式輸出負數時,我們看到的還是負數絕對值二進制碼前面加一個負號。
1,按位非(NOT)
按位非以一個波浪線(~)表示,就是數值的反碼。例如:
var num1 =25; //二進制0000 0000 0000 0000 0000 0000 0000 0001 1001
var num2 =~num; //二進制 1111 1111 1111 1111 1111 1111 1111 1111 1110 0110
alert num2; //-26
也就是操作值的負值減一。
2,按位或(AND)
按位與由一個(&)表示。將兩個數值的每一位對齊,如果兩個數值都為1,結果為1,其它都為0。
3,按位或(OR)
按位或由一個豎線(丨)表示。也是將兩個數值每一位對齊,只有有一個為1,結果就為1,兩個都是0的情況下才返回0。
4,按位異或(XOR)
由(^)表示,只有一個1才返回1。
5,左移
由(<<)表示,會將所有數值的所有位向左移動指定的位數。以0補充移動的位數。
6,有符號的右移
由(>>)表示,會將所有數值的所有位向右移動指定的位數。以隱藏的符號位填充空白的位數。
7,無符號右移
由(>>>)表示,和有符號右移一樣,但是以0填充空位,而且無符號二進制碼當成正數二進制碼,負數以其絕對值的二進制碼補碼形式表示,因此導致無符號右移後結果非常大。
布爾操作符
有3個:非(NOT),與(AND),或(OR)。
1,邏輯非(!)表示,將它操作數轉換成布爾值,然後取反。
{對象返回false;空字符串返回true;非空返回false;操作數的數值位0返回true;任何非0返回false;null返回true;NaN返回true;Undefined返回true。}
也就是將一個值轉換成布爾值,然後對其取反。
2,邏輯與(&&)
屬於短路操作,即如果有一個操作數決定結果,就不會對第二個操作數求值。如果第一個位false,無論第二個為什麽值,結果都不可能為true。
3,邏輯或(||)
只有有一個滿足條件為true ,就返回為true那個為操作數。
乘性操作符
定義了3個乘性操作符:乘法,除法和求模。
1,乘法(*)表示計算連個數乘積。和數學中乘法一樣,要是超出範圍,返回Infinity或-Infinity
2,除法(/)第二個數除以第一個數。
3,求模(余數)由(%)表示。
加性操作符
1,加法(+)都是數值正常加法運算,如果:都是字符串,將兩拼接起來。如一個是數值,一個是字符串,將數值轉換成字符串,然後字符串拼接。如果有一個操作數是對象,數值或布爾值,調用toString()方法。對於underfined和null調用String()函數取得相應的字符串。
*可以運用括號告訴瀏覽器那個先執行。
2,減法(-)和加法類似。
關系運算符
大於(>)小於(<)大於等於(>=)小於等於(<=)
比較規則如下:
如都是數值,執行數值比較。
如兩個操作符都是字符串時,則比較兩個字符串對應的字符編碼值。
如一個是數值,則另一個操作數轉換成一個數值,然後執行數值比較。
如一個操作數是對象,則調用這個對象的valueOf()方法,如果對象沒有這個方法用toString()方法,在根據上面規則比較。
如一個是布爾值,將其轉換成數值在比較。
任何與NaN進行比較都是false。
相等操作符
1,相等(==)如果相等返回true。不相等(!=)成立返回true,轉換規則同上,不同的是null和underfine相等。
2,全等(===),不全等(!==)在不轉換類型的情況下比較。
條件操作符
說白了就是if()else{}語句,也叫三元操作符。
例如:var max =(num1 > num2) ? num1 :num2;
就是說如果前面為true取num1賦給max,false取num2賦給max。
賦值操作符
由(=)表示,也就是二元操作符,就是把右側的值賦給左邊
逗號操作符
在一條語句中執行多個操作,
用於聲明多個變量。例如:var num1 =1,num2=2,num3=3;
用於賦值,只會返回最後一項。例如:var num =(5,1,4,8,0);//num的值為0。
js基礎概念-操作符