javascript運算符與表達式

表達式javascript

表達式是關鍵字、運算符、變量以及文字的組合,用來生成字符串、數字或對象。一個表達式能夠完成計算、處理字符、調用函數、或者驗證數據等操做。java

表達式的值是表達式運算的結果,常量表達式的值就是常量自己,變量表達式的值則是變量引用的值。 web

在實際編程中,可使用運算數和運算符創建複雜的表達式,運算數是一個表達式內的變量和常量,運算符是表達式中用來處理運算數的各類符號。 express

常量表達式:"skycobra"編程

變量表達式:example數組

賦值表達式:stringExample = 「小郭」函數

 

運算符的優先級測試

若是表達式中存在多個運算符,那麼它們老是按照必定的順序被執行,表達式中運算符的執行順序被稱爲運算符的優先級。this

使用運算符()能夠改變默認的運算順序,由於括號運算符的優先級高於其餘運算符的優先級。編碼

 賦值操做的優先級很是低,幾乎老是最後才被執行

 

運算符的類型

不一樣運算符對其處理的運算數存在類型要求,例如不能將兩個由非數字字符組成的字符串進行乘法運算。

javascript會在運算過程當中,按須要自動轉換運算數的類型,例如由數字組成的字符串在進行乘法運算時將自動轉換成數字。

運算數的類型不必定與表達式的結果相同,例如比較表達式中的運算數每每不是布爾型數據,而返回結果老是布爾型數據。

根據運算數的個數,能夠將運算符分爲三種類型:一元運算符、二元運算符和三元運算符。 

一元運算符是指只須要一個運算數參與運算的運算符,一元運算符的典型應用是取反運算。!1 !!1

二元運算符須要兩個運算數參與運算,javascrpt中的大部分運算符都是二元運算符,好比加法運算符、比較運算符等等。

還支持三元運算符?:,這種運算符比較特殊,它能夠將三個表達式合併爲一個複雜的表達式。

 

 

賦值運算符 (=)

給變量賦值

result = expression

說明

= 運算符和其餘運算符同樣,除了把值賦給變量外,使用它的表達式還有一個值。這就意味着能夠象下面這樣把賦值操做連起來寫:

j = k = l = 0;

執行完該例子語句後,j、k、和 l 的值都等於零。

由於(=)被定義爲一個運算符,因此能夠將它運用於更復雜的表達式。如:

(a=b)==0  //先給a賦值b,再檢測a的值是否爲0.

 賦值運算符的結合性是從右到左的,所以能夠這樣用:

 a=b=c=d=100    //給多個變量賦同一個值

加法賦值運算符 (+=)

將變量值與表達式值相加,並將和賦給該變量。

result += expression

加法運算符 (+)

將數字表達式的值加到另外一數字表達式上,或鏈接兩個字符串。

result = expression1 + expression2

 

若是「+」(加號)運算符表達式中一個是字符串,而另外一個不是,則另外一個會被自動轉換爲字符串;

若是加號運算符中一個運算數爲對象,則這個對象會被轉化爲能夠進行加法運算的數字或能夠進行鏈接運算的字符串,這一轉化是經過調用對象的valueof()或tostring()方法來實現的。

 

 

加號運算符有將參數轉化爲數字的功能,若是不能轉化爲數字則返回NaN

如 var a=」100」;   var b=+a  此時b的值爲數字100

+運算符用於數字或字符串時,並不必定就都會轉化成字符串進行鏈接,如:

     var a=1+2+」hello」    //結果爲3hello

     var b=」hello」+1+2    //結果爲hello12

產生這種狀況的緣由是 + 運算符是從左到右進行運算的。

 

減法賦值運算符 (-=)

從變量值中減去表達式值,並將結果賦給該變量。

result -= expression

說明

使用 -= 運算符與使用下面的語句是等效的:

result = result - expression

減法運算符 (-)

從一個表達式的值中減去另外一個表達式的值,只有一個表達式時取其相反數。

語法 1

result = number1 - number2

