js基础2

90 阅读2分钟

一、数据类型转换

一、引出

分为隐式、显示类型。

<script>
    // 出现弹窗,让用户输入内容
        let num = prompt("请输入一个数字")
      // 检测数据类型并输出
      console.log(typeof num) //string字符串
      // +号有两个意思:1、数字求和 2、字符串
      // 如果+号左右其中一个为字符串,那么+号iu是用来拼接的
      console.log(num + 5) //105
​
      // 数据类型转换
      // 为了得到理想的结果
</script>
二、隐式类型转换

js在进行运算时,会发生隐式类型转换

+"10" 隐式类型转换

<script>
    // 1、隐式转换,就是由javascript内部自己】根据需要】
      // 对数据类型进行转换
      let x = '10' //string
      console.log(x - 1) //NAN不对 结果为9
​
      let s = 'hahah'
      console.log(s - 1) //NAN
​
      // 在上述第一个列子中,JS内部先将'10'转成了10 再进行减1操作
      // 'hahah'转成了NAN再进行减1操作
    
     // 布尔类型
      let isCool = true
      console.log(true - 1)
      // 上述列子中又发生了类型转换
      // 先将true转换成数字1然后 1 - 1 结果为0
​
      isCool = false
      console.log(isCool - 1)
      // 结果为-1
​
      console.log(isCool + 1)
      // 上述的运算在进行转换无非就是把
      // isCool转成数字 或者
      // 把 1 转成布尔
​
      // 加减乘除 数值类型
      // + 数字的运算,把isCool转成数字,也就是0
      // 0 + 1 = 1
      
      // js在进行运算,会发生隐式类型转换
</script>
三、显示类型转换

a) Number 是用来将一个数据转成数值类型的办法,如果能转就转 转不成就为NaN

b) parseInt能够将字符串以【数字开头】的部分提取出来

parseInt(数据) 只保留整数

parseFloat(数据) 可以保留小数

parseFloat会替换parseInt

<script>
    let x = '10' // string
    console.log(x + 5) // 105
    // 先将x转成数字,然后再加5
    console.log(x - 0 + 5) // 15
​
    let y = '10'
    console.log(+y +5) //15
​
    // 开发中尽量少用这些用法(隐式类型容易出现bug)
    // TypeScript要求数据类型一定要明确
    // +"11"就会发生隐式转换
​
    // 2、显示转换,光明正大的进行转换
    let y1 = '10'
    // 下面的代码是指重新定义变量,保存结果
    let newY1 =Number(y1)
    console.log(newY + 20) //结果为30
​
    // 如果一个字符无法转换成数字,那么会怎末样
    let t = 'haha'
    let newT = Number(t)
    console.log(newT) //NaN
​
    // Number 是用来将一个数据转成数值类型的办法
    // 如果能转就转 转不成就为NaN
​
    // 练习题
    let isFine = true
    Number(isFine)
    // b)parseInt能够将字符串以【数字开头】的部分提取出来
    let j ='123abc'
    // 能不能转换成一个数字?
    console.log(Number(j)) //NaN
​
    let newJ = parseInt(j)
    console.log(newJ) //123
​
    let z ='abc123'
    let newZ = parseInt(z) 
    console.log(newZ) //NaN
    
    // c)parseFloat能够将字符串中以【数字开头】的
    // 数字部分提取出来,所不同的是它支持小数
​
    // 将数字部分提取出来(含小数)
    let p = '123.45元'
    let newP = parseFloat(p)
    console.log(newP) //123.45
    let newP1 = parseInt(p)
    console.log(newP1) //123 只提取整数部分
    
    // 如果单纯只是提取字符串开头部分的整数,请使用parseFloat
    // 提取字符串开头的【数字部分】,parseInt
    // 纯数字字符串"100",Number
​
    let b = '123abc'
    console.log(parseFloat(b))
  </script>

模板字符串(进行拼接的时候用)${}

四、作业

