隐式转换、IF判断、逻辑【与、或、非】、三目运算的用法(基础)

 1.0 隐式转换

隐式转换 => 隐式的转换数据类型 => js机制(原理),不是语法.判断 => 语法

    隐式转换什么时候发生?

  •         操作符对操作数的类型是有要求的,如果操作数的类型不符合要求,就会有隐式转换.
  •         判断语句的()内的数据类型也是有要求,不符合要求就隐式转换.
  •         某些方法的参数的类型是有要求的,不符合要求的隐式转换.

  •         算术运算符要求操作数的类型是Number.如果不是,隐式转换成number再计算
  •         比较运算符要求操作数的类型是Number.(==除外),如果不是,隐式转换成number在比较
  •         判断的()内的数据类型应该是boolean.如果不是,隐式转换成boolean再比较
  •         alert()的参数类型应该是string.如果不是,隐式转换成string,再弹出

    隐式转换的规律是什么?

  •     1 * '零' => '零'不是number,需要转换成数字后再和1相乘.
  •     '零'转换成number是多少? => Number('零') => 返回的值就是'零'转换后的number
  •     NaN和任何数字进行计算,结果都还是NaN

  •     字符串转换成number的规律
  •     非数字字符串转换成number都是NaN.
  •     空字符串会隐式转换成0
  •     纯数字字符串转直接换成number

  •     布尔值转换成number
  •     true是1
  •     false是0

  •     undefinded转换成number是NaN
  •     null转换成number是0

  •     把数字开头的字符串转换成数字.
  •     parseInt('100px') === 100;
  •     转换小数.
  •     parseFloat('1.4px') === 1.4

    1 + true;

2.0 字符串的隐式转换

字符串拼接的 + 不是算术运算的 + 

    如果 + 的操作数有一个是字符串,则这个+就是拼接的 + , 而不是算术的 +

    如果 + 的操作数有一个是对象,则这个+就是拼接的 + , 而不是算术的 +

    拼接的 + .要求操作数是字符串.不是就隐式转换成字符串.然后再拼接.

<script>

    100 + '' === '100';
    100 + true === 101;
    100 + 'true' === '100true';

    100 + window === '100[object Window]';

  </script>

3.0 布尔值隐式转换

<body>
  
  <div id='wrap'></div>

  <script>

    // 100写在if的判断条件里,100不是布尔值,需要隐式转换为布尔值.
    // 显示转换100位布尔值: Boolean(100) === true
    // if (100) {
    //   alert('100是真的');
    // }

    // if (window) {
    //   alert('window是true');
    // }

    const oDiv = document.getElementById('wrap1');

    if (oDiv === null) {
      console.log('div不存在');
    } else {
      console.log('div存在');
    }

    // 推荐利用隐式转换来判断一个标签的存在与否。
    if (oDiv) {
      console.log('div存在');
    } else {
      console.log('div不存在');
    }

    if (1<2) {
      console.log('1<2');
    }

    if (1<2 === true) {
      console.log('1<2');
    }

    // 哪些值转换成布尔值是false?
    // 0,NaN,'',undefined,null

    // 6个数据类型记不住.
    // 5个但记不住.

  </script>

</body>

4.0 常见的判断形式

 1.如何判断一个div的内容是空的

<script>

    const oDiv = document.getElementById('wrap');
    const oText = document.getElementById('text');
    const oCheck = document.getElementById('check');

    console.dir(oDiv);
    console.dir(oText);
  
    if (oDiv.innerHTML === '') {
      console.log('div的内容是空的');
    }

    if (oDiv.innerHTML) {
      console.log('div的内容不是空的');
    } else {
      console.log('div的内容是空的');
    }

  </script>

2.如果判断一个文本框是空的

<script>
 
    if (oText.value) {
      console.log('文本框有输入内容');
    } else {
      console.log('文本框没有输入内容');
    }
</script>

3.如何判断一个div的class是不是active

<script>

    if (oDiv.className === 'active') {
      console.log('oDiv的class是active')
    }
</script>

4.如何判断一个复选框是不是打钩的.
    // checked是一个布尔属性,属性值是布尔值.
    // true表示打钩,false表示不打钩。

<script>

    console.log(oCheck.checked);// true

    if (oCheck.checked === true) {
      console.log('打钩的')
    } else {
      console.log('不是打钩的')
    }

    if (oCheck.checked) {
      console.log('打钩的')
    } else {
      console.log('不是打钩的')
    }
</script>

5.如何判断一个标签的背景色是不是红的

