学习笔记: JS运算符 — 算术运算符
Time: 10-02-28 Comments: 0
紧接上篇,从这篇开始,整理下运算符对运算数类型的影响,这篇先上算术运算符。
一. 加法运算符(+)
- 1. 如果一个运算数是字符串,那么另一个运算数就会被转换成字符串,然后两者连接在一起。
-
var a = 1 + '1'; alert(a); // 输出11
- 2. 如果一个运算数是对象,那么它会把这个对象转换成数字或字符串,这一转换是通过调用对象的valueOf或toString方法来实现的。
-
例1: 验证对象是否会被转换成数字或字符串 var arr = [22]; alert(1 + arr); // 输出122, 说明arr被转换成了字符串
例2: 验证转换操作是通过调用对象的valueOf或toString方法来实现的(基于Nicholas C. Zakas的测试例子) var arr = [22]; arr.valueOf = function() { return 22; } arr.toString = function() { return '33'; } alert(1 + arr); // 输出23, 此时使用valueOf进行转换 alert(arr); // 输出33, 此时使用toString进行转换
二. 减法运算符(-)
- 1. 如果运算数是非数字的,那么减法运算符会将它们转换成数字,如果无法转换成数字,则运算结果为NaN。
-
var arr = ['10']; var obj = {}; alert('10' - 5); // 输出5 alert(arr - 5); // 输出5 alert(obj - 5); // 输出NaN, obj无法转换成数字
三. 乘法运算符(*)
- 1. 如果运算数是非数字的,乘法运算符会将它们转换成数字,如果无法转换成数字,则运算结果为NaN。
-
var arr = ['10']; var obj = {}; alert(arr * 5); // 输出50 alert(obj * 5); // 输出NaN
四. 除法运算符(/)
- 1. 如果运算数是非数字的,除法运算符会将它们转换成数字,如果无法转换成数字,则运算结果为NaN。
-
var arr = ['10']; var obj = {}; alert(arr / 5); // 输出2 alert(obj / 5); // 输出NaN - 2. 如果第2个运算数可以被转换为数字,但转换结果是0,那么运算结果为Infinity。
-
var obj = {}; alert(1 / '0'); // 输出Infinity alert(obj / '0'); // 输出NaN - 3. 如果两个运算数的转换结果均为0,那么运算结果为NaN。
-
alert(0 / '0'); // 输出NaN
五. 模运算符(%)
- 1. 如果运算数是非数字的,模运算符会将它们转换成数字,如果无法转换成数字,则运算结果为NaN。
-
alert([10] % 5); // 输出0 alert({} % 5); // 输出NaN
六. 一元减运算符(-)
- 1. 如果运算数是非数字的,该运算符会将它转换成数字,如果无法转换成数字,则运算结果为NaN。
-
alert(-[10]); // 输出-10 alert(-[]); // 输出0 alert(-{}); // 输出NaN
七. 一元加运算符(+)
- 1. 如果运算数是非数字的,该运算符会将它转换成数字,如果无法转换成数字,则运算结果为NaN。
-
alert(+new Date()); // 我们经常会用到的 alert(+{}); // 输出NaN
八. 递增运算符(++)
- 1. 该运算符的运算数必须是一个变量,数组的一个元素或者对象的一个属性。如果该变量,元素或属性不是数字,该运算符会将它转换成数字。如果无法转换成数字,则运算结果为NaN。
-
var arr = [{}]; alert(++1); // 浏览器会报错, 提示"invalid increment operand" alert(arr[0]++); // 输出NaN, {}无法被转换成数字
九. 递减运算符(–)
- 1. 该运算符的运算数必须是一个变量,数组的一个元素或者对象的一个属性。如果该变量,元素或属性不是数字,该运算符会将它转换成数字。如果无法转换成数字,则运算结果为NaN。
-
var arr = [{}]; alert(--1); // 浏览器会报错, 提示"invalid increment operand" alert(arr[0]--); // 输出NaN, {}无法被转换成数字
十. 尼大叔的测试题
var num1 = "10",
num2 = "9";
alert(+num1 + num2);
说明: 第一个"+"为一元加运算符,第二个"+"为加法运算符,由于优先级相同,所以先计算+num1的值,由于
num1为字符串,所以会被转换成数字10,然后计算表达式10 + "9"的值,由于num2为字符串,所以"数字10"
再次被转换成字符串"10",故而最终结果为"109"。
