0. Boolean 运算符
注意,逻辑 NOT 运算返回的一定是 Boolean 类型的值,而逻辑 OR 和 逻辑 AND 运算则不一定。
逻辑 NOT 运算行为如下所示:
如果运算数是对象,返回 false;
如果运算数是数字 0,返回 true;
如果运算数是数字 0 以外的任何数字,返回 false;
如果运算数是 null,返回 true;
如果运算数是 NaN,返回 true;
如果运算数是 undefined,返回 true(JavaScript 高级程序设计中说发生错误?)。
逻辑 AND 运算的运算数可以是任何类型,不止是 Boolean 值。如果某个运算数不是原始的 Boolean 值,那么 AND 运算不一定返回 Boolean 值。其运算行为如下:
如果一个运算数是对象,另一个是 Boolean 值,返回该对象;
如果两个运算数是对象,返回第二个对象;
如果某个运算数是 null,返回 null;
如果某个运算数是 NaN,返回 NaN;
如果某个运算数是 undefined,返回 undefined(JavaScript 高级程序设计中说发生错误?);
与逻辑 AND 运算相似,如果某个运算数不是 Boolean 值,逻辑 OR 运算不一定返回 Boolean 值,此时其运算行为如下:
如果一个运算数是对象,另一个是 Boolean 值,返回该对象;
如果两个运算数是对象,返回第一个对象;
如果某个运算数是 null,返回 null;
如果某个运算数是 NaN,返回 NaN;
如果某个运算数是 undefined,返回另外一个数(JavaScript 高级程序设计中说发生错误?);
1. 乘性运算包括乘法运算、除法运算和取模运算三种运算,这些运算方式与 Java 等语言中的运算方式相似,不过它们还具有一些自动类型转换功能。
2. 乘法运算行为规则
如果运算数都是数字,执行常规乘法运算。如果结果太大或太小,那么生成的结果就是 Infinity 或 -Infinity;
如果某个运算数是 NaN,结果为 NaN;
Infinity 乘以 0,结果为 NaN;
Infinity 乘以 0 以外的任何数字,结果为 Infinity 或 -Infinity,由第二个运算数的符号决定;
Infinity 乘以 Infinity,结果为 Infinity
3. 除法运算行为规则
如果运算数都是数字,执行常规除法运算。如果结果太大或太小,那么生成的结果就是 Infinity 或 -Infinity;
如果某个运算数是 NaN,结果为 NaN;
Infinity 被 Infinity 除,结果为 NaN;
Infinity 被[b]任何数字除[/b](包括 0),结果为 Infinity;
0 除以一个非无穷大的数字,结果为 Infinity(JavaScript 说是 NaN ?);
Infinity 被 0 以外的任何数字除,结果为 Infinity 或 -Infinity,由第二个运算数的符号决定;
4. 取模运算行为规则
如果运算数都是数字,执行常规的算术除法运算,返回除法运算的到得余数;
如果被除数是 Infinity,或者除数是 0, 结果为 NaN;
Infinity 被 Infinity 除,结果为 NaN;
[b]如果除数是无穷大的数,结果为被除数[/b];
5. 加性运算包括加法运算和减法运算。
6. 加法运算行为规则
如果两个运算数都是数字,则执行常规加法运算;
如果某个运算数是 NaN,结果为 NaN;
Infinity 加 Infinity,结果为 Infinity;
-Infinity 加 -Infinity,结果为 -Infinity;
Infinity 加 -Infinity,结果为 NaN;
+0 加 +0,结果为 +0;
-0 加 +0,结果为 +0;
-0 加 -0,结果为 -0;
如果两个运算数都是字符串,把第二个字符串连接到第一个字符串上;
如果只有一个运算数是字符串,把另一个运算数转换成字符串,结果是两个字符串连接成的字符串。
7. 减法运算行为规则
如果两个运算数都是数字,则执行常规减法运算;
如果某个运算数是 NaN,结果为 NaN;
Infinity 减 Infinity,结果为 NaN;
-Infinity 减 -Infinity,结果为 NaN;
Infinity 减 -Infinity,结果为 Infinity;
-Infinity 减 Infinity,结果为 -Infinity;
+0 减 +0,结果为 +0;
-0 减 +0,结果为 -0;
+0 减 -0,结果为 +0;
-0 减 -0,结果为 +0;
如果某个运算数不是数字(不能解析为数字?),结果为 NaN。
8. 关系运算
即执行两个数比较的运算,比较方式与算术比较方式相同,[b]每个关系运算都返回一个 Boolean 值(与乘性运算、加性运算不同)[/b]。
如果两个运算数都是字符串,则按字符串顺序进行比较;
如果一个运算数是数字而另一个是字符串, ECMAScript 尝试把字符串解析为数字再进行比较,如果解析返回结果是 NaN,那么最终比较结果为 false,[b]任何包含 NaN 的关系运算都返回 false[/b];
9. 等性运算
ECMAScript 有两种运算机制处理等性运算,其中等号和非等号用于处理原始值,全等号和非全等号用于处理对象。
10. 等号和非等号运算时可能的类型转换
如果一个运算数是 Boolean 值,在检查相等性之前,把它转换成数字值。false 转换成 0, true 转换成 1;
如果一个运算数是字符串,另一个是数字,尝试把字符串转换成数字;
如果一个运算数是对象,另一个是字符串,尝试把对象转换成字符串;
如果一个运算数是对象,另一个是数字,尝试把对象转换成数字;
值 null 和 undefined 相等;
不能把 null 和 undefined 转换成其它值;
如果某个运算数是 NaN,等号运算返回 false,非等号返回 true(即使两个运算数都是 NaN,等号仍然返回 false,因为根据规则,NaN 不等于 NaN);
如果两个运算数都是对象,那么比较的是它们的引用值,如果它们指向同一个对象,那么等号返回 true,否则返回false。示例:
[img]http://dl.iteye.com/upload/picture/pic/49929/2c3f5d3b-7089-30d7-a6be-47ed7605c494.png[/img]
11. 全等运算时不做类型转换的运算,只有在无需做类型转换两个运算数比较相等时返回 true,否则返回 false。
12. 条件运算,与 Java 运算方式相同。
13. 赋值运算,与 Java 运算方式相同。
14. 逗号运算,在一条语句中执行多个运算。如声明 var a = 1, b = 2, c = 3;
注意,逻辑 NOT 运算返回的一定是 Boolean 类型的值,而逻辑 OR 和 逻辑 AND 运算则不一定。
逻辑 NOT 运算行为如下所示:
如果运算数是对象,返回 false;
如果运算数是数字 0,返回 true;
如果运算数是数字 0 以外的任何数字,返回 false;
如果运算数是 null,返回 true;
如果运算数是 NaN,返回 true;
如果运算数是 undefined,返回 true(JavaScript 高级程序设计中说发生错误?)。
逻辑 AND 运算的运算数可以是任何类型,不止是 Boolean 值。如果某个运算数不是原始的 Boolean 值,那么 AND 运算不一定返回 Boolean 值。其运算行为如下:
如果一个运算数是对象,另一个是 Boolean 值,返回该对象;
如果两个运算数是对象,返回第二个对象;
如果某个运算数是 null,返回 null;
如果某个运算数是 NaN,返回 NaN;
如果某个运算数是 undefined,返回 undefined(JavaScript 高级程序设计中说发生错误?);
与逻辑 AND 运算相似,如果某个运算数不是 Boolean 值,逻辑 OR 运算不一定返回 Boolean 值,此时其运算行为如下:
如果一个运算数是对象,另一个是 Boolean 值,返回该对象;
如果两个运算数是对象,返回第一个对象;
如果某个运算数是 null,返回 null;
如果某个运算数是 NaN,返回 NaN;
如果某个运算数是 undefined,返回另外一个数(JavaScript 高级程序设计中说发生错误?);
1. 乘性运算包括乘法运算、除法运算和取模运算三种运算,这些运算方式与 Java 等语言中的运算方式相似,不过它们还具有一些自动类型转换功能。
2. 乘法运算行为规则
如果运算数都是数字,执行常规乘法运算。如果结果太大或太小,那么生成的结果就是 Infinity 或 -Infinity;
如果某个运算数是 NaN,结果为 NaN;
Infinity 乘以 0,结果为 NaN;
Infinity 乘以 0 以外的任何数字,结果为 Infinity 或 -Infinity,由第二个运算数的符号决定;
Infinity 乘以 Infinity,结果为 Infinity
3. 除法运算行为规则
如果运算数都是数字,执行常规除法运算。如果结果太大或太小,那么生成的结果就是 Infinity 或 -Infinity;
如果某个运算数是 NaN,结果为 NaN;
Infinity 被 Infinity 除,结果为 NaN;
Infinity 被[b]任何数字除[/b](包括 0),结果为 Infinity;
0 除以一个非无穷大的数字,结果为 Infinity(JavaScript 说是 NaN ?);
Infinity 被 0 以外的任何数字除,结果为 Infinity 或 -Infinity,由第二个运算数的符号决定;
4. 取模运算行为规则
如果运算数都是数字,执行常规的算术除法运算,返回除法运算的到得余数;
如果被除数是 Infinity,或者除数是 0, 结果为 NaN;
Infinity 被 Infinity 除,结果为 NaN;
[b]如果除数是无穷大的数,结果为被除数[/b];
5. 加性运算包括加法运算和减法运算。
6. 加法运算行为规则
如果两个运算数都是数字,则执行常规加法运算;
如果某个运算数是 NaN,结果为 NaN;
Infinity 加 Infinity,结果为 Infinity;
-Infinity 加 -Infinity,结果为 -Infinity;
Infinity 加 -Infinity,结果为 NaN;
+0 加 +0,结果为 +0;
-0 加 +0,结果为 +0;
-0 加 -0,结果为 -0;
如果两个运算数都是字符串,把第二个字符串连接到第一个字符串上;
如果只有一个运算数是字符串,把另一个运算数转换成字符串,结果是两个字符串连接成的字符串。
7. 减法运算行为规则
如果两个运算数都是数字,则执行常规减法运算;
如果某个运算数是 NaN,结果为 NaN;
Infinity 减 Infinity,结果为 NaN;
-Infinity 减 -Infinity,结果为 NaN;
Infinity 减 -Infinity,结果为 Infinity;
-Infinity 减 Infinity,结果为 -Infinity;
+0 减 +0,结果为 +0;
-0 减 +0,结果为 -0;
+0 减 -0,结果为 +0;
-0 减 -0,结果为 +0;
如果某个运算数不是数字(不能解析为数字?),结果为 NaN。
8. 关系运算
即执行两个数比较的运算,比较方式与算术比较方式相同,[b]每个关系运算都返回一个 Boolean 值(与乘性运算、加性运算不同)[/b]。
如果两个运算数都是字符串,则按字符串顺序进行比较;
如果一个运算数是数字而另一个是字符串, ECMAScript 尝试把字符串解析为数字再进行比较,如果解析返回结果是 NaN,那么最终比较结果为 false,[b]任何包含 NaN 的关系运算都返回 false[/b];
9. 等性运算
ECMAScript 有两种运算机制处理等性运算,其中等号和非等号用于处理原始值,全等号和非全等号用于处理对象。
10. 等号和非等号运算时可能的类型转换
如果一个运算数是 Boolean 值,在检查相等性之前,把它转换成数字值。false 转换成 0, true 转换成 1;
如果一个运算数是字符串,另一个是数字,尝试把字符串转换成数字;
如果一个运算数是对象,另一个是字符串,尝试把对象转换成字符串;
如果一个运算数是对象,另一个是数字,尝试把对象转换成数字;
值 null 和 undefined 相等;
不能把 null 和 undefined 转换成其它值;
如果某个运算数是 NaN,等号运算返回 false,非等号返回 true(即使两个运算数都是 NaN,等号仍然返回 false,因为根据规则,NaN 不等于 NaN);
如果两个运算数都是对象,那么比较的是它们的引用值,如果它们指向同一个对象,那么等号返回 true,否则返回false。示例:
[img]http://dl.iteye.com/upload/picture/pic/49929/2c3f5d3b-7089-30d7-a6be-47ed7605c494.png[/img]
11. 全等运算时不做类型转换的运算,只有在无需做类型转换两个运算数比较相等时返回 true,否则返回 false。
12. 条件运算,与 Java 运算方式相同。
13. 赋值运算,与 Java 运算方式相同。
14. 逗号运算,在一条语句中执行多个运算。如声明 var a = 1, b = 2, c = 3;