<script>

    if (oDiv.style.backgroundColor === 'red') {
      console.log('红色的')
    }
    // 如何判断一个标签是不是显示的
    if (oDiv.style.display === 'none') {
      console.log('隐藏的')
    }
</script>

6.如何判断一个标签是不是div 

<script>

    if (oDiv.localName === 'div') {
      console.log('oDiv是一个div标签')
    }

    if (oDiv.nodeName === 'DIV') {
      console.log('oDiv是一个div标签')
    }
</script>

7.判断一个变量的类型是不是number

<script>

    let num = '';
    if (typeof num === 'number') {
      console.log('num是数字类型')
    }
</script>

5.0 判断是不是数字

<body>
  
  <input type="text" id='text'>
  <input type="button" value='按钮' id='btn'>

  <script>

    // NaN的两个特性:
    // 1: NaN和任何数字进行计算都是NaN
    // 2: NaN自己和自己比较是false.(只有NaN是这样)

    const oText = document.getElementById('text');
    const oBtn = document.getElementById('btn');

    oBtn.onclick = function() {
      // 把用户的输入的内容转换成number类型.
      // 如果输入的不是纯数字,隐式转换成NaN.
      // 只有NaN自己和自己不等.不等证明输入的不是数字.
      if (oText.value * 1 === oText.value * 1) {
        // 只有整数经过parseInt和parseFloat转换之后的值是一样的.小数不一样.
        if (parseFloat(oText.value) === parseInt(oText.value)) {
          alert('输入的是整数');
        } else {
          alert('输入的是小数');
        }
      } else {
        alert('输入的不是数字');
      }
    }

    // 要判断一个值是不是小数,你得先判断它是不是数字,然后再判断是不是小数。


  </script>

 6.0 逻辑与和或

<script>

    // 区间判断.
    // 判断一个数是不是在10-20之间.

    let num = 5;

    // 10 < num < 20 => 永远都是true. 
    // 因为: 10 < num 隐式转换为数字不是0就是1, 0或者1永远小于20

    if (10 < num < 20) {
      alert('在10-20之间')
    } else {
      alert('不在10-20之间')
    }

  </script>
<script>

    // 区间判断.
    // 判断一个数是不是在10-20之间.

    let num = 5;
    
    // 这个数必须同时大于10并且小于20.

    if (num > 10) {
      if (num < 20) {
        alert('在10-20之间')
      } else {
        alert('不在10-20之间')
      }
    } else {
      alert('不在10-20之间')
    }

  </script>

&& => 并且的意思.
 if ( 条件1 && 条件2 ) => 条件1和条件2都是true,判断条件才是true, 只要有一个是false,条件就是false
 if ( 条件1 && 条件2 && 条件3 .....)

<script>

    // 区间判断.
    // 判断一个数是不是在10-20之间.

    let num = 5;

    if (num > 10 && num < 20) {
      alert('在10-20之间')
    } else {
      alert('不在10-20之间')
    }

  </script>

7.0 逻辑或

    let num = 15;

     if (num < 10) {
       alert('不在10-20之间')
     } else if (num > 20) {
       alert('不在10-20之间')
     } else {
       alert('在10-20之间')
     }

|| => 或者意思.
if ( 条件1 || 条件2 ) => 条件1或者条件2为true,判断条件就是true.两个条件都是false,条件就是false
if ( 条件1 || 条件2 || 条件3 ...... )

<script>

    // 判断一个数不在10-20之间.
    // 数字小于10,或者大于20.

    let num = 15;

    if (num < 10 || num > 20) {
      alert('不在10-20之间')
    } else {
      alert('在10-20之间')
    }

  </script>

8.0 逻辑非

! => 取反 (true变false,false变true) (逻辑非)
!需要操作数是布尔值,如果不是,就隐式转换为布尔值再取反

<script>

    let flag = true;
    console.log(!flag);
    console.log(!100);

  </script>

9.0 反选

<body>
  
  <input type="checkbox" id='check' >
  <input type="button" id='btn' value='切换'>

  <script>

    const oCheck = document.getElementById('check');
    const oBtn = document.getElementById('btn');

    oBtn.onclick = function() {

      if (oCheck.checked === true) {
        oCheck.checked = false;
      } else {
        oCheck.checked = true;
      }

    }

  </script>

</body>
<body>
  
  <input type="checkbox" id='check' >
  <input type="button" id='btn' value='切换'>

  <script>

    const oCheck = document.getElementById('check');
    const oBtn = document.getElementById('btn');

    oBtn.onclick = function() {

       // 取反操作.
       oCheck.checked = !oCheck.checked;
    }
  </script>
