算术操作符

前面的话

JavaScript的操作符有46个,虽然语法简单,但也不能小觑,复杂的表达式运算,也是比较复杂的。掌握操作符的语法,才能正确使用这些操作符。这篇文章将介绍算数操作符:包括一元算数操作符、二元算数操作符

在谈算数操作符前,先谈什么是一元操作符

一元操作符

  • 只能操作一个值的操作符叫做一元操作符,例如 ++ 、–、一元+、一元-等 。一元操作符的优先级很大,并且运算时,都是右结合。

二元操作符

  • 可以操作两个值的操作符叫做二元操作符,例如 * 、% 、+ 、-等

三元操作符

  • JavaScript只有一个三元操作符:例如 1< 2 ?2 : 1
一元算数操作符

包括 递增(++)、递减(–)、一元加(+) 、一元减(-)

[递增++]

  var age = 29;
  ++ age;

相当于:

 var age = 29;
  age = age + 1;

分为两种类型:

  • 前置型: 将++放在操作的变量之前。将操作变量的值加一,并且返回计算后的值

  • 后置型: 将++放在操作的变量之后。将操作变量的值加一,但不放回计算后的值。

    var a = 4;
    console.log(a++); // 4 
    console.log(a); // 5
    console.log(++a);// 6
    

这个例子很好的区别前置型与后置型的区别:

a++ 其实此时a已经为5,但是a++的结果并不返回a = 5,它还继续停在a = 4;
而++a是在a = 5基础上加一,又由于是前置型,所以返回a = 6 ;

再看一个例子:

var a = 1;
var b = ++a ; // a = 2 b = 2
var c = b++ + a++;// 2 + 2 = 4 (此时a=3,b=3,但后置型返回的结果是改变之前的)
console.log(a); // 3
console.log(b); // 3
console.log©; // 4

[递减–]

 var age = 29;
  -- age;

相当于:

  var age = 29;
   age = age - 1;

同样也分为前置型与后置型。

    var a = 4;
    console.log(a--); // 4 
    console.log(a); // 3
    console.log(--a);// 2

分析与前面一样:
a-- 其实此时a已经为3,但是–的结果并不返回a = 3,它还继续停在a = 4;
而–a是在a = 3基础上减一,又由于是前置型,所以返回a = 2 ;

[一元加(+)]

一元加操作符,用一个加号(+)表示,放在数值前面,对数值不会产生影响

 var num = 25;  
  console.log(num === +num); // true   

在对非数值应用一元加操作符时,回调用Number()转型函数对这个值进行转换

  var s1 = '01';
    var s2 = '1.1';
    var s3 = 'z';
    var a = false;
    var b = 1.1;
    var o = {
        valueOf: function() {
            return -1;
        }
    }
    s1 = +s1;
    console.log(s1); // 1
    s2 = +s2;
    console.log(s2); // 1.1
    s3 = +s3;
    console.log(s3); // NaN
    a = +a;
    console.log(a); // 0
    b = +b;
    console.log(b);// 1.1
    o = +o;
    console.log(o);// -1

[注意]:在new Date()前面使用一元加符号,可以把日期字符串转为日期毫秒数

 console.log(new Date()); 
  console.log(+ new Date())

在这里插入图片描述

[一元减(-)]

一元减操作符操作数值,用于表示负数:

 var num  = 25;
   num = -num;
  console.log(num) // -25

当操作数非数值时,会对该值使用Number ()转型函数进行转换,再将得到的数值换成负数

  var s1 = '01';
    var s2 = '1.1';
    var s3 = 'z';
    var a = false;
    var b = 1.1;
    var o = {
        valueOf: function() {
            return -1;
        }
    }
    s1 = -s1;
    console.log(s1);  
    s2 = -s2;
    console.log(s2); 
    s3 = -s3;
    console.log(s3); 
    a = -a;
    console.log(a); 
    b = -b;
    console.log(b);
    o = -o;
    console.log(o);

在这里插入图片描述

二元算数操作符

包括加法(+)、减法(-)、乘法(*)、除法(/)、求余(%)

[加法(+)]

