表達式與運算符

表達式

    表達式是一個產生結果值的式子。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運算符用來檢查對象中是否有某特定屬性,一般,在數組對象中存在一種稱爲元素索引的屬性集合,該集合的每一個元素都是一個非負整型值,所以能夠經過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運算符

    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
參數說明:

  • 條件表達式,結果被做爲布爾值處理的表達式。
  • 語句1,若是條件表達式返回true,則執行。
  • 語句2,若是條件表達式返回false,則執行。

    new運算符

        建立對象的一種方式是直接使用new。

    void運算符

        前面的表達式均可以返回一個值,然而有些地方卻不須要返回值。此時能夠用void運算符來避免表達式返回值。

    類型檢測運算符

        JS中每個數據都屬於一種數據類型,使用typeof運算符,便可得到數據的類型名。

    對象屬性存取運算符

        又稱爲點號運算符,使用符號「.」表示。做用是讀取對象的屬性,或者保存值到對象的屬性,或者調用對象的方法,使用語法以下:
    對象名.屬性名或方法名

    數組存取運算符

        數組以元素爲單位保存數據,讀取其中的數據時須要讀出元素。JS用[]運算符用於存取數組元素,方括號中是要存取的元素的下標。語法以下:
    數組名[下標]

    delete運算符
        delete運算符可刪除對象的一個屬性或數組的一個元素,對於動態添加的屬性能夠用delete運算符將其刪除。
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能夠返回當前對象的引用。用法以下:
this.屬性名或方法名

相關文章
相關標籤/搜索