3-1 if else 语句
// 条件为true, 执行if后面的括号代码, 否则执行 else 后面括号代码if(条件) {// todo}else{// todo}// 多重判断if(){} else if() {} else {}
var count = -10;if (count>0) {console.log(count);} else {console.log('count 小于或等于 0');}var sex = prompt();if (sex === '男') {alert('这是个男人');} else if(sex === '女') {alert('这是个女人');} else {alert('从泰国回来的');}
3-2 类型转换
3-2-1隐式转换:运算的过程中, 类型自动进行转换, 称之为隐式类型转换
var a = 2;var b = 3;if (a+b) {console.log('a+b的值大于0');} else {console.log('a+b的值小于或等于0');}
3-2-2 显式转换-其他类型转布尔类型
- 转换方法 Boolean(变量名) 和 (!!变量名)
- 转换结果为 true 或者 false
- 字符串转布尔
- 数字转布尔
- undefined 转布尔
- null 转布尔
对象转布尔
总结:- 转换方法 Boolean(变量)或者 !!变量- 意思上若包含'无','空'的时候转为false,其他为true- 对象全部为true
//转换方法 Boolean(变量名) 和 (!!变量名)var a = 5;var boo1 = Boolean(a);console.log(boo1);var boo2 = !!a;console.log(boo2);console.log('字符串转布尔-------');var str1 = 'asdfasdf';var str2 = '';var str3 = ' ';console.log(!!str1); // trueconsole.log(!!str2); // falseconsole.log(!!str3); // trueconsole.log('数字转布尔------');var num1 = 2323;var num2 = 0.8;var num3 = 0;var num4 = NaN;console.log(!!num1); // trueconsole.log(!!num2); // trueconsole.log(!!num3); // falseconsole.log(!!num4); // falseconsole.log('undefined转布尔------');var x;var obj = {a:2,b:3}var a = nullconsole.log(!!x);//falseconsole.log(!!obj)//trueconsole.log(!!a) //false
3-2-3 显式转换-其他类型转数字类型
```
- 转换方法 Number(变量);
- 转换结果: 数字, 0, NaN
- 字符串转数字
- 布尔转数字
- undefined 转数字
- null 转数字
- 对象转数字
总结: (1)数字的转换结果有三种: 数字, 0 , NaN (2)其他类型转数字类型的时候, 就拿这三种结果区推断, 会是那一个
```// 其他类型转数字类型console.log('字符串转数字');var str1 = 'asdfasdf';var str2 = '';var str3 = ' ';var str4 = '666';console.log(Number(str1)); // NaNconsole.log(Number(str2)); // 0console.log(Number(str3)); //0console.log(Number(str4)); // 666console.log('布尔类型转数字----=');var boo1 = true;var boo2 = false;console.log(Number(boo1)); // 1console.log(Number(boo2)); // 0console.log(boo1+boo2); // 1console.log('undefined转数字-----');var y = undefined;console.log(Number(y)); //NaNconsole.log('null转数字-----');var z = null;console.log(Number(z)); //0console.log('对象转数字-----');var obj = {a:2, b:3}console.log(Number(obj)); // NaN
3-2-4 显式转换-其他数据类型转字符串类型
(1)有三种方式var num = 20;- num + ''; // 常用- String(num);- num.toString();(2)转换规则: 把变量直接添加双引号,变成字符串
var num = 100;var obj = {a:2,b:3};var boo = true;console.log(num+''); //"100"console.log(String(obj)); //'[object Object]'console.log(boo.toString()); //"ture"
3-3 算数运算
3-3-1 加减乘除 + - * / %
// 算术运算符var a = 5;var b = 3;console.log(a+b); // 8console.log(a-b); // 2console.log(a*b); // 15console.log(a/b); // 1.66666console.log(a%b); // 2
3-3-2 两个变量相加规则
(1)两个数字相加,直接相加(2)有一个加数是字符串时,其它变量都转换成字符串,然后进行拼接(3)NaN,null,undefined + 数字
var a = 100;var str = 'hu';var b = '5';console.log(a+str); // 100huconsole.log(b + null); // 5nullconsole.log(a+null); // 100console.log(a+NaN); // NaNvar c;console.log(a+c); // NaN
(4)两个小数相加,有可能出现很多小数var a = 0.1;var b = 0.2;console.log((a*10+b*10)/10);
3-4 关系运算符(比较运算符)
- == 等于
- === 恒等于,全等于
- == 和 === 的区别
- == 不同类型的变量进行比较, 不比较变量类型, 类型转换后, 只比较值, 值相等, 则为true, 否则为false
- === 先比较类型, 若类型不同,结果为false, 若类型相同,再比较值, 值相同, 则为true
建议尽量使用 ===
var count1 = 100;var count2 = '100';console.log(count1 == count2); // 只比较值是否相等console.log(count1 === count2); // 1.先比较类型, 若类型不同,结果为false, 若类型相同,再比较值, 值相同, 则为true
3-5 逻辑运算符
3-5-1 逻辑非!, 取反即可
var boo1 = true;console.log(!boo1); // falsevar boo2 = false;console.log(!boo2); // truevar count = 100;console.log(!count); // falsevar aa = NaN;console.log(!aa); // true;var str = 'asdfsadfsad';console.log(!str); // falseconsole.log(!!str); // true
3-5-2 逻辑与&&: 中文里并且的意思
(1)对于布尔类型: 两者为true,结果为true(2)对于其他类型: 前者为true取后者,前者为false取前者(3)逻辑与的妙用:var obj = null;console.log(obj.a); // 报错console.log(obj && obj.a); // 防止报错
var boo1 = true;var boo2 = false;var boo3 = true;var boo4 = false;console.log(boo1 && boo3); // 两者为true,结果为true, 其他情况皆为falseconsole.log(boo1 && boo2);console.log(boo1 && boo4);console.log(boo2 && boo3);console.log(boo2 && boo4);console.log(boo3 && boo4);
var count1 = 0;var count2 = 200;var count3 = 100;console.log(count1 && count2); // 0console.log(count2 && count3); //100// 逻辑与的妙用var obj = null;// console.log(obj.a);obj && obj.a;
3-5-3 逻辑或|| : 中文里的或者的意思
(1)对于布尔类型: 一个为true,结果为true(2)对于其他类型:前者为true取前者, 前者为false取后者
var boo1 = true;var boo2 = false;var boo3 = true;var boo4 = false;console.log(boo1 || boo3); // trueconsole.log(boo1 || boo2); // trueconsole.log(boo1 || boo4); //trueconsole.log(boo2 || boo3); //trueconsole.log(boo2 || boo4); //falseconsole.log(boo3 || boo4); // true
var num1 = 100;var str = '';var aa = null;var obj = {};console.log(num1 || str); // 100console.log(obj || num1); // objconsole.log(aa || str); //""
3-5-4 总结: 逻辑与&& 和 逻辑或 ||, 只需要记住两句话
逻辑与: 前者为true取后者,前者为false取前者逻辑或: 前者为true取前者, 前者为false取后者
3-6 一元运算
3-6-1 自加(自减)
``` i++ 运算结束后, i自身加1, 简称先运算后+1
++i i先自身+1, 再运算; 先加1后运算
自加或自减, 是在变量运算过程发生, 不需要等到这个句子运行结束;
```var i = 10;var b = 5 + i++;console.log('b=',b); // 15console.log('i=',i); // 11var m = 10;var b = 5 + ++m;console.log('b=',b); // 16console.log('m=',m); // 11
var i = 16;var j = 20;var b = j + i++ + ++i;console.log(b); // 54
var i = 1;var j = 1;var a = 10;var b = a + i++;var c = b + ++i + i++ + ++j; // b=11, c=19
3-6-2 复合赋值 +=, -=,*=, /=, %=
var sum = 10;sum += 5; // 等同于sum = sum+5; 可以看做是一种简写console.log(sum); //15
3-7 运算符优先级
() => 自加和自减 => 算术运算 => 关系运算(比较运算) => 逻辑运算 => 赋值运算同级运算,从左到右执行
var i = 1;var j = 1;// () => 自加和自减 => 算术运算 => 关系运算(比较运算) => 逻辑运算 => 赋值运算var sum = 20 + i++ + 'abc' || 123 - ++i + ++j + ++j + '123' == 123 * 2/4; // '21abc'