image.png

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    h3{
      text-align: center;
    }
    table{
      width: 400px;
      height: 90px;
      margin: 0 auto;
    }
    table,th,td{
      border: 1px solid black;
      border-collapse: collapse;
      text-align: center;
    }
  </style>
</head>
<body>
  <h3>订单确认</h3>
  <script>
    let name = prompt("请输入商品名称:")
    let price = prompt("请输入商品价格:")
    let num = prompt("请输入商品数量:")
    let total = parseFloat(price) * parseFloat(num)
    let address = prompt("请输入商品地址:")
    // console.log(name,price,num,address)
    document.write(`<table>
      <tr>
        <th>商品名称</th>
        <th>商品价格</th>
        <th>商品数量</th>
        <th>商品总价</th>
        <th>商品地址</th>
      </tr>
      <tr>
        <td>${name}</td>
        <td>${price}</td>
        <td>${num}</td>
        <td>${total}</td>
        <td>${address}</td>
      </tr>
    </table>
    `)
  </script>
</body>
</html>

二、运算符

赋值、一元、比较、逻辑

一、赋值运算符

image.png

<body>
  <div class="container">
    <h4>JavaScript 赋值运算符</h4>
    <p>JavaScript 中除了 = 外,还有有许多与赋值相关的运算符:</p>
    <ul>
      <li>+=</li>
      <li>-=</li>
      <li>*=</li>
      <li>/=</li>
      <li>%=</li>
    </ul>
    <script>
      // 定义一个变量并赋值
      let num = 10
      // 让自身减1,然后再次赋值给自身
      num = num - 1
      console.log(num) // 9
​
      num -= 1 //相当于num = num -1
      console.log(num)
      // -= 先减再等于
​
      let y = 9
      y += 1
      console.log(y) //10
​
      let z = 10
      z /= 2
      console.log(z) //5
    </script>
  </div>
</body>
二、一元运算符

一、二、三...运算符

<body>
  <div class="container">
    <h4>JavaScript 一元运算符</h4>
    <p>一元运算符指的只有单个变量参与运算的情形,最常见的一元运算符为 ++ 和 --</p>
    <script>
      // 运算只操作一个变量,就是一元运算
      // ...两个,就是二元运算符
      // ...
​
      let x = 1
      let y = 2
      x + y //二元
​
      let t = 3
      t++
      // 1、++ 是一个运算符,它使当前数据进行 +1的操作
      let j = 4
      j++ //5 相当于就j=j+1
      console.log(j)
      j++
      console.log(j)
        
      // 2、--是一个运算符
      let z = 10
      z-- //9
      console.log(z) 
      z-- //8
      console.log(z)
​
      
    </script>
  </div>
</body>

前++ 后++

<script>
    // ++ 和 --有两种用法
      // 前++ 后++
      let i = 0
      i++ //1
      console.log(i)
      ++i
      console //1
      // 独立用没有任何区别
      let p = 10
​
    //++与另外一个数据进行运算
     let newP = p++ + 5
     console.log(newP) //15
    //如果使用后++ 先与其他的数据进行运算,然后再自己加1
     console.log(p) //11
    
    let l = 9
    let newL = ++q + 4 //13
    console.log(newL)
    //前++ 自身先加+ 然后再与其他进行运算
    
    //面试题
    let i = 1
    console.log(i++ + ++i +i)
    
    let a = 1
    console.log(a++ + ++a +a) //前++先把a变成了2
    不管是前++ 还是后++ 总共加了2次
    console.log(a) //a=3(2 2 3)</script>
三、比较运算符

比较两个数据大小是否相等

image.png