加法操作符的转换规则相对而言要复杂些:

  • 如果其中一个操作数是对象,则对象会转为原始值: 日期对象通过toString()方法进行转换,其他对象
    如果可以使用valueOf()方法进行转换,就是用其方法转换,否则使用toString()方法来进行转换
  • 进行转换后,如果其中一个操作数是字符串,则另一个操作数也会转换为字符串,进行字符串拼接。两个都是
    字符串则直接拼接
  • 否则,两个操作符都将转换成数字,或NaN进行加法操作

空数组和valueOf()方法返回值为数值的自定义对象会转为数值

  console.log(1 + []); // 1
    var o = {
        valueOf() {
            return -1;
        }
    }
   console.log(1 + o);// 0

其他的对象则转为字符串

   console.log(1 + {});
   console.log(1 + [2]);
   console.log(1 + [1,4]);
   console.log(1 + new Date());
   console.log(1 + /0/);

在这里插入图片描述
如果进行加法运算,undefined转为NaN,null转为0.

console.log(1 + undefined);
console.log(1 + null);
console.log(undefined + undefined);
console.log(null + null);
console.log(false + false);

在这里插入图片描述
如果进行字符串拼接,undefined转为’undefined’,null转为’null’,false转为’false’,true转为’true’

    console.log(''+ undefined);
    console.log(''+ null);
    console.log(''+ false);
    console.log(''+ true);

在这里插入图片描述
对于Infinity和带符号的0的处理较为特殊

   console.log(Infinity + Infinity);// Infinity
    console.log(Infinity + (-Infinity));// NaN
    console.log((-Infinity) +(-Infinity));// -Infinity
    console.log((+0) + (+0));// 0
    console.log((-0)+(-0));// -0
    console.log((+0)+(-0));// 0

[减法(-)]

相对于加法,减法要简单的多。减法的转换规则:

  • 使用Number()将非数值类型转换为数值或NaN
console.log(1 - {});
console.log(1 - [1,2]);
console.log(1- /0/);
console.log(1 - []);// 1

`` 在这里插入图片描述

  • 进行减法运算时,undefined转为NaN,null转为0,false转为0,true转为1。

  console.log(1 - undefined);//NaN
   console.log(1 - null);//1
   console.log(1 - false);//1
   console.log(1 - true);//0
  • 对于Infinity与带符号的0
    console.log(Infinity - Infinity); // NaN
    console.log(-Infinity - (-Infinity)); // NaN
    console.log(Infinity - (-Infinity)); // Infinity
    console.log(-Infinity - Infinity); // - Infinity
    console.log(0 - 0); // 0
    console.log(-0 - 0);// -0
    console.log(-0 - (-0));// -0
    

[乘法 * ]

乘法操作符由一个星号表示,用于计算两个数值的乘积。通过Number()j将非数值类型转为数值或NaN。

  • 一个操作数为NaN,则结果为NaN
      console.log(1 * {});// NaN
  • 对于Infinit与0
  console.log(Infinity * Infinity);// Infinity
  console.log(Infinity * (-Infinity));// -Infinity
  console.log(Infinity * 0)// NaN 
  console.log(-Infinity * 0); //NaN
  console.log(Infinity * 8)// Infinity
  console.log(Infinity * -8)// -Infinity

[除法/]

除法操作符由斜线符号(/)表示。同样也会通过Number()转型函数将非数值类型转换为数值或NaN

  • 一个操作数为NaN,则结果为NaN
  console.log(1 / {});// NaN
  • 对于Infinit与0
 console.log(Infinity / Infinity);// NaN
 console.log( 0 / 0);// NaN
 console.log(8 / 0);// Infinity
 console.log((-8) /0);//-Infinity
 console.log(Infinity / 0); // Infinity
 console.log( Infinity / 8);// Infinity

[求模%]

求模(余数)操作符是由一个百分号(%)表示,规则:

  • 求模结果与第一个操作数的符号保持一致
console.log(5 % 2);//1
console.log(5 % -2);//1
console.log(-5 % 2);//-1
console.log(-5 % -2);//-1
  • 被除数是Infinity,或除数是0,则求模结果是NaN

``

    console.log(Infinity % 0);// NaN
    console.log(Infinity % Infinity);// NaN
    console.log(Infinity % 8);// NaN
    console.log(8 % 0);// NaN
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值