JS运算符

197 阅读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); //2str2

运算是自左向右的

++

var a = 1;
a = a + 1; // -> a += 1 -> a++
var a = 1;
console.log(a++); //1
console.log(a = a + 1); //2
console.log(++a); //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

比较运算符

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

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

字符串之间的对比是字符串相对应的ASCII码

多个字符就从左到右依次对比,直到比较出ASCII码的大小为止

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

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

相等运算符

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

'==='全等会看 -> !==

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

NaN != NaN

NaN与包括自己在内的任何东西都不相等

逗号运算符

只会返回最后一个

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

判断分支

逻辑运算:

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

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

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

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

相当于

if(name){
    console.log(name);
}else{
    console.log('未找到数据');
}
var a = 1 && 2 && undefined && 10;
var b = 0 || null || 1 || 0;
console.log(a, b); //undefined,1

!非

undefined、null、NaN、''、0、false是假的,其他都是真的

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

取反:a = !a

不等:a != a

switch

定值用switch,有范围的用if

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'
      : str = '小于等于0';

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

var str = a > 0 ? '大于0' //return
                : '小于等于0';

嵌套

var a = 5,
    str = '';
str = a > 0 ? (
                a > 3 ? '大于3'
                      :'小于等于3'
               )
            : '小于等于0';

例:

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

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