表达式;
例:
a = b;
// 由于 = 运算符的作用,b变量 的值被代入到 a变量 中
func();
// 由于 ( ) 运算符的作用,func 作为函数被调用,函数的返回值被舍弃
1 + 3;
// 由于 + 运算符的作用,1 和 3 被求和,其结果被舍弃(实际上
// 因为这个表达式没有意义,它不会被执行)
if
会对其右侧的表达式求值,如果结果为 真 ,就会对左侧的表达式求值。例:
a=b if b!=0; // 如果 b 不为 0 则将 b 的值代入 a
,
(逗号) 会先对左侧的表达式求值,然后对右侧的表达式求值。除此以外什么都不做。右侧的表达式的结果会作为该运算符的执行结果。连续出现多个逗号的时候,会从左侧开始依次求值。例:
c = (a=1, b=2); // 对 a=1, b=2 这两个表达式进行求值,后面的表达式的结果 2 会被带入 变量 c 中
a=1, b=2, c=3; // 按照 a=1, b=2, c=3 的顺序依次求值
= <-> &= |= ^= -= += %= /= \= *= ||= &&= >>= <<= >>>=
例:
a = 0; // 将 0 代入 变量 a
a = b = c = 0; // 将 0 依次代入变量 c , b, a
<->
运算符用来进行值的交换。首先对左侧的表达式求值,然后对右侧的表达式求值。在那之后,将右侧表达式的值代入左侧的变量,左侧表达式的值代入右侧的变量。该运算符不返回结果。运算符=
的形式,A 运算符= B
的写法相当于 A = A 运算符 B
。A 运算符 B 的结果就会作该运算符(运算符=)的结果。? :
是一个三目运算符。写成 A ? B : C
的形式的话,会先对 A表达式 求值。结果为真的时候会对 B表达式 求值,忽略 C表达式。结果为假的时候会对 C表达式 求值,忽略 B表达式。B表达式 和 C表达式 中被求值的那个表达式的值会作为该运算符的结果。例:
a = b==0 ? c : b; // 如果 b 等于 0 那么 将 c 代入 a ,如果 b 不等于 0 则将 b 代入 a
b==0 ? (a=c) : (a=b); // 和上面的表达式具有相同的意义
(a ? b : c ) = d; // 如果 a 为真,则将 d 代入 b ,如果a为假的话,则将 d 代入 c (作为左值使用的例子)
||
会先对左侧的表达式求值,若结果为真,则忽略右侧的表达式,以“真”作为该运算符的结果。如果左侧表达式的结果为假,则对右侧的表达式进行求值,其结果(真或者假)作为该运算符的结果。&&
会先对左侧的表达式求值,如果结果为假,则忽略右侧的表达式,以“假”作为该运算符的结果。如果左侧的表达式的结果为真,则对右侧的表达式进行求值,其结果(真或者假)作为该运算符的结果。|
用于对每个 字位(bit) 进行逻辑或运算。先对左右两侧的表达式分别进行求值,将两个结果作为整数,按位逐个进行或运算,其结果作为该运算符的结果。(译者注:一个字节(byte)为8位,即包含8个字位(bit))^
用于对每个 字位(bit) 进行逻辑异或运算。先对左右两侧的表达式分别进行求值,将两个结果作为整数,按位逐个进行异或运算,其结果作为该运算符的结果。&
用于对每个 字位(bit) 进行逻辑与运算。先对左右两侧的表达式分别进行求值,将两个结果作为整数,按位逐个进行与运算,其结果作为该运算符的结果。< > <= >=
都属于比较运算符这一类。<
运算符<
运算符会先对左侧表达式求值,然后对右侧表达式求值。如果左侧表达式的值小于右侧表达式的值,则运算符的结果为真,否则运算符的结果为假。>
运算符>
运算符会先对左侧表达式求值,然后对右侧表达式求值。如果右侧表达式的值小于左侧表达式的值,则运算符的结果为真,否则运算符的结果为假。<=
运算符<=
运算符会先对左侧表达式求值,然后对右侧表达式求值。如果左侧表达式的值小于或等于右侧表达式的值,则运算符的结果为真,否则运算符的结果为假。>=
运算符>=
运算符会先对左侧表达式求值,然后对右侧表达式求值。如果右侧表达式的值小于或等于左侧表达式的值,则运算符的结果为真,否则运算符的结果为假。instanceof
除外 )。!
运算符!
运算符是逻辑 非(NOT) 运算符。将右侧的表达式的结果进行真假调换,作为该运算符的结果。~
运算符~
运算符是按位取反运算符。将右侧表达式的结果作为整数,逐位取反 ( 1→0、0→1 ) 将取反后的值作为该运算符的结果。--
运算符--
运算符是前置递减运算符。将右侧表达式的值减1,减1之后的值作为该运算符的结果。++
运算符++
运算符是前置递增运算符。将右侧表达式的值加1,加1之后的值作为该运算符的结果。new
运算符new
运算符右面的函数调用表达式并不会被作为函数调用,而是用来创建对象。invalidate 运算符
invalidate
运算符会将右侧表达式的结果对象无效化。isvalid 运算符
isvalid
运算符会先对右侧或者左侧的的表达式求值,如果得到的结果的对象是有效的,则该运算符的结果为真,如果是无效的,则该运算符的结果为假。该运算符放到操作数的前面或后面具有相同的效果。delete 运算符
delete
运算符会将写在右侧的对象的成员或者全局变量删除。删除成功则返回 true、失败则返回 false 。(译者注:该运算符在删除对象成员或全局变量时,不会把对象成员或全局变量所指向的对象也删除掉。如果环境中还存在其他对那个对象的引用则那个对象将被保留。)typeof 运算符
typeof
运算符会对右侧的表达式进行求值,随着结果的数据类型不同,会返回如下的字符串:void:"void"、整数:"Integer"、实数:"Real"、对象:"Object"、字符串:"String"、字节串:"Octet" 。但是,如果指定了某对象的成员,但是这个对象却是不存在的,就会返回 "undefined" 。# 运算符
#
运算符会对右侧的表达式进行求值,将结果字符串的第一个字符的编码作为该运算符的结果。$ 运算符
$
运算符会对右侧的表达式进行求值,将结果作为字符编码,而把该字符编码对应的那个字符作为该运算符的结果。+ 运算符
+
运算符会先对右侧的表达式进行求值。如果右侧的结果是实数或整数就什么都不做,否则就会尝试将其变换为实数或整数,最后的结果作为该运算符的结果。将字符转换为数值并且转换失败的时候并不会产生异常,而是返回0。如果右侧表达式的运算结果中有“包含小数点”这类实数特征的话,会尝试转换成实数,否则尝试转换成整数,如果是以0x、0b或0开头的字符串的话,分别按照16进制数、2进制数或8进制数来解析。- 运算符
-
运算符会对右侧的表达式进行求值,将结果作为数值,将正负号取反之后作为该运算符的结果。& 运算符
&
运算符可以把 对某对象的属性成员的操作(读或写) 在不导致属性中的 属性控制器(getter和setter) 被执行的情况下,转换为对该属性对象本身的操作。例如,propobj = &obj.prop; 这样写的话,obj 的成员属性 prop 的读写处理函数不会被执行,指向属性成员 prop 的属性对象本身的引用会被代入到 propobj 变量中。如果该运算符的右侧不是对属性的操作的话,该运算符的行为是不确定的。* 运算符
*
运算符会导致该运算符右侧的属性对象的 读写处理函数 被执行。这个运算符的右侧必须是代表属性对象的表达式。例如,*propobj = 1; 这样写的话,作为属性对象的 propobj 的 setter 方法被调用,1 被代入。instanceof 运算符
instanceof
运算符会先对左侧表达式求值,然后对右侧表达式求值。如果右侧的字符串是某个类的名字,而左侧是这个类的实例,则该运算符返回 true ,否则返回 false 。( ) 运算符
( )
运算符用于运算优先级的变更,以及函数的调用。[ ] 运算符
[ ]
运算符是 间接成员选择 运算符。A [ B ]
这么写的话,会先对 A 求值,然后对 B 求值。将 B 作为字符串,在 A 中查找对应的成员名,并对那个成员进行操作。作为左值使用的时候,对象内的成员 B 如果不存在的话,会被创建。. 运算符
.
运算符是 直接成员选择 运算符。A.B
这么写的话,会先对 A 求值。在 A 中查找 B 并对找到的成员进行操作。作为左值使用的时候,对象内的成员 B 如果不存在的话,会被创建。.
运算符左侧的表达式,在 with 语句的范围外的话会被当作 global 对象的成员,在 with 语句内侧则会被当作 with 所指定的对象的成员。++ 运算符
++
运算符是后置的递增运算符。将左侧的表达式加1,加1之前的左侧的表达式的值作为该运算符的结果。-- 运算符
--
运算符是后置的递减运算符。将左侧的表达式减1,减1之前的左侧的表达式的值作为该运算符的结果。! 运算符
!
运算符是 表达式求值运算符。对左侧表达式求值,其结果作为字符串,被当作表达式字符串来解析。那个表达式字符串被解析并求值的结果作为该运算符的结果。解析出的表达式会在 this 上下文 (使用这个运算符的位置的 this) 中执行。incontextof 运算符
incontextof
运算符会先对左侧表达式求值,然后对右侧表达式求值。将左侧表达式的结果作为对象,将这个对象的上下文部分替换为右侧表达式的结果,替换后的对象作为该运算符的结果。int 运算符
real 运算符
string 运算符