JS运算符

运算过程

var a = 1,
    b = 2,
    d = 3;
var c = (a + b) * d;
console.log(c); // 9

运算过程如下:
(1)声明变量c
(2)变量a的值和变量b的值相加,再与变量d的值相乘得到结果
(3)将该结果赋值给变量c

总结:
(1)程序从左至右执行
(2)括号运算 > 普通运算 > 赋值运算

加法运算(+)

// 数学运算:相加
console.log(1 + 2); // 3

// 对象先转字符串再字符串拼接
console.log(1 + {}); // 1[object Object]

//字符串拼接:任何数据类型的值 + 字符串都是字符串
console.log(1 + 'str'); // 1str
console.log('str' + 1); // str1
console.log('str' + 'str'); // strstr
console.log('str' + undefined); // strundefined
console.log('str' + true); // strtrue
console.log('str' + NaN); // strNaN
console.log('str' + 1 + 1); //str11
console.log('str' + (1 + 1)); // str2
console.log(1 + 1 + 'str' + (1 + 1)); // 2str2

//布尔值转化数字后做加法
console.log(true + true); // 2

// null转化为0后做加法
console.log(2 + null); // 2

// undefined转为NaN后做加法
console.log(2 + undefined); //NaN

除法运算(/)

  • NaN -> Not a Number 非数
  • NaN是数字类型
  • 计算出现错误会出现NaN
  • infinity > 正无穷大 > 数字类型
  • -infinity > 负无穷大 > 数字类型
console.log(10 / 2); // 5
console.log(1 / 2); // 0.5
console.log(0 / 0); // NaN
console.log('a' / 'b'); // NaN
console.log(NaN / NaN); // NaN
console.log(1 / NaN); // NaN
console.log(1 / 0); // Infinity
console.log(-1 / 0); // -Infinity

取模、取余(%)

console.log(5 % 2); // 1
console.log(4 % 6);  // 4
console.log(0 % 6);  // 0

交换值问题

var a = 1;
    b = 2;

// 方法一
var c = a;
    a = b;
    b = c;
console.log(a, b); // 2 1

// 方法二
a = a + b;  // a = 3
b = a - b;  // 3 - 2 = 1
a = a - b;  // 3 - 1 = 2
console.log(a, b);

一元运算符(++、—)

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

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

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

var b;

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

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

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

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

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

比较运算符

// >、<、>=、<=、==、===、!=、!===

// number - number
console.log(1 > 2); // false

// number - string   string-> number
console.log(1 > '2'); // false

/* 
* 字符串对比-字符串相对应的ASCII码(字符相对应的十进制代码)多个字符的,
* 从左到右依次对比,直到比较出ASCII码的大小为止
*/
console.log("a" > "b"); // false
console.log("4.5" > "11"); // true
console.log("1.5" > "11"); // false

// 相等是不看数据类型
console.log(1 == 1); // true
console.log(1 == "1"); // true
console.log(1 != 1); // false
console.log(1 != "1"); // false

// 全等是需要看数据类型是否相等
console.log(1 ==="1"); // false
console.log(1 !=="1"); // true

// NaN与包括自己在内的任何东西都不相等
console.log(NaN == NaN); // false

逻辑运算符

JS中为假情况:undefined、null、NaN、””、0、 false,除此以外全部是真

(1)与&&

// 遇到真就往后走,遇到假或走到最后就返回当前值
console.log(1 && 2); // 2
console.log(1 && 2 && undefined && 10); // undefined

总结:

表达式 返回值 真或假
1 && 1 返回1
0 && 1 返回0
1 && 0 返回0
0 && 0 返回0

(2)或||

// 遇到假就往后走,遇到真或者走到最后就返回当前值
console.log(1 || 2); // 1
console.log(0 || null || 1 || 0); // 1

总结:

表达式 返回值 真或假
1 或 1 返回1
0 或 1 返回1
1 或 0 返回1
0 或 0 返回0

示例

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

a.onclick = function(e) {
    var event = e || window.event;
}

(3)非 !

console.log(!1); // 1 true 》 !1 false
console.log(!!1); true

逗号运算符

// 逗号运算:返回最后一个
var num = (2 - 1, 6 + 5, 24 + 1);
console.log(num); // 25