如果加号两侧的操作数有其中任何一个是 字符串(String)类型 的,这时候+ 起到的是字符串拼接作用
alert('1' + 10); //110
作为加法运算,注意以下几点:
- Number类型
- 如果左右两侧的 操作数 都是 数值,那么作为正常的加法进行运算 alert(1+2);
- 如果其中一个操作数,是NaN,那么结果就是NaN alert(NaN + 2);
var result = '1' + 2 + 3; // 15 是错误的答案
'1' + 2 = '1' + String(2) = '1' + '2' = '12'
'12' + 3 = '12' + '3' = '123'
作为减法运算,注意以下几点:
- Number类型
- 如果左右两侧的操作数,都是数值的话,正常进行减法计算;
- 如果任何一个操作数,是NaN,那么结果就是NaN;
- string、 null、 undefined、 true、false
- 左右任何一侧不为Number类型的情况,会调用Number进行转换,将其转为Number类型之后,再进行计算。
alert(null - '10');
alert(Number(null) - Number('10')); // 0 - 10 = -10
作为乘法运算,注意以下几点:
- Number类型
- 左右为数值,进行正常的乘法运算 alert(2 * 3);
- 任何一侧为NaN,则结果返回NaN alert(NaN * 3);
- 如果有一侧不是Number类型的,则(根据对应规则)转为数字类型后,再进行计算
alert(true * 3); // 1 * 3 隐式类型转换 Number(true) = > 1
作为除法运算,注意以下几点:
- Number类型
- 左右两侧均为数值,正常进行除法计算 alert(6 / 3 );
- 如果任何一侧为NaN,则结果返回NaN alert(NaN / 3);
- 有任何一侧不是Number类型,则(根据对应的规则)转成数字类型后,再进行计算。
// alert(true / 2); // 隐式类型转换 Number(true) => 1
// alert(10 / 0); // Infinity无限 我们不允许0作为除数
alert(0 / 0); // NaN 特殊的
取反运算
取反运算符是一元运算符,也称一元减法运算符。
隐式数据类型转换,也就是说这个转换过程不受我们强制, js 偷偷自己转的
转换规则参考ECMAScript
英文 http://www.ecma-international.org/ecma-262/5.1/#
中文 http://www.fengfly.com/document/ECMAScript5.1/
- Number类型
- 如果左右两侧均是数值,则进行除法计算,结果返回余数!!!
var a = 367;
var b = 15;
alert(a % b); // 7
- 任何一侧为NaN,则结果返回NaN alert(a % NaN)
- 只要除数是0,则结果返回NaN
alert(10 % 0) //这里是NaN
alert(10 / 0) //Infinity 和取模不太一样
- 如果有一侧不为Number类型,则(根据对应的规则)转为数字类型后,再进行计算。
alert(true % 15) //1
利用隐式类型进行转换 +str
var str = '123';
var result = str + 2; //1232
var result = Number(str) + 2; //125
var result = +str + 2; //125 方便的隐式转换
字符串的拼接
var num1 = 10;
var num2 = 20;
var result = num1 + num2; // 30
var result = num1 + '' + num2; // 1020