• JavaScript -- 02. 变量和数据类型


    变量和数据类型

    JS中的变量和数据类型:字面量和变量的介绍、变量的声明方式(let、var)、常量(const)、原始值(String、Number、BigInt、Boolean、Null、Undefined、Symbol)、值和变量在内存中的结构、不可变类型、显式类型转换等内容

    数据类型,指那些可以赋值给变量的值,JS中的数据类型由原始值和对象共同组成。

    JavaScript中一共有七种原始值,原始值在JS中是不可变类型,一旦创建就不能修改:

    在修改变量的值的时候没办法直接改掉这个这个值,只能是创建一个新值,让变量指向新值

    • 数值(Number)
    • 大整数(Biglnt)
    • 字符串(String)
    • 布尔值(Boolean)
    • 空值(NuIl)
    • 未定义(Undefined)
    • 符号(Symbol)

    类型检查:typeof

    • typeof用来检查不同的值的类型
    • 它会根据不同的值返回不同的结果
    • 返回结果是一个字符串,字符串描述了该变量的类型
    • 要区分变量和值的概念,js中变量是没有类型的,只有值有类型,typeof检查的是值的类型,变量只是指向值的一个引用

    image-20221130001039244

    1 数值(Number)

    1.1 普通数值

    • 在JS中所有的整数和浮点数都是Number类型

    • JS中的数值并不是无限大的,当数值超过一定范围后会显示近似值

      image-20221129235820220

    • 当数值很小的时候,也会显示近似值

      image-20221130000029145

    • Infinity 是一个特殊的数值表示无穷

    • 所以在JS中进行一些精度比较高的运算时要十分注意

      image-20221130000052939

    • NaN(Not a Number) 也是一个特殊的数值,表示非法的数值

    NaN是js中的一个特殊的东西,在其他语言中一般都会直接报错

    image-20221130000217046

    1.2 其他进制的数字

    • 二进制:0b
    • 八进制:0o
    • 十六进制:0x

    不管什么进制的数字,在打印的时候都会显示成10进制

    image-20221130000727910

    2 大整数(BigInt)

    • 大整数用来表示一些比较大的整数
    • 大整数使用n结尾,它可以表示的数字范围是无限大
    • 只能表示整数,不能表示小数

    只要内存不溢出就可以表示

    大整数只能和大整数计算,不能和基础数值混合计算

    image-20221130000438136

    3 字符串(String)

    3.1 基础表示

    在JS中使用单引号或者双引号来表示字符串(不能混着用)

    let a = "Hello"
    a = "你好"
    
    • 1
    • 2

    3.2 转义字符

    在JS中很多符号都是有特殊含义的,比如单引号和双引号,被用来标识字符串,如果想要在字符串中出现的话会导致一些问题,所以这个时候需要转义字符

    比如:

    // 使用 let a = "123"123123" 会报错,正确的用法是
    let a = "123\"123"
    
    • 1
    • 2

    常见的转移字符如下:

    转义字符意义ASCII码值(十进制)
    \b退格(BS) ,将当前位置移到前一列008
    \n换行(LF) ,将当前位置移到下一行开头010
    \r回车(CR) ,将当前位置移到本行开头013
    \t水平制表(HT) (跳到下一个TAB位置)009
    \\代表一个反斜线字符’‘’092
    \’代表一个单引号(撇号)字符039
    \"代表一个双引号字符034
    ?代表一个问号063

    3.3 模板字符串

    在JS中,通过单引号和双引号引起来的字符串是不能换行的,如果要换行的话可以使用\

    let a = "aaa\
    		bbb"
    
    • 1
    • 2

    image-20221130002141352

    但是使用很不方便,在JS中引入了一种叫做模板字符串的东西,使用方式是通过反引号括起来

    let a = `123
    		2312`
    
    • 1
    • 2

    image-20221130002130706

    对比发现,在模板字符串中,多了一个\n,说明其可以将换行的信息也保存下来

    除此之外,模板字符串最大特点是可以嵌入变量

    let name = "张三"
    let str = `你好,${name}`
    console.log(str)
    
    • 1
    • 2
    • 3

    image-20221130002326102

    4 布尔值(Boolean)

    布尔值(Boolean)

    • 布尔值主要用来进行逻辑判断
    • 布尔值只有两个true 和 false
    • 使用typeof检查一个布尔值时会返回 “boolean”
    let a = true 	// 真
    let b = false	// 假
    
    • 1
    • 2

    image-20221130002834355

    5 空值(Null)

    空值 (Null)

    • 空值用来表示空对象
    • 空值只有一个 null
    • 使用typeof检查一个空值时会返回"object"
    • 使用typeof无法检查空值

    image-20221130002900189

    6 未定义(Undefined)

    未定义(Undefined)

    • 当声明一个变量而没有赋值时,它的值就是Undefined
    • Undefined类型的值只有一个就是 undefined
    • 使用typeof检查一个Undefined类型的值时,会返回 “undefined”

    image-20221130002946295

    7 符号(Symbol)

    符号(Symbol)

    • 用来创建一个唯一的标识
    • 使用typeof检查符号时会返回 “symbol”
    let c = Symbol() // 调用Symbol()创建了一个符号
    console.log(typeof c)
    
    • 1
    • 2

    image-20221130003305498

    8 类型转换

    类型转换指将一种数据类型转换为其他类型

    类型转换是根据当前值去创建另一个值,而不是将当前值直接进行转换

    这里说到的转换都是显示类型转换,除此之外还有隐式类型转换

    8.1 转换为字符串

    1. 调用toString()将其他类型转换为字符串

      由于null和undefined中没有toString()方法,所以对这两个函数调用toString()的时候会报错

      image-20221130103929105

    调用String()函数

    • 对于拥有toString()的值调用String()函数时,实际上就是在调用toString()方法
    • 对于null,则直接转换为"null"
    • 对于undefined,则直接转换为"undefined"

    image-20221130104240420

    8.2 转换为数值

    使用Number()函数将其他数值转换为数值

    image-20221130105056482

    转换情况:

    • 字符串:
      • 如果字符串是一个合法的数字,则会自动转换为对应的数字
      • 如果字符串不是合法数字,则测转换为NaN
      • 如果字符串是空串或纯空格的字符串,则转换为0
    • 布尔值:
      • true转换为 1,false转换为 0
    • null 转换为 0
    • undefined 转换为 NaN

    专门用来将字符串转换为数值的两个方法

    这两个函数接受的参数都是string,如果传入的参数不是字符串的话,会自动转换为string

    • parseInt():将一个字符串转换为一个整数
      • 解析时候,会自左向右读取一个字符串,直到读取到字符串中所有的有效的整数
      • 也可以使用parseInt()来对一个数字进行取整
    • parseFloat():将一个字符串转换为一个浮点数
      • 解析时候,会自左向右读取一个字符串,直到读取到字符串中所有的有效的小数
    let a = "123px"
    console.log(typeof a, a) // string 123px
    
    let b = parseInt(a)
    console.log(typeof b, b) // number 123
    
    let c = parseInt("a123")
    console.log(typeof c, c) // number NaN
    
    let d = parseInt(123.456)
    console.log(typeof d, d) // number 123
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    8.3 转换为布尔值

    使用Boolean()函数将其他类型转换为布尔值

    记false的情况就好了,false的情况比较少,其余的情况都是true

    • 转换的情况:

      • 数字:

        • 0 和 NaN 转换为false
        • 其余是true
      • 字符串:

        • 空串 转换为 false
        • 其余是true
      • null和undefined 都转换为 false

      • 对象:对象会转换为true

    • 所有表示空性的没有的错误的值都会转换为false:

      • 0、NaN、空串、null、undefined、false
    Boolean(1) // true
    Boolean(-1) // true
    Boolean(0) // false
    Boolean(NaN) // false
    Boolean(Infinity)) // true
    
    Boolean('abc') // true
    Boolean('true') // true
    Boolean('false') // true
    Boolean('') // false
    Boolean(" ") // true
    Boolean(null) // false
    Boolean(undefined) // false
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    8.4 总结

    隐式转换在运算符讲解

    • 转换为字符串
      • 显式转换:String(a)
      • 隐式转换: a + ""
    • 转换为数值
      • 显式转换:Number(a)
      • 隐式转换:+a
    • 转换为布尔值
      • 显式转换:Boolean(a)
      • 隐式转换:!!a
  • 相关阅读:
    微信好友消息自动回复,让你轻松应对好友咨询
    Nacos 配置中心底层原理(1.X版本)
    Python 细聊可以媲美 PS 的 PIL 图片处理库
    什么是P问题、NP问题和NPC问题
    CVE-2022-42475-FortiGate-SSLVPN HeapOverflow 学习记录
    CJSON解析json字符串示例
    18.5 重载全局new、delete、定位new及重载等
    论文阅读笔记 | 三维目标检测——PointNet++
    天线设计该如何入门
    B. Jellyfish and Game-Codeforces Round 902 (Div. 2)
  • 原文地址:https://blog.csdn.net/qq_46311811/article/details/128124261