語法 2

-number

說明

在語法 1 中,- 運算符是算術減法運算符,用來得到兩個數值之間的差。在語法 2 中,- 運算符被用做一元取負運算符,用來指出一個表達式的負值。

對於語法 2,和全部一元運算符同樣,表達式按照下面的規則來求值:

  • 若是應用於 undefinednull 表達式,則會產生一個運行時錯誤。
  • 對象被轉換爲字符串。
  • 若是可能,則字符串被轉換爲數值。若是不能,則會產生一個運行時錯誤。
  • Boolean 值被看成數值(若是是 false 則爲 0,若是是 true 則爲 1)。

該運算符被用來產生數值。 在語法 2 中,若是生成的數值不是零,則 result 與生成的數值顛倒符號後是相等的。若是生成的數值是零,則 result 是零。

若是「-」減法運算符的運算數不是數字,那麼系統會自動把它們轉化爲數字。

也就是說加號運算數會被優先轉化爲字符串,而減號運算數會被優先轉化爲數字。以此類推,只能進行數字運算的運算符的運算數都將被轉化爲數字。(比較運算符也會優先轉化爲數字進行比較)

 

 

遞增 (++) 和遞減 (--) 運算符

變量值遞增一或遞減一。

語法 1

result = ++variable
result = --variable
result = variable++

result = variable--

語法 2

++variable
--variable
variable++

variable--

說明

遞增和遞減運算符,是修改存在變量中的值的快捷方式。包含其中一個這種運算符的表達式的值,依賴於該運算符是在變量前面仍是在變量後面:

var j, k;
k = 2;
j = ++k;

由於遞增發生在表達式被求值前,因此值 3 賦給了 j

和下面的例子對照:

var j, k;
k = 2;
j = k++;

在此,由於遞增發生在表達式被求值後,因此值 2 賦給了 j。

遞增運算符(++),只能運用於變量,若是用在變量前則爲前遞增運算符,若是用於變量後面則爲後遞增運算符。前遞增運算符會用遞增後的值進行計算,然後遞增運算符用遞增前的值進行運算,如:

   var a=1

   var b= a++  //此時b的值爲1,由於b的值是a遞增前的值。但a的值已經爲2了,

   var a=1

   var b=++a  //此時b的值爲2,a的值也爲2

遞減運算符(--)的用法與遞增運算符的用法相同

乘法賦值運算符 (*=)

變量值乘以表達式值,並將結果賦給該變量。

result *= expression

說明

使用 *= 運算符和使用下面的語句是等效的:

result = result * expressionresult = result * expression

乘法運算符 (*)

兩個表達式的值相乘。

result = number1*number2

 

 

除法賦值運算符 (/=)

 

變量值除以表達式值,並將結果賦給該變量。

result /= expression

說明

使用 /= 運算符和使用下面的語句是等效的:

result = result / expressionresult = result / expression

除法運算符 (/)

將兩個表達式的值相除。

result = number1 / number2

逗號運算符 (,)

順序執行兩個表達式。

expression1, expression2

說明

