表達式是一個產生結果值的式子。JS中的表達式通常由常量、變量和運算符組成。表達式能夠做爲參數傳遞給函數,或者將表達式結果賦予變量保存起來。表達式的結果值有多種類型,如:字符串類型、數值類型、布爾類型等。所以表達式有邏輯表達式、數值表達式、布爾表達式之分。
操做數指表達式中的常量或變量,是表達式的一個重要組成部分。如:
(A+B+C)/D
其中ABCD就是操做數,「+」和「/」則是運算符。操做數的數據類型受表達式的類型和運算符所支持的數據類型決定。編程
運算符是指程序設計語言中有運算意義的符號。在JS中,運算符有單目和多目之分,單目運算符帶一個操做數,多目運算符帶多個操做數。運算符包括:算術運算符、關係運算符、字符串運算符、邏輯運算符和位運算符。數組
算數運算符是定義數學運算的符號,一般在數學表達式中使用,實現數據類型操做數間的數學計算。主要包括:加法(+
)、減法(-
)、乘法(*
)、除法(/
)、取模(%
)、正負號(+/-
)、遞增(++
)、遞減(--
)。
其中加減乘除取模爲雙目運算符,其他幾個爲單目運算符。函數
關係運算符是比較兩個操做數大、小於或相等的運算符。返回一個布爾值,操做數的類型能夠任意。包括相等(==
)、等同(===
)、不等(!=
)、不等同(!==
)、小於(<
)、小於或等於(<=
)、大於(>
)、大於等於(>=
)以及instanceof這幾種。測試
==
判斷兩個操做數是否相等,屬於雙目運算符若是相等返回true,不然返回false,屬於雙目運算符。兩個操做數的數據類型能夠任意,由於JS屬於弱類型的 語言,所以能夠比較兩種不一樣類型的數據。運行時,==
會把兩端的操做數轉換爲同一種數據類型後再做比較。以下:ui
var a="10"; var b=10; if( a == b ) { alert ( "a等於b,==使兩端的操做數發生了類型轉換" ) }
注意:==
並不是嚴格意義上的相等,只要類型轉換後的數據仍然相等,就返回true。this
===
等同運算符是嚴格意義上的相等,屬於雙目運算符,兩個值和它們的類型徹底一致時才返回true,兩端的操做室可使變量,也能夠是常量,數據類型不限。上面示例若是換成用等同運算符===
作比較,結果則返回false,由於a和b的數據類型並不同。加密
!=
不相等運算符屬於雙目運算符,返回一個布爾值,表示兩個操做數是否相等。兩個操做數類型任意,能夠是變量,也能夠是常量。設計
!==
不等同運算符屬於雙目運算符,效果與等同運算符正好相反,運算符兩端的操做數能夠是變量或常量,數據類型不限。
小於運算符,小於等於運算符,大於運算符,大於等於運算符用法與數學意義上類似,都是雙目運算符。指針
in運算符用來檢查對象中是否有某特定屬性,一般,在數組對象中存在一種稱爲元素索引的屬性集合,該集合的每一個元素都是一個非負整型值,所以能夠經過in運算符取得數組索引集合。以下:code
var fruit = ["蘋果","5","梨","3.5","葡萄","7","香蕉","2"]; for( index in fruit ) { if ( index%2==0 ) { document.write( fruit[index]+"的單價爲:" ) } else { document.write( fruit[index]+"元"+"<br>" ) } }
intanceof運算符返回一個布爾值,代表某對象是不是某個類的實例。獲得一個對象時,有時須要得知其屬於哪一個類,肯定對象的身份,使用語法以下:
result = Obj instanceof Class
若是Obj是類Class的對象,則result的值爲true,不然爲false。
當要肯定某個對象的類型是,能夠用typeof運算符。
字符串也是一種數據,一樣也存在相應的計算,字符串運算符主要包括+
、>
、<
、>=
、<=
這幾種。
邏輯運算符包括邏輯與(&&
)、邏輯或(||
)、邏輯非(!
)等。
邏輯與(&&
)運算符屬於雙目運算符,將第一個操做數與第二個操做數相與,返回一個布爾值。示例:
<body> 單擊下載該資源 <button onclick="download()">下載</button> <script> var register = true, level = 3, balance = 25; function download() { if ( register && (level >= 2) && (balance >= 30) ) { //要想下載資源,必須同時知足以上三個條件,不然沒法下載 alert ("您能夠下載該資源!") }else{ alert ("沒法下載!") } } </script> </body>
邏輯或運算符(||
)屬於雙目運算符,對兩個操做數進行或運算並返回一個布爾值,返回值代表,兩個操做數中是否至少有一個值爲true。示例:
var intrSelf=prompt("愛好:"); document.write("愛好:"+(intrSelf||"什麼都沒留下...")); //其中intrSelf和"什麼都沒留下..."選其一便可。
邏輯非運算符(!
)屬於單目運算符,對操做數的邏輯值取反,數據類型不限。和邏輯非運算符結合後的數據類型皆被當作布爾型。
位運算符是對變量的二進制間進行邏輯運算,於是取得一個新的值。包括位與(&
)、位或(|
)、位異或(^
)、位非(~
)和移位運算符(>>
,<<
)。
位與運算符&
屬於雙目運算符,兩個操做數的對應二進制位相與,對應兩個位都爲1結果之中對應位也爲1,不然爲0,結果值的長度和兩個操做數中位數多者相同,一般用於測試某個操做數中的某位是否爲1。示例:
某地下通道有8條行車線,每5分鐘只能隨機容許其中數條通車,用紅綠燈控制車道的通停,1表示綠燈,0表示紅燈,測試一、三、五、7車道是否開通:
var curState = 108; //全部車道當前狀態,轉爲二進制後與下面的數相與 if( curState & 85 == 85 ){ //若是1357車道爲開通,用二進制表示爲10101,轉爲十進制爲85 alert( "一、三、五、7車道爲開通狀態" ) }else{ alert( "一、三、五、7車道爲關閉狀態" ) }
位或運算符|
屬於雙目運算符,兩個操做數相對應的位若是都不爲0,則結果值的相應位爲1,不然爲0。例如2的二進制碼爲10,3的二進制碼爲11,2和3做位或運算得3。
位異或運算符^
屬於雙目運算符,當兩個操做數對應位不相同時,結果值的相應位即爲1,不然爲0。示例:
用異或運算實現信息加密解密。爲了避免使密碼「123456」以明文的形式存放,先將其加密,密鑰爲「666666」,輸出加密後和解密後的密碼:
var psw = 123456; var key = 666666; var codePsw = psw ^ key; alert ( "加密後的密碼爲:"+codePsw ); alert ( "解密後的密碼爲:"+ (codePsw ^ key) )
位非運算符~
屬於單目運算符,實現對操做數按位取反運算。
對於字符串數據,按位取反後值爲-1,對布爾值true和false取反分別得-2和-1,對數值數據+N得 -(N+1),-(N)得N-1。測試:
for ( var i = 0, msg1 = "正數取反:"; i <= 10; i++ ) { msg1 += i + " => "+ ( ~i )+"; "; } console.log(msg1); for ( var i = -10, msg2 = "負數取反:"; i < 0 ; i++ ) { msg2 += i + " => "+ ( ~i )+"; "; } console.log(msg2); var a=true, b=false; console.log( "布爾值取反:" + a + " => " + (~a) + ", " + b + " => " + (~b) ); var name="Tom"; console.log( "字符串取反:" + name + " => " + (~name) );
左移位運算符<<
實現總體向左移動低位補0的功能,屬於雙目運算。如50 << 3
表示將50的二進制位序列總體向左移動3位,代碼以下:
var num = 50; num = num << 3; console.log( num );//400
注:向左移n位至關於原數乘以2的n次方。
右移運算符包括帶符號位右移和不帶符號位右移,不一樣之處是高位的處理方式不一樣。當移動的是有符號數,左邊空出的位用數的符號位填充,向右移動超出的位將被丟棄。
除了前面講到的算術運算符邏輯運算符等,還有一些其餘的運算符,如條件運算符、new運算符、void運算符、typeof運算符、點運算符、數組存取運算符、delete運算符、逗號運算符、this運算符等。
條件運算符?:
屬於三目運算符,能夠根據條件在兩個語句間選擇一個來執行。語法以下:
條件表達式 ? 語句1 : 語句2
參數說明:
語句2,若是條件表達式返回false,則執行。
建立對象的一種方式是直接使用new。
前面的表達式均可以返回一個值,然而有些地方卻不須要返回值。此時能夠用void運算符來避免表達式返回值。
JS中每個數據都屬於一種數據類型,使用typeof運算符,便可得到數據的類型名。
又稱爲點號運算符,使用符號「.」表示。做用是讀取對象的屬性,或者保存值到對象的屬性,或者調用對象的方法,使用語法以下:
對象名.屬性名或方法名
數組以元素爲單位保存數據,讀取其中的數據時須要讀出元素。JS用[]
運算符用於存取數組元素,方括號中是要存取的元素的下標。語法以下:
數組名[下標]
var student = new Object(); student.name = "Tom"; student.age = "15"; student.sex = "male"; console.log( student ); delete student.sex; console.log( student );
函數調用運算符call
,做用於Function對象。調用對象的一個方法,並以另外一個對象做替換爲當前對象,以改變this指針的方向。
function stuInfo(){ document.write( this.name + " " + this.age + "<br>" ) }; function Student(_name,_age){ this.name = _name; this.age = _age; } var stu1 = new Student("Tom",20); var stu2 = new Student("Lily",21); stuInfo.call(stu1); stuInfo.call(stu2);
this嚴格地說是個關鍵字,也能夠理解爲運算符。面向對象編程中要引用當前對象,this能夠返回當前對象的引用。用法以下:
this.屬性名或方法名