<body>
  <div class="container">
    <h4>JavaScript 比较运算符</h4>
    <p>比较运算符用来比较两个数值类型数据的大小关系,非数值类型的数据会在隐式转换后再进行比较。</p>
    <script>
      //在计算机世界中也是会比较两个数据的大小关系,会用比较运算符
      // > < != ==
      let x = 3
      let y = 5
      
      // 1、x是否大于y
      let res = x > y//不大于
      console.log(res)
        
      // 2、x是否小于y
      res = x < y
      console.log(res)
      //比较运算符的结果一定是布尔类型(true false)
        
      // 3、!=是否不相等
      res = x != y
      console.log(res)
        
      // 4、x是否小于等于y <=
      res =x <= y
      console.log(res)
        
      // 5、x是否大于等于y >=
      res =x >= y
      console.log(res)
        
      // 6、x是否相等y ==
      res = x == y
      console.log(res)
        
      // js中用于【判断相等的符号】有两个
      // == ===
      // 区别在于== 是值相等
      // ===不仅值还有数据类型也相等
      let h ='10'
      let d = 10
      console.log(h == d) //true
      console.log(h == d) //false
      // 使用==项目中命名会报错!
      // 字符类型也可以比较
      let e ='a'
      let f ='b'
      console.log(e>f) //false
      console.log('hello' === 'hello') //true
​
      console.log(0.1 + 0.2) //约等于0.3
      // 不是js 而是计算机知识问题
​
      console.log(0.1 + 0.3 === 0.3) //false
      // 是不是只要小数就会有问题吗?不是
      // 不要对小数进行对比,因为可能出现精度问题!!
    </script>
  </div>
</body>
四、逻辑运算符

image.png

<script>
      // 针对布尔类型运算叫做逻辑运算符
      // 3种符号
      // 1、&& 逻辑与
      // 2、|| 逻辑或
      // 3、! 逻辑非
​
      // 运算结果为布尔类型
      let isFine = true
      let isCool = false
​
      // a)&& "且"
      // isFine && isCool //false
      // 一假则假
      console.log(isFine && isCool) //false
​
      // b)|| '或'
      // 一真则真
      console.log(isFine || isCool) //true
​
      // c)! '取反'
      // 真变假,假变真
      console.log(!isCool) //true
    </script>

练习:

<title>判断一个数是4 的倍数,且不是100的倍数</title>
</head>
<body>
  <script>
    // 输入数字
    let num = prompt("请输入一个数字:")
​
    // 1、判断是不是某个数的倍数,取余%
    // 比较运算符 结果为布尔型
    let num4 = num % 4 === 0 //true false
    let num10 = num % 100 !== 0
    // 2、且 满足至少两个条件(true)
    console.log(num4 && num10) //true或false
  </script>
</body>
五、运算符优先级

image.png

<script>
    is1 = true
    is2 = false
    console.log(!is1 && is2) //false
    console.log(is1 || is2 && is1) //true
  </script>

三、语句

一、表达式和语句
二、分支语句

if、三元运算符、switch语句

1、if分支语句

image.png

<style>
    .container {
      padding: 10px 30px;
    }
  </style>
</head>
<body>
  <div class="container">
    <h4>JavaScript 分支语句</h4>
    <p>分支语句也叫条件语句,代码只有在满足一定条件时才可以被执行:</p>
    <ul>
      <li>if/else</li>
      <li>三元运算符</li>
      <li>switch</li>
    </ul>
    <script>
      // 1、if判断
      //if(条件为真){
        //执行的代码
      //}
      if(true){
        alert('代码被执行了')
      }
      let age = 10
      if(age>20){
        alter('年龄大于20')
      }
​
      // 2、if/else
      if(true){
        //为true执行这里的
      }else{
        //为false执行这里的
      }
      let gender = '女'
      if(gender === '男'){
        alert("男")
      }else{
        alert('为女')
      }
    </script>
  </div>
</body>

练习1:

判断输入数字是否大于700

<script>
    // 1、让用户输入自己的分数 prompt
​
    // 2、通过if进行判断
    let score = prompt("请输入你的分数:")
    if(score> 700){
      alert("大于700")
    }else{
      alert("小于700")
    }
  </script>

练习2:

用户登录 username