</body>
  •  三目写法赋值
<body>
  
  <input type="checkbox" id='check' >
  <input type="button" id='btn' value='切换'>

  <script>

    const oCheck = document.getElementById('check');
    const oBtn = document.getElementById('btn');

    oBtn.onclick = function() {

       // 三目赋值
      oCheck.checked = oCheck.checked ? false : true;
    }
  </script>
</body>

2.0 逻辑或和逻辑与的运算

&& || ! => 都是运算符 => 都能构成表达式 => 有返回值。

    短路操作 => 只需要判断一个条件是否成立,就能知道整个条件是否成立.

    逻辑&& => 操作数1是true,就返回第二个操作数,否则返回第一个操作数.

    逻辑|| => 操作数1是true,就返回第一个操作数,否则返回第二个操作数.

    let x = 100 && '幂幂';

    let x = 100 || '幂幂';

    if (num < 20 && num > 10) => 操作数是什么类型就返回什么类型

    console.log(x);

<script>

    // 女朋友的消息.
    let toBf = '';
    // 男朋友的消息
    let toGf = '';

    // 判断赋值
    // if (toBf === '分手吧') {
    //   toGf = '滚吧!'
    // }

    toGf = toBf === '分手吧' && '滚吧!';

    // if (toBf === '我饿了') {
    //   toGf = '多喝热水'
    // }

    toGf = toBf === '我饿了' && '滚吧!';


  </script>

2.1 三目运算

    三目运算符,三元运算符,条件运算符

    单目运算符 => typeof ++, --, ! delete

    三目运算符有三个操作数.

    操作数1 ? 操作数2 : 操作数3

    运算规律 => 操作数1是true,就返回操作数2,否则返回操作数3.

 <script> 
   if (1<2) {
      alert('1<2')
    } else {
      alert('1>=2')
    }

   // 以上的判断可以改写成三目.
    1 < 2 ? alert('1<2') : alert('1>=2');
</script>
<script> 
   if (1<2) {
      alert('1<2');
      console.log('我是多余的');
    } else {
      alert('1>=2');
      console.log('我也是多余的');
    }

    // 以上代码可以改写成下面的三目.
    1 < 2 
    ? (alert('1<2'),console.log('我是多余的')) 
    : (alert('1>=2'),console.log('我也是多余的'));
</script>
<script> 
   if (是数字) {
      if (是小数) {
        console.log('输入的是小数')
      } else {
        console.log('输入的不是小数')
      }
    } else {
      console.log('输入的不是数字')
    }

// 以上代码可以改写成下面的三目.

    是数字
    ? 是小数
      ? console.log('输入的是小数')
      : console.log('输入的不是小数')
    : console.log('输入的不是数字')
</script>

2.2 判断赋值

<script>

     // 女朋友的消息.
     let toBf = '';
    // 男朋友的消息
    let toGf = '';

    // 判断赋值
    if (toBf === '分手吧') {
      toGf = '滚吧!';
    } else {
      toGf = '多喝热水';
    }

    // 根据条件toBf === '分手吧'的真假,给toGf赋值不同的字符串
    toGf = toBf === '分手吧' ? '滚吧!' : '多喝热水';
    

  </script>

2.3 逻辑与改写if

<script>

    // && 可以改写单个if判断.

    if (1<2) {
      alert('1<2');
    }

    // 通过&&改写if判断.
    1<2 && alert('1<2');

    // if 判断 可以用 && 改写.
    // if else 判断可以用 三目改写.

  </script>

2.4 运算符优先级

<script>

    // 先乘除后加减 => 运算符优先级问题.
    
    // 粗劣的优先级.
    // ++ -- >!>算术 > 比较 > 逻辑 > 三目 > 赋值 > ,

    // let num = 100 && null + 200 * typeof '赵六' || NaN ? console.log('哈哈') && !alert(100) : 1+3;
    // num = 100 && null + 200 * 'string' || NaN ? undefined && !undefined : 1+3;
    // num = 100 && null + 200 * 'string' || NaN ? undefined && true : 1+3;
    // num = 100 && null + NaN || NaN ? undefined && true : 1+3;
    // num = 100 && NaN || NaN ? undefined && true : 4;
    // num = NaN || NaN ? undefined : 4;
    // num = NaN ? undefined : 4;
    // num = 4;

    console.log(num);// 4

  </script>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值