学习笔记: JS运算符 — 算术运算符

紧接上篇,从这篇开始,整理下运算符对运算数类型的影响,这篇先上算术运算符

一. 加法运算符(+)

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"。

,

Leave a comment!