, 運算符使它兩邊的表達式以從左到右的順序被執行,並得到右邊表達式的值。, 運算符最普通的用途是在 for 循環的遞增表達式中使用。例如:

   
}for (i = 0; i < 10; i++, j++)
{k = i + j;

每次經過循環的末端時, for 語句只容許單個表達式被執行。, 運算符被用來容許多個表達式被看成單個表達式,從而規避該限制。

 

取餘賦值運算符 (%=)

變量值除以表達式值,並將餘數賦給變量。

result %= expression

說明

使用 %= 運算符與使用下面的語句是等效的:

result = result % expression

取餘運算符 (%)

一個表達式的值除以另外一個表達式的值,返回餘數。

result = number1 % number2

說明

取餘(或餘數)運算符用 number1 除以 number2 (把浮點數四捨五入爲整數),而後只返回餘數做爲 result。例如,在下面的表達式中,A (即 result)等於 5。

A = 19 % 6.7

 

比較運算符

返回表示比較結果的 Boolean 值。

expression1 comparisonoperator expression2

說明

比較字符串時,JScript 使用字符串表達式的 Unicode 字符值。

下面說明根據 expression1 和 expression2 的類型和值,不一樣組的運算符是如何做用的:

關係運算符(<、>、<=、>=)

  • 試圖將 expression1 和 expression2 都轉換爲數字。
  • 若是兩表達式均爲字符串,則按字典序進行字符串比較。
  • 若是其中一個表達式爲 NaN,返回 false
  • 負零等於正零。
  • 負無窮小於包括其自己在內的任何數。
  • 正無窮大於包括其自己在內的任何數。

比較運算符如大於、小於等只能對數字或字符串進行比較,不是數字或字符串類型的,將被轉化爲數字或字符串類型。若是同時存在字符串和數字,則字符串優先轉化爲數字,如不能轉化爲數字,則轉化爲NaN,此時表達式最後結果爲false。若是對象能夠轉化爲數字或字符串,則它會被優先轉化爲數字。若是運算數都不能被轉化爲數字或字符串,則結果爲false。若是運算數中有一個爲NaN, 或被轉化爲了NaN,則表達式的結果老是爲false.當比較兩個字符串時,是將逐個字符進行比較的,按照的是字符在Unicode編碼集中的數字,所以字母的大小寫也會對比較結果產生影響。

 

相等運算符 (==、!=)

    - 若是兩表達式的類型不一樣,則試圖將它們轉換爲字符串、數字或 Boolean 量。
    - NaN 與包括其自己在內的任何值都不相等。
    - 負零等於正零。
    - null 與 null 和 undefined 相等。
    - 相同的字符串、數值上相等的數字、相同的對象、相同的 Boolean 值或者(當類型不一樣時)能被強制轉化爲上述狀況之一,均被認爲是相等的。
    - 其餘比較均被認爲是不相等的。
 

關於(==),要想使等式成立,需知足的條件是:

 - 等式兩邊類型不一樣,但通過自動轉化類型後的值相同,轉化時若是有一邊爲數字,則另外一邊的非數字類型會優先轉化爲數字類型;布爾值始終是轉化爲數字進行比較的,無論等式兩邊中有沒有數字類型,true轉化爲1,false轉化爲0。對象也會被轉化。

 - null==undefined
    

恆等運算符 (===、!==)

 

除了不進行類型轉換,而且類型必須相同之外,這些運算符與相等運算符的做用是同樣的。

關於(===),要想使等式成立,需知足的條件是:

    -       等式兩邊值相同,類型也相同
    -       若是等式兩邊是引用類型的變量,如數組、對象、函數,則要保證兩邊引用的是同一個對象,不然,即便是兩個單獨的徹底相同的對象也不會徹底相等。
    - 
    -      等式兩邊的值都是null或undefined,但若是是NaN就不會相等

 

條件(三目)運算符 (?:)

根據條件執行兩個語句中的其中一個。

test ?語句:語句2

參數

test

任何 Boolean 表達式。

語句1

當 test 是 true 時執行的語句。能夠是複合語句

語句2

當 test 是 false 時執行的語句。能夠是複合語句。

說明

?: 運算符是 if...else 語句的快捷方式。它一般被用做較大表達式的一部分,而在此處使用 if...else 語句是不協調的。例如:

var now = new Date();
var greeting = "Good" + ((now.getHours() > 17) ? " evening." : " day.");

在該例子中,若是是 6pm 之後,則建立一個包含 "Good evening." 的字符串。使用 if...else 語句的等效代碼以下:

   var now = new Date();
var greeting = "Good";
if (now.getHours() > 17)greeting += " evening.";else   greeting += " day.";

delete 運算符

從對象中刪除一個屬性,或從數組中刪除一個元素。

delete expression

expression 參數是一個有效的 JScript 表達式,一般是一個屬性名或數組元素。

說明

若是 expression 的結果是一個對象,且在 expression 中指定的屬性存在,而該對象又不容許它被刪除,則返回 false

在全部其餘狀況下,返回 true

delete是一個一元運算符,用來刪除運算數指定的對象屬性、數組元素或變量,若是刪除成功返回true,刪除失敗則返回false。並非全部的屬性和變量均可以刪除,好比用var聲明的變量就不能刪除,內部的核心屬性和客戶端的屬性也不能刪除。要注意的是,用delete刪除一個不存在的屬性時(或者說它的運算數不是屬性、數組元素或變量時),將返回true。

  delete影響的只是屬性或變量名,並不會刪除屬性或變量引用的對象(若是該屬性或變量是一個引用類型時)

 

 in 運算符

測試對象中是否存在該屬性。

result = propertyinobject

參數

result

必選項。任意變量

property

必選項。至關於字符串表達式的一個表達式。

object

必選項。任意對象。

說明

in 操做檢查對象中是否有名爲 property 的屬性。也能夠檢查對象的原型,以便知道該屬性是否爲原型鏈的一部分

in運算符要求其左邊的運算數是一個字符串或者能夠被轉化爲字符串,右邊的運算數是一個對象或數組,若是左邊的值是右邊對象的一個屬性名,則返回true.

 

new 運算符

建立一個新對象。

new constructor[(arguments)]

參數

constructor

必選項。對象的構造函數。若是構造函數沒有參數,則能夠省略圓括號。

arguments

可選項。任意傳遞給新對象構造函數的參數。

說明

new 運算符執行下面的任務:

  • 建立一個沒有成員的對象。
  • 爲那個對象調用構造函數,傳遞一個指針給新建立的對象做爲 this 指針。
  • 而後構造函數根據傳遞給它的參數初始化該對象。

示例

下面這些是有效的 new 運算符的用法例子。

 

my_object = new Object;
my_array = new Array();
my_date = new Date("Jan 5 1996");

typeof 運算符

返回一個用來表示表達式的數據類型的字符串。

typeof[()expression[]] ;

expression 參數是須要查找類型信息的任意表達式

說明

typeof 運算符把類型信息看成字符串返回。typeof 返回值有六種可能: "number," "string," "boolean," "object," "function," 和 "undefined."

typeof 語法中的圓括號是可選項。

typeof 也是一個運算符,用於返回運算數的類型,typeof也能夠用括號把運算數括起來。typeof對對象和數組返回的都是object,所以它只在用來區分對象和原始數據類型時纔有用。

 

instanceof 運算符

返回一個 Boolean 值,指出對象是不是特定的一個實例。

result = object instanceof class

說明

若是 objectclass 的一個實例,則 instanceof 運算符返回

true。若是 object 不是指定類的一個實例,或者 objectnull,則返回 false

示例

下面的例子舉例說明了 instanceof 運算符的用法。

建立變量。
   建立一個數組。
   填充數組。
   檢查的類。
     {
         返回字符串。
}

function objTest(obj){
   var i, t, s = "";   //t = new Array();   //t["Date"] = Date;   //t["Object"] = Object;   
t["Array"] = Array;      
for (i in t){         
if (obj instanceof t[i])   //objs += "obj is an instance of " + i + "\n";         
}else{            
s += "obj is not an instance of " + i + "\n";         
}   
}   
return(s);   //var obj = new Date();response.write(objTest(obj));

intanceof運算符要求其左邊的運算數是一個對象,右邊的運算數是對象類的名字,若是運算符左邊的對象是右邊類的一個實例,則返回true。在js中,對象類是由構造函數定義的,因此右邊的運算數應該是一個構造函數的名字。注意,js中全部對象都是Object類的實例。

void 運算符

避免表達式返回值。

void expression

expression 參數是任意有效的 JScript 表達式

說明

void 運算符對錶達式求值,並返回 undefined。在但願求表達式的值,但又不但願腳本的剩餘部分看見這個結果時,該運算符最有用。

相關文章
相關標籤/搜索