一、JS 基础知识之基础语法(6)--- 类型转换 / 打印学生成绩表

49 阅读3分钟

数据类型转换方式

学过之前的内容,我们知道 JS 是弱数据类型 ,赋值之前我们并不知道变量属于哪种数据类型,只有赋值之后才能知道。

很多情况下,获取过来的数据默认是字符串,但在后续操作中,有些地方需要进行加减运算,例如,之前使用 prompt 让用户输入自己的年龄,如果想要计算出十年之后该用户多大了,此时直接进行加法运算不会得到预期结果:

  <body>
    <script>
      let age = prompt("请输入年龄:")
      let tenYears = age + 10
      console.log(tenYears)
    </script>
  </body>

image.png

上例中,我们的期望结果是 28 ,但显然没有达到预期,这是因为 prompt 输入的数值默认是字符串型的,浏览器在渲染时,将其当作字符串处理了,此时需要转换变量的数据类型,即把输入的字符串类型转换成数字型

变量的 数据类型转换 就是把获取到的数据转换成我们需要的数据类型

数据类型转换有两种方式:隐式转换、显式转换

image.png

1. 隐式转换

上例中的年龄在进行加法运算时,系统内部自动将数据类型进行了转换,这种转换就称为 隐式转换 ,它的转换类型不明确,需要靠经验才能总结出来。

隐式转换的规则:

  • + 两边只要有一个数据类型是字符串,那么另一个也会被转成 字符串类型 ,如上例中的年龄运算
  • 除了 + 运算符之外的其它算数运算符都会把数据类型转换成 数字类型 ,如 - 、* 、/
  <body>
    <script>

      console.log(3 + 5)
      console.log('3' + 5)
      console.log(5 - 3)
      console.log(5 - '3')
      console.log(3 * 5)
      console.log(5 * '3')
      
    </script>
  </body>

image.png

+ 作为 正号 解析时可以将数据转换成 数值型

  <body>
    <script>
      let age = prompt('请输入年龄:')
      let tenYears = +age + 10
      console.log(tenYears)
    </script>
  </body>

image.png

2. 显式转换

为了避免隐式转换带来的问题,通常根据需要对数据进行 显式转换 ,即自己在代码里设定需要的数据类型

(1)转换为数字型

Number 将数据转换成 数字类型 ,如果待转换的内容里有非数字类型,转换结果为 NaN ,意为 Not a Number 不是一个数字,它也是 number 类型的数据,表示 非数字

  <body>
    <script>
      let age = prompt("请输入年龄:")
      let tenYears = Number(age) + 10
      console.log(tenYears)
    </script>
  </body>

image.png

  <body>
    <script>
      let name = '123ab'
      console.log(Number(name))
    </script>
  </body>

image.png

parseInt() 只保留整数,没有四舍五入

  <body>
    <script>
      console.log(parseInt('12.23'))
      console.log(parseInt('10.91'))
      console.log(parseInt('3.2a'))
      console.log(parseInt('34a.9'))
      console.log(parseInt('sa34.9'))
      console.log(parseInt('34.a9'))
    </script>
  </body>

image.png

parseFloat() 可以保留小数,经常用于过滤单位

  <body>
    <script>
      console.log(parseFloat('12.23px'))
      console.log(parseFloat('3.2apx'))
      console.log(parseFloat('34a.9'))
      console.log(parseFloat('sa34.9'))
      console.log(parseFloat('34.a9'))
    </script>
  </body>

image.png

(2)转为字符型

String() 将数据转为 字符型

  <body>
    <script>
      console.log(String(123))
      console.log(typeof String(123))
    </script>
  </body>

image.png

toString()

  <body>
    <script>
      let a = 1234
      console.log(a.toString())
      console.log(typeof a.toString())
    </script>
  </body>

image.png

实例:打印学生成绩表

学生输入姓名、数学、英语成绩,后台计算出总分,可以在页面自动打印成绩表

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>
      div {
        margin: 0 auto;
        width: 800px;
      }
      table {
        text-align: center;
        border: 1px solid rgb(187, 52, 52);
        border-collapse: collapse;
      }
      th,
      td {
        border: 1px solid #000;
        width: 100px;
        height: 45px;
      }
    </style>
  </head>
  <body>
    <script>
      let sName = prompt('请输入学生姓名:')
      let sMath = prompt('请输入数学成绩:')
      let sEnglish = prompt('请输入英语成绩:')
      let total

      total = parseFloat(sMath) + parseFloat(sEnglish) + "分"

      document.write(
        `
        <div>
      <table>
        <caption>
          <h2>学生成绩表</h2>
        </caption>
        <tr>
          <th>学号</th>
          <th>姓名</th>
          <th>数学</th>
          <th>英语</th>
          <th>总分数</th>
        </tr>
        <tr>
          <td>1001</td>
          <td>${sName}</td>
          <td>${sMath}</td>
          <td>${sEnglish}</td>
          <td>${total}</td>
        </tr>
      </table>
    </div>
    `
      )
    </script>
  </body>
</html>