表达式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类的实例。