<script>
    // 1、prompt 两次
    let username = prompt("请输入用户名:")
    let password = prompt("请输入密码:")
    // 2、用户名 === pink && 密码 === 123456
    if(username === 'pink' && password === '123456'){
      alert("成功登录")
    }else{
      alert("输入账号或密码错误")
    }
  </script>

image.png

练习3:

判断是否为闰年

<script>
    <script>
    // 如果一个年份它是4的倍数且不是100的倍数,或者能被400整除,就是闰年
    // 1、先计算是不是4的倍数 true false
    // 2、再计算是不是100的倍数
    // 取余为0 表示是某某的倍数
​
    let year = prompt("请输入一个年份:")
    if((year % 4 === 0 && year % 100 !== 0 )||year % 400 === 0){
      alert(`${year}是闰年`)
    }else{
      alert(`${year}不是闰年`)
    }
</script>

image.png

练习4:

判断成绩

<script>
    let score = prompt("请输入你的分数")
    if(score<100 && score>=90){
      alert("A")
    }else if(score<90 && score>=80){
      alert("B")
    }else if(score<80 && score>=70){
      alert("C")
    }else if(score<70 && score>=60){
      alert("D")
    }else if(score<60 && score>=0){
      alert("E")
    }else{
      alert("输入错误")
    }
  </script>
2、三元运算符

image.png

条件?真结果:假结果

<script>
    let a = null
    let b = null
    let age = prompt("请输入你的年龄:")
    age>18 ? (a='成年人',b="18岁以上") :(a='未成年',b='18岁以下') 
    alert('a')
    alert('b')
</script>
<script>
    // 1、多分支
    // a) else if
    // b) switch
​
    // 2、两种多分枝的区别
    // 答:else if条件是多种多样的,可以表示一个范围score >= 90
    // 也可以是一个具体的值if(true){}else if(score === 61){}
    // switch只能是固定的 === 进行判断
    // 凡是使用switch的地方,都可以使用else if
​
    // 3、else if的语法格式
    if (条件1) {
​
    } else if (条件2) {
​
    } else if (条件3) {
​
    } else {
​
    }
​
    // 4、switch case语法格式
    switch (数据) {
      case 条件1:
        break
      case 条件2:
        break
      case 条件n:
        break
        default:
    }
​
    // 5、三元运算符
    // 答:它是一种运算逻辑,可以根据条件返回一个结果
    // let 变量 = 条件 ? 结果1 : 结果2
​
    // 但是在日常开发也会使用三元运算符来实现与if else相同的逻辑
    // 条件? true 执行此处逻辑词 : false执行此处逻辑词
​
    // 代码简单,希望得到一种结果,用三元运算符
​
    // 6、短路运算符
    // &&
  </script>
3、switch语句

switch (数据) { case 条件1: break case 条件2: break case 条件n: break default: }

练习1:判断年月日

 <script>
    let year = prompt('请输入年份')
    let month = prompt('请输入月份')
    let day 
    switch (month) {
      case '1':
      case '3':
      case '5':
      case '7':
      case '8':
      case '10':
      case '12':
        day = 31
        break
      case '4':
      case '6':
      case '9':
      case '11':
        day = 30
        break
      case '2':
        if(year % 400 === 0 ||(year % 4 ===0
        && year % 100 !== 0)){
          day = 29
        }else{
          day = 28
        }
        break
    }
    alert(`${year}年的${month}月有${day}天`)
  </script>

练习2:输入星期几,输出对应的英文

<script>
    let day = prompt("请输入今天星期几")
    switch(day){
      case '星期一':
        alert("Monday")
        break
      case '星期二':
        alert("Tuesday")
        break
      case '星期三':
        alert("Wednesday")
        break
      case '星期四':
        alert("Thursday")
        break
      case '星期五':
        alert("Friday")
        break
      case '星期六':
        alert("Saturday")
        break
      case '星期天':
        alert("Sunday")
        break
      default:
        alert("error")
        break
​
    }
  </script>

\