JS之对运算符及表达式的补充和对逻辑分支语句的认识

一、对运算符及表达式的补充认识

  1.自增++或自减--不能写在靠近()的前面或者后面,会报错,例:   

    console.log(++(20--));

  2.string类型和number类型进行比较(string类型会自动转换为number类型,如果string类型中含有非数字的值则就会变成NaN)例:     

    console.log(‘1’>2);//false
    console.log('123'>213);//false 自动转为number
    console.log('123A'>213);//false 自动转为number如果不能转就会出现NaN

 

  3.如果出现NaN一般都为false,即使是NaN也不等于NaN,因为NaN代表非数字,它不等于任何值,也不能做运算。例:   

    console.log(NaN==NaN);//false  

  4.undefined是null派生出来的所以对应的值相等。可以从Javascript规范中找到答案:规范中提到, 要比较相等性之前,不能将 null 和 undefined 转换成其他任何值,并且规定null 和 undefined 是相等的。

  全等于状态下,是false,因为它们不属于同一数据类型。例:    

    console.log(undefined==null);//true
    console.log(undefined===null);//false
    typeof null //object 
    typeof undefined //undefined

  5.字符串和字符串进行比较 (第一位ASCII码比较 A 65 a 97)

    //字符串和字符串比较(ASCII码 A 65 a 97 自动进行ASCII码的比较 有多个时只比较第一位)
    console.log('a'>'b');//false
    console.log('a'<'b');//true
    console.log('bAA'<'azz');//false

  6.布尔类型的值和null进行比较  

    //boolean类型的值和null进行比较 自动转数值(出现NaN是false)
    console.log(true>null);//true,treu转为1,null转为0
    console.log(true>undefined);//false undefined为NaN

  7.布尔类型的值和number类型比较   

    //恒等 这个俩个内容是一个内容 Number把布尔类型转为了number型
    console.log(Number(true)==1); //true
    console.log(Number(true)===1); //true
    console.log(Boolean(0)===false); //true

  8.null值及undefined跟0进行比较 

    //undefined和0进行比较
    console.log(undefined == 0);//undefined被转为NaN false
    //null是空对象引用 对应的是一个引用类型 引用类型比较的是地址 null和0进行比较
    console.log(null == 0); //false

  9.逻辑运算符    

  &&找到假的立刻结束,形成短路,

  ||或找到真的立刻结束,形成短路。

复制代码
//逻辑运算符 && 短路与 &断路与 || 短路或 |断路或 !
//&& 所有的同时满足才为真 && 只要前面有一个是假后面的就不会看了 & 看完全部
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);
复制代码

表达式的概念:由运算符和操作数(变量或常量)组成的式子

算术运算符组成的式子叫算术表达式,如:2+3;

关系运算符组成的式子叫关系表达式或者条件表达式, 如:a>5;

逻辑运算符组成的式子叫做逻辑表达式, 如:a&&b

运算符优先级(从上到下执行)

二、程序控制语句(所有的程序、语言都有 )

    条件控制语句(只会进入其中一个条件)

  1、程序的分支结构 IF语句

    大多数编程语言中最为常用的一个语句就是 if 语句。if的语法为:

    if (条件) { 语句1 } else { 语句2 } 

    其中的条件可以是任意表达式,表达式值的结果不一定为布尔值,但是可以自动把表达式的值转换为布尔值。如果值为true则执行语句1否则执行语句2,大括号里面可以写任意代码。

if语句的三种格式:

if( 条件 ){ 语句1 } (如果语句1只有一行代码时可以省略{})

if ( 条件 ) { 语句1 } else { 语句2 }

if ( 条件 ) { 语句1 } else if ( 条件 ){ 语句2 }...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('上面的都不满足')
}
复制代码

    条件嵌套:     

复制代码
// 求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('您的输入有误');
}
复制代码

 

  2、程序的多分支结构 switch语句

    switch 语句与 if 语句的关系最为密切,而且也是在其他语言中普遍使用的一种流程控制语句。

    switch 的语法为:  

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 判断范围 在一定区间内容进行判断(功能更加强大)
复制代码

三、总结   

  1. if else else if 里面的代码只有一行可以省略{}
  2. if 后面不一定要带else或者else if
  3. if里面的表达式如果不是对应的boolean的表达式 他会强制转换为boolean类型(自动转换)
  4. else 一定的是最后的 而且他是不带条件的
  5. if 里面可以嵌套if 以及相关的内容(else else 都可以嵌套的)
  6. switch 里面填写的表达式是会返回值 这个值一般是常量
  7. switch里面有case和对应的default case表示一个个的选项 对应的default表示默认选项
  8. 多个case可以在一行书写 表示对应的处理语句是一个
  9. break用于跳出整个代码块
  10. 跳出switch (也可以跳出循环的代码块)
  11. switch必须要有规定的值的时候才有 他不会使用到有区间的内容(比对是恒等比对)
  12. if 是可以使用区间值 也可以使用固定值
  13. if效率和switch效率 从一行代码区分对应的来说 if效率会高点 多行代码区分 switch效率会高(用空间换时间)
posted @   阿打算打打发发呆  阅读(50)  评论(3编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示