表達式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
從一個表達式的值中減去另外一個表達式的值,只有一個表達式時取其相反數。
result = number1 - number2
-number
在語法 1 中,- 運算符是算術減法運算符,用來得到兩個數值之間的差。在語法 2 中,- 運算符被用做一元取負運算符,用來指出一個表達式的負值。
對於語法 2,和全部一元運算符同樣,表達式按照下面的規則來求值:
該運算符被用來產生數值。 在語法 2 中,若是生成的數值不是零,則 result 與生成的數值顛倒符號後是相等的。若是生成的數值是零,則 result 是零。
若是「-」減法運算符的運算數不是數字,那麼系統會自動把它們轉化爲數字。
也就是說加號運算數會被優先轉化爲字符串,而減號運算數會被優先轉化爲數字。以此類推,只能進行數字運算的運算符的運算數都將被轉化爲數字。(比較運算符也會優先轉化爲數字進行比較)
變量值遞增一或遞減一。
result = ++variable
result = --variable
result = variable++result = variable--
++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 * expression
result = result * expression
乘法運算符 (*)
兩個表達式的值相乘。
result = number1*number2
除法賦值運算符 (/=)
變量值除以表達式值,並將結果賦給該變量。
result /= expression
說明
使用 /= 運算符和使用下面的語句是等效的:
result = result / expression
result = 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 的類型和值,不一樣組的運算符是如何做用的:
關係運算符(<、>、<=、>=)
比較運算符如大於、小於等只能對數字或字符串進行比較,不是數字或字符串類型的,將被轉化爲數字或字符串類型。若是同時存在字符串和數字,則字符串優先轉化爲數字,如不能轉化爲數字,則轉化爲NaN,此時表達式最後結果爲false。若是對象能夠轉化爲數字或字符串,則它會被優先轉化爲數字。若是運算數都不能被轉化爲數字或字符串,則結果爲false。若是運算數中有一個爲NaN, 或被轉化爲了NaN,則表達式的結果老是爲false.當比較兩個字符串時,是將逐個字符進行比較的,按照的是字符在Unicode編碼集中的數字,所以字母的大小寫也會對比較結果產生影響。
相等運算符 (==、!=)
關於(==),要想使等式成立,需知足的條件是:
- 等式兩邊類型不一樣,但通過自動轉化類型後的值相同,轉化時若是有一邊爲數字,則另外一邊的非數字類型會優先轉化爲數字類型;布爾值始終是轉化爲數字進行比較的,無論等式兩邊中有沒有數字類型,true轉化爲1,false轉化爲0。對象也會被轉化。
恆等運算符 (===、!==)
除了不進行類型轉換,而且類型必須相同之外,這些運算符與相等運算符的做用是同樣的。
關於(===),要想使等式成立,需知足的條件是:
根據條件執行兩個語句中的其中一個。
test ?
語句1 :
語句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 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 運算符執行下面的任務:
下面這些是有效的 new 運算符的用法例子。
my_object = new Object; my_array = new Array(); my_date = new Date("Jan 5 1996");
返回一個用來表示表達式的數據類型的字符串。
typeof[()expression[]] ;
expression 參數是須要查找類型信息的任意表達式。
typeof 運算符把類型信息看成字符串返回。typeof 返回值有六種可能: "number," "string," "boolean," "object," "function," 和 "undefined."
typeof 語法中的圓括號是可選項。
typeof 也是一個運算符,用於返回運算數的類型,typeof也能夠用括號把運算數括起來。typeof對對象和數組返回的都是object,所以它只在用來區分對象和原始數據類型時纔有用。
返回一個 Boolean 值,指出對象是不是特定類的一個實例。
result = object instanceof class
true。若是 object 不是指定類的一個實例,或者 object 是 null,則返回 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類的實例。