运算符
赋值运算:
var a = 1,
b = 2,
c = 3;
var d = (a + b) * c;
最后一行语句的步骤:
- 先声明变量d
- 变量a的值和变量b的值相加,与变量c的值相乘得到结果
- 将该结果赋值给变量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'
括号的优先级最大