javascript数据类型与数据类型的转换

162 阅读1分钟
<!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>js数据类型与数据类型的转换</title>
</head>

<body>
  <script>
    /* 
      1.js数据类型分为两大类
         基本数据类型(值类型)
           number: 数字
           string: 字符串
           boolean: 布尔值
           undefined: 未定义
           null: 空值
         复杂数据类型(引用类型)
           array: 数组
           function: 函数
           object: 对象
     */

    // 1.number: 数学中的一切数字  (显示为蓝色)
    // 作用:负责数学计算
    console.log(206); //整数
    console.log(9.9); //小数
    console.log(-11); //负数
    console.log(Infinity); //无穷大

    console.log('-------------------------------------------------------------------');

    // 2.string: 一切以 引号(单引号''  双引号""  反引号``)包起来的内容 (显示为黑色)
    // 作用: 用于展示网页的文本
    console.log('206');
    console.log('我爱你');
    console.log('-206');
    console.log('我"爱"你们'); //我"爱"你们

    /* 需求: 弹出一个输入框,让用户输入姓名和年龄. 然后在控制台打印: 大家好,我的姓名是xxx,我的年龄是xxx*/
    let name = prompt("请输入您的姓名")
    let age = prompt("请输入您的年龄")

    //    错误写法: 这样无法获取name的数据,而是把'name'和'age'作为字符串的一部分
    console.log('大家好,我的姓名是name,我的年龄是age');

    //    解决方案1: 使用 + 连接符
    //    + 号只要遇到字符串,就会变成连接符
    console.log('大家好,我的姓名是' + name + ',我的年龄是' + age);

    //    解决方法2(推荐): 使用反引号``
    /* 反引号``: 模板字符串,一般用于拼接字符串
       语法: ${变量名}
       注意点: ${变量名} 只能在``里生效
    */
    console.log(`大家好,我的姓名是${name},我的年龄是${age}`);

    console.log('-------------------------------------------------------------------');

    // 3.boolean: 布尔值  只有两个值  true(真) / false(假)  (显示为蓝色)
    // 作用: 表示事物的对立面   true:条件成立   false:条件不成立
    console.log(true);
    console.log(false);

    console.log('-------------------------------------------------------------------');

    // 4.underfined: 未定义   变量有声明但未赋值,默认值是underfined  (显示为灰色)
    // 作用: 开发中一般通过判断变量是不是underfined,来判断这个变量有没有数据
    let num
    console.log(num); //underfined

    console.log('-------------------------------------------------------------------');

    // 5.null: 空值 空值是程序员手动给的,表示暂时不知道赋什么值 (显示为灰色)
    // 作用: 开发中我有一个变量要存储数据,但这个数据暂时不知道,需要经过计算才知道具体存什么数据,可以先给个null
    let nul = null
    console.log(nul); //null

    console.log('-------------------------------------------------------------------');
    console.log('-------------------------------------------------------------------');

    /* 检测数据类型:
         语法:  typeof 数据
         结果:  告诉你这个数据是什么类型('string' 'number' 'boolean')
    */
    console.log(typeof '123'); //'string'
    console.log(typeof 123); //'number'
    console.log(typeof 'false'); //'string'
    console.log(typeof false); //'boolean'
    console.log(typeof undefined); //'undefined'
    console.log(typeof null); //'object'

    console.log('-------------------------------------------------------------------');'
    console.log('-------------------------------------------------------------------');
    console.log('-------------------------------------------------------------------');
    /* 
    1.隐式转换: 当运算符左右两边数据类型不一致时,编译器会自动转成一致后计算
         开发中尽量不要使用隐式转换,因其转换规则很复杂,代码不严谨,阅读性不高
         1.1转string: 连接符 +
         1.2转number: 数学正号 +    数学运算: + - * /
    */
    // 1.1转string: +
    console.log(1 + '1'); //'1'+'1'='11'
    // 1.2转number
    console.log('5'); //'5'
    console.log(+'5'); //5

    // let age = +prompt('请输入年龄')
    // console.log(age); //18 (number)

    // 1.3转number: + - * /
    console.log('10' / 2); //5
    // + : 数学加法
    console.log(1 + true); //1+1=2

    console.log('-------------------------------------------------------------------');

    /* 
    2.显示转换: 程序员主动使用js语法来转换 (推荐: 阅读性高)
      2.1转number
        字符串转整数: parseInt(数据)
        字符串转小数: parseFloat(数据)
        其他类型转数字: Number(数据)
    */
    let str = '123.5.6.a'
    // 字符串转整数: parseInt(数据)
    // 解析整数,遇到非数字结束解析
    console.log(parseInt(str)) //123
    //字符串转小数: parseFloat(数据)
    //解析小数,可以识别第一个小数点,遇到非数字结束解析
    console.log(parseFloat(str)) //123.5
    //其他类型转数字: Number(数据)
    //只要有非数字字符,一律得到NaN
    console.log(Number(str)); //NaN
    console.log(Number(true)); //1
    console.log(Number(false)); //0
    console.log(Number(undefined)); //NaN
    console.log(Number(null)); //0

    //NaN: not a number 不是一个数字
    //NaN是number类型中的特殊值,表示数学运算结果是错误的,得不到数字
    console.log('张三' - 100); //NaN  结果错误
    //NaN无法与任何数据进行计算,结果一律是NaN
    console.log(NaN * 0); //NaN

    console.log('-------------------------------------------------------------------');

    /*2.2转string:两种语法
           常用: String(数据)
               可以转undefined和null
           少用: 变量名.toString()
               不可以转undefined和null
    */
    let num = 10
    console.log(num); //10
    console.log(typeof num); //'number'

    //1.String(数据)
    console.log(String(num)); //'10'
    console.log(typeof String(num)); //'string'
    console.log(String(null)); //'null'

    //2.变量名.toString()
    console.log(num.toString()); //'10'
    // console.log(undefined.toString()); //报错

    console.log('-------------------------------------------------------------------');
    /*2.2转布尔类型:一种语法
        Boolean(数据):由于布尔类型只有两个值true和false,因此任何数据转布尔类型只会得到两种情况
         1.得到false:八种数据
             undefined
             null
             ""    (空字符串)
             0
             -0
             NaN
             false
             document.all
         2.得到true: 除false八种之外任意数据
    */
    console.log(Boolean(undefined)); //false
    console.log(Boolean(null)); //false
    console.log(Boolean("")); //false
    console.log(Boolean(0)); //false
    console.log(Boolean(-0)); //false
    console.log(Boolean(NaN)); //false
    console.log(Boolean(false)); //false
    console.log(Boolean(document.all)); //false

    console.log(Boolean(2 * 4)); //true

    console.log('-------------------------------------------------------------------');


    /* 需求: 弹出一个输入框,让用户输入今年的年龄,然后告诉用户五年后多大 */
    let age = prompt('请输入您今年多少岁')
    console.log(age); //'24'
    console.log(typeof age); //string

    let age5 = parseInt(age) + 5
    alert(`五年后你${age5}岁了`)
  </script>
</body>

</html>