console.log(++(a--)); //() 不能和++ 一起使用
//字符串和数值进行比较 console.log(1>2);//false console.log('123'>213);//false 自动转为number console.log('123A'>213);//false 自动转为number如果不能转就会出现NaN
console.log(NaN==NaN);//false
//undefined(null的派生子类) 和 null console.log(undefined==null);//true console.log(undefined===null);//false
//字符串和字符串比较(ASCII码 A 65 a 96 自动进行ASCII码的比较 比较第一位的) console.log('a'>'b');//false console.log('a'<'b');//true console.log('bAA'<'azz');//false
//boolean类型的值和null进行比较 自动转数值(出现NaN是false) console.log(true>null);//true console.log(true>undefined);//false
//恒等 这个俩个内容是一个内容 console.log(Number(true)==1); //true console.log(Number(true)===1); //true console.log(Boolean(0)===false); //true
//undefined和0进行比较 console.log(undefined == 0);//NaN false //null是空对象引用 对应的是一个引用类型 引用类型比较的是地址 null和0进行比较 console.log(null == 0); //false
//逻辑运算符 && 短路与 &断路与 || 短路或 |断路或 ! //&& 所有的同时满足才为真 && 只要前面有一个是假后面的就不会看了 & 看完全部 var a=10,b=20,c=30 console.log(a>b && b<c);//false console.log(c>b && b<c);//true //|| 有一个是true就是true 前面只要出现了true 就不看后面的 | 看完全部 console.log(c>b || a>b);//true //! 取反 console.log(!c>b || a>b); //false console.log(!(c>b || a>b)); //false // || 常用 有一个是true 取true console.log(a>b || 20); //20 var i = 0 || 10 console.log(i); //如果俩个都是false 取最后一个 var str = undefined || '' console.log(str); //如果俩个都是true的情况下 取第一个为true的 var str1 = "A" || "B" console.log(str1);//A var str2 = "" || 'false' || 'true' console.log(str2);//false字符串 //三目运算 逻辑运算优先级会高于三目运算符 var str3 = (10 > 20 ? '' : '123') || (30 > 20 ? '' : '456') console.log(str3);//123 //如果出现false 直接取false 如果全是true 取最后一个 var str4 = 10 && 20 //20 var str5 = undefined && '' //undefined //转成boolean类型 var str6 = !123 //false console.log(str4); console.log(str5); console.log(str6);
说明:进行逻辑运算时,如果是逻辑表达式返回的值就会是true和false,但如果是值的话,就返回相应的值就行。
控制程序的执行(利用条件控制 利用循环来控制)
if如果(第一个条件)else if 如果(第二个条件 无限加)else 否则(当上面条件都不满足的情况)
if(条件表达式(boolean类型的值 如果当前这个不是一个boolean的值他会自动转成boolean类型)){ 需要执行的代码 }else if(条件表达式){ 需要执行的代码 }else{ //上面的都不满足的情况下 需要执行的代码 }
var a=10,b=20 //从上到下的顺序进行的 上面只有一个进入的下面的内容就不会执行了 if(a>b){ console.log('我是a的值为'+a) }else if(a==b){ console.log('我是b的值为'+b) }else if(a<b){ console.log('a的值小于b的值') }else{ console.log('上面的都不满足') }
例子:
//参军条件 身高大于170 var height = prompt('请输入你的身高') //string值的 if(!(height*1)){//NaN console.log('兄弟 绕我一命!!'); }else if(height>230 || height<50){ console.log('恭喜你超出人类标准'); }else if(height>170){//自动转为number类型 console.log('恭喜你满足条件了'); }else{ console.log('当前不满足条件'); }
当前只有一句代码的时候可以省略对应的{} (多行代码是不行的),所以建议都写上{}。
// 保证良好的缩进 保证可读性 // 求y的值 var x = prompt() var y //可能不是数值 //提取条件优秀级 先找出问题的条件 再找大的条件 再找小的条件 if(Number(x) || x == 0){ if(x<0){ y = -1 }else if(x==0){ y = 0 }else{ y = 1 } console.log(y); }else{ console.log('您的输入有误'); }
switch 属于对应的值判断 里面的是对应的表达式(产生对应的值) 下面的case就是一个个的值选项
switch(表达式){ case 值(常量): 操作 break; case 值: 操作 break; case 值: 操作 break; default: 当上面都不满足的情况下才执行默认的操作 }
例子:
// 指令系统 发送1 吃饭 发送2 游戏 发送3 睡觉 发送4 再来一次 发送5 吃饭 var number = prompt() //恒等判断 需要对应的类型和值一样 switch(number){ case '1' : case '5 ': //1和5干的一样的事情 console.log('吃饭'); break case '2' : console.log('游戏'); break case '3' : console.log('睡觉'); break case '4' : console.log('再来一次'); break default: console.log('默认值'); } //break 跳出 跳出整个代码块 switch代码以及循环代码块 如果没有break 从头走到底 会从满足条件 的第一个走到default里面 //switch 不能判断范围 只能对应的进行特定的值的判断 //if 判断范围 在一定区间内容进行判断(功能更加强大)
if else else if 里面的代码只有一行可以省略{}
if 后面不一定要带else或者else if
if里面的表达式如果不是对应的boolean的表达式 他会强制转换为boolean类型(自动转换)
else 一定的是最后的 而且他是不带条件的
if 里面可以嵌套if 以及相关的内容(else else 都可以嵌套的)
switch 里面填写的表达式是会返回值 这个值一般是常量
switch里面有case和对应的default case表示一个个的选项 对应的default表示默认选项
多个case可以在一行书写 表示对应的处理语句是一个
break用于跳出整个代码块 跳出switch (也可以跳出循环的代码块)
switch必须要有规定的值的时候才有 他不会使用到有区间的内容(比对是恒等比对)
if 是可以使用区间值 也可以使用固定值
if效率和switch效率 从一行代码区分对应的来说 if效率会高点 多行代码区分 switch效率会高(用空间换时间)