JavaScript - 数据类型

191 阅读4分钟

概述

JavaScript的数据类型

  1. number : 数字
  2. string : 字符串
  3. boolean : 布尔值(表示真伪的两个特殊值,即true(真)false(假)
  4. undefined : 空值,(表示“未定义”或不存在,即由于目前没有定义,所以此处暂时没有任何值)
  5. null : 空值,即此处的值为空
  6. object : 对象
  7. symbol : 符号
  8. bigint:可以表示任意大的整数
本篇主要记录numberstringbooleanundefinednullobject内容较多单独写一篇笔记。
文章作为笔记记录学习相关内容,有更深入理解会进行补充、修改。

注意

数字与字符串区别

数字与字符串是不同的。例如:都是一,为什么要分 1 和 '1'

  • 功能不同
    • 数字能加减乘除,字符串不行
    • 字符串能表示电话号码,数字不行
  • 存储形式不同
    • JS 中,数字是用 64 位浮点数的形式存储的
    • JS 中,字符串是用类似 UTF8 形式存储的(UCS-2)

以下不是数据类型

数组 、函数 、日期(它们都属于 object)

number(数字)

写法

  • 整数写法 :1
  • 小数写法 :0.1
  • 科学计数法 :1.23e4
  • 八进制写法 :0123001230o123
  • 十六进制写法 :0x3F0X3F
  • 二进制写法 :0b110B11

特殊值

  • +0 和 -0 :都等于0,要严谨
  • 无穷大 :Infinity 、+Infinity 、-Infinity
  • NaN :(Not a Number)无法表示的数字,但它是一个数字

1665824079514.png (NaN是一个不确定的数字)

存储形式

  • JS用 64位浮点数 存储number, 大家都是浮点数,没有整数

64位浮点数

  • 浮点就是浮动的点,意思就是小数点会乱动。
    • 例如:123.456 可以表示为 1.23456e10^2 ;也可以表示为 12345.6e10^-2
  • 64位存储一个 number
    • 符号占 1 位
    • 指数占 11 位(-1023~1024)
    • 有效数字占 52 位(开头的 1 省略)

1665822547586.png 例如:(二进制) -1.01100110*2^8 中负号存1,指数部分存8,有效数字存01100110(省略第一个1)

  • 范围(忽略符号位)
    • 指数拉满、有效数字拉满,得到最大值:(Number.MAX_VALUE: 1.7976931348623157e+308)
    • 指数负方向拉满、有效数字最小1,得到最小值:(Number.MIN_VALUE: 5e-324)

1665825318578.png

  • 精度(有效数字)
    • 最多只能到52+1个二进制位表示有效数字
    • 2^53 对应的十进制是 9 后面 15 个零,所以15位有效数字都能精确表示
    • 16位有效数字如果小于 90 开头,也能精确表示,但是9110000000000001 就存不下来

存储大于下图数字的都会造成丢失
1665825686597(1).png

例如: 1665825901823.png

string(字符串)

(一个字符串占两个字节)

写法

  • 单引号:'你好'

  • 双引号:"你好"

  • 反引号:`你好`

  • 注意:引号不属于字符串的一部分,就像书名号不属于书名的一部分一样

转义

用另一种写法表示你想要的东西,例如想在单引号里面再加单引号

  • \' 表示 '
  • \" 表示 "
  • \n 表示换行
  • \r 表示回车
  • \t 表示 tab 制表符
  • \\ 表示 \
  • \uFFFF 表示对应的 Unicode 字符
  • \xFF 表示前 256 个 Unicode 字符
  • 反引号里加上反引号时,需要把外面的反引号` `变成`` ``
  • 想在字符串里回车可以给相关内容用反引号包起来

字符串长度

  • 字符串 \n\t\r 的长度是3
  • ''空字符串的长度是0
  • ' '包含一个空格的字符串长度是1

1665828427453.png

  • 通过下标读取字符
    • 从0开始

1665828514131.png

Base64 转码

  • window.btoa:正常字符串转为 Base64 编码的字符串
  • window.atob:Base64 编码的字符串转为原来的字符串

1665828796849.png

boolean(布尔值)

  • 布尔值代表“真”和“假”两个状态。“真”用关键字true表示,“假”用关键字false表示。布尔值只有这两个值。
  • 下列运算符会得到 bool 值:
    • 否定运算 !value
    • 相等运算 1 == 21 != 23 === 43 !== 4
    • 比较运算 1 > 21 >= 23 < 43 <= 4
  • 如果 JavaScript 预期某个位置应该是布尔值,会将该位置上现有的值自动转为布尔值。转换规则是除了下面六个值被转为false,其他值都视为true
    • undefined
    • null
    • 0
    • NaN
    • false
    • '' (空字符串)
      • 注意:''' ' 不是一个玩意

undefined 和 null

  • nullundefined都可以表示“没有”,含义非常相似。将一个变量赋值为undefinednull,老实说,语法效果几乎没区别。
  • 细微区别
    • 如果一个变量声明了,但没有赋值,那么默认值就是 undefined,而不是 null
    • 如果一个函数,没有写 return,那么默认 return undefined,而不是 null
    • 前端程序员习惯上,把非对象的空值写为 undefined,把对象的空值写为 null,但仅仅是习惯上而已

symbol (符号)

Symbol 生成一个全局唯一的值

后续理解后再做补充

学习文章参考:
1.知乎-方应杭- 「每日一题」JS 中的 Symbol 是什么?
2.MDN: [Symbol - JavaScript]
3.阮一峰:[ECMAScript 6入门]

变量声明

三种声明方式

  • var a = 1
  • let a = 1
  • const a = 1

var 是过时的、不好用的方式 ;let 是新的,更合理的方式;const 是声明时必须赋值,且不能再改的方式

let 声明规则

  • 遵循块作用域,即使用范围不能超出 { }
  • 不能重复申明
  • 可以赋值,也可以不赋值
  • 必须先声明再使用,否则报错
  • 全局声明的 let 变量,不会变成 window 的属性
  • for 循环配合 let 有奇效

const 声明规则

跟 let 几乎一样,只有一条不一样:声明时就要赋值,赋值后不能改

注意

  • name'name' 的区别
    • name 是变量;值可变,可能是 'name',也可能是 'hello'
    • 'name' 是字符串常量;常量就是不变量。'name' 只能是 'name',不能是其他值

类型转换

  • number => string
    • String(n)
    • n + ''

1665834514455.png

  • string => number
    • Number(s)
    • parseInt(s)
      • 新的ES6不用声明是否是十进制 1665835349468.png
    • parseFloat(s)
    • s - 0
    • + s (正号会尝试把他后面的内容变成number)
  • x => bool
    • Boolean(x)
    • !!x
      • !!1 是 true ; !!0 是 false
  • x => string
    • String(x)
    • x.toString()
      • 若x写成数字 1 会有BUG,因为JS会以为在写小数,需改成 (1).toString() 或者 1..toString()

资料来源:饥人谷-前端体系课(方应杭)