JS-运算符

165 阅读3分钟

运算符

赋值运算:

var a = 1,
    b = 2,
    c = 3;
var d = (a + b) * c;

最后一行语句的步骤:

  1. 先声明变量d
  2. 变量a的值和变量b的值相加,与变量c的值相乘得到结果
  3. 将该结果赋值给变量d

'+'运算符

var c = 'str' + null;
console.log(c); //'strnull'

任何数据类型的值加上字符串都是字符串

var c = 1 + 1 + 'str' + 1 + 1;
console.log(c); //'2str11'

运算是自左向右的

++

a++ 和 ++a的区别:

例1:

var a = 1;
a = a + 1; // -> a += 1 -> ++a

例2:

var a = b = c =  1;
console.log(a++); //1
console.log(b = b + 1); //2
console.log(++c); //2

a++是先赋值后运算的 ++a是先运算后赋值

var a = 5,
    b;
b = a++ + 1;
console.log(b,a);  //6,6

b = a++ + 1 相当于 b = 1 + a++

先是 b = 1 + a ->6

赋值完之后才会++运算

a的值由于a++不是在log语句里,所以 a++运算了之后打印出来

var a = 5,
    b;
b = ++a + 1;
console.log(b,a);  //7,6
var a = 5,
    b;
b = a-- + --a;
console.log(b,a);  //8,3

相当于 b = --a + a-- (b = 4 + 4)

--a了之后a已经变成4了

再a--,a就变成3了

var a = 5,
    b;
b = --a + --a;
console.log(b,a);  //7,3

--a -> a = 4

再--a -> a = 3

b = 7

var a = 5,
    b;
b = --a + a++;
console.log(b,a);  //8,5

--a -> 4

b = 4 + 4 = 8

a++ -> a = 5

'/'运算符

var c = 0 / 0;
console.log(c); //NaN

NaN(Not a Number)是数字类型,主要是为了表示在计算过程出现了错误,导致了非数的出现

var c = 1 / 0;
var d = -1 / 0;
console.log(c, d); //infinity,-infinity

'%'运算符(取余)

var c = 4 % 6;
console.log(c); //4

交换值的做法

var a = 1,
    b = 2;

法1:

var c = a;
a = b;
b = c;

法2:

a = a + b; // 3
b = a - b; // 3 - 2 = 1
a = a - b; // 3 - 1 = 2

比较运算符

var bool = 1 > '2';
console.log(bool); //false

number和string进行比较,string要转换成number

var bool = '4.5' > '11';
console.log(bool); //true

字符串之间的比较是比较字符串相对应的ASCII码。多个字符就从左到右依次对比,直到比较出ASCII码的大小为止

首先从第一位开始比 '4' 的ASCII码比 '1' 的ASCII大,所以不用再继续比了

相等运算符

'=='不看数据类型 -> !=

'==='全等看数据类型 -> !==

'='赋值运算符和'=='相等运算符是不一样的,所以在条件判断语句中,用'=='而不是'='

要注意:NaN != NaN,NaN与包括自己在内的任何东西都不相等

逗号运算符

只会返回最后一个

var num = (2 - 1, 6 + 5, 24 + 1);
console.log(num); //25

判断分支

if和逻辑运算

如果进行逻辑判断的时候条件是互斥的,就一定要用else if,不要用多个if。因为多个if需要进行多次判断,用if…else就只需要一次判断,寻找满足的条件的语句就好了。

逻辑运算首先要明确什么是真的,什么是假的。undefined、null、NaN、''、0、false是假的,其他都是真的

&& 与 遇到真就往后走,遇到假或走到最后就返回当前值

var a = 1 && 2;
console.log(a); //2

|| 或 遇到假就往后走,遇到真或走到最后就返回当前值

逻辑运算无论如何都会返回值

var name = '';
console.log(name || '未找到数据');

相当于

if(name){
    console.log(name);
}else{
    console.log('未找到数据');
}

!非

var a = !1; // 1->true
console.log(a); //false

取反:a = !a

不等:a != a

switch

一般来说定值用switch进行条件判断,有范围的用if

break用来终止循环,没有break会继续执行下面的语句。

var city = window.prompt('请输入您所在的地区');
switch(city){
    case '北京':
        console.log('北京');
        break;
    case '上海':
        console.log('上海');
        break;
    case '广东':
        console.log('广东');
        break;
    default:
        console.log('其他');
}

三目运算符

var a = 5,
    str = '';
a > 0 ? str = '大于0' //return
      : str = '小于等于0';
console.log(str); //'大于0'

三目运算符可以接收结果,有return的功能

嵌套

var str = '';
str = 89 > 9 ? (
                '89' > '9' ? '通过了'
                           :'内层未通过'
               )
              : '外层未通过';
console.log(str); //'内层未通过'

因为是字符串之间的比较,比ASCII码

实例检测 例1:

if(typeof(a) && (-true) + (+undefined) + '') {
    console.log('通过');
} else {
    console.log('未通过');
}

typeof(a) -> 'undefined'

-true -> -1

-undefined -> NaN

所以条件语句内的结果是 'undefined'&&'NaN' -> true

例2:

window.a || (window.a = '1');
console.log(window.a); //'1'

括号的优先级最大