JS 数据类型

214 阅读4分钟

数据类型

  • 数字 number:64位浮点数
  • 字符串 String
  • 布尔 bool Boolean
  • 符号 symbol
  • 空 undefined
  • 空 null
  • 内置对象 bigint:BigInt - JavaScript | MDN
  • 对象 object

总结:四基两空一对象,前6种是简单类型,obj是唯一一个复杂类型 以下不是数据类型
数组、函数、日期,他们是属于 object

数字

1.写法

  • 整数写法:1
  • 小数写法:0.1
  • 科学计数法:1.23e4
  • 八进制写法(用的少):0123 或 00123 或0o123
  • 十六进制写法:0x3F 或 0X3F
  • 二进制写法:0b11 或 OB11 2.特殊值
  • 正0 和 负0 是不同的,都等于0,要严谨
  • 无穷大:lnfinity、+lnfinity、-lnfinity
  • 无法表示的数字:NaN(Not a Number),但它是一个数字 3.64位浮点数
    浮点就是浮动的点,意思就是小数点会乱动
    123.456可以表示为1.23456e10^2
    也可以表示为12345.6e10^2

浮点数的理解.png 4.64位存储一个number
符号占1位
指数占11位(-1023~1024)
有效数字占52位(开头的1省略) 5.范围(忽略符号位)

  • 指数拉满、有效数字拉满,得到最大二进制数字
  • Number.MAX_VALUE:1.7976931347623157e+308
  • 指数负方向拉满、有效数字最小1,得到最小值
  • Number.MIN_VALUE:5e-324 6.精度(有效数字)
  • 最多只能到52+1个二进制位表示有效数字
  • 2^53对应的十进制是9后面15个零
  • 所有15位有效数字都能精确表示
  • 16位有效数字如果小于90开头,也能精确表示
  • 9110000000000001就存不下来

字符串

1.写法

  • 单引号:‘你好’
  • 双引号:“你好”
  • 反引号:你好 注意: 引号不属于字符串的一部分,就像书名号不属于书名的一部分一样

2.转义

  1. \ '表示'
  2. \ "表示"
  3. \n 表示换行
  4. \r 表示回车
  5. \t 表示tab制表符
  6. \ 表示\
  7. \uFFFF 表示对应的unicode 字符
  8. \xFF 表示前256个Unicode字符

3.字符串的属性
只有对象才有属性,字符串、数字、布尔是没有属性这么一说的

  • 字符串长度:string.length
  • 下表读取字符:string[index] : let s = 'hello'; s[0

4.base64转码

  • window.btoa:正常字符串转为Base64编码的字符串
  • window.atob:Base64编码的字符串转为原来的字符串
  • 一般用来隐藏招聘启事的简历:邮箱,Zm~~
  • 有时候也用来自欺欺人:所谓的[加密],也就能骗过一部分外行

布尔值

否定运算、相等运算、比较运算

1. 规则
五个falsy值:falsy就是相当于false但又不是false的值分别是:undefined、null、0、NaN、'',间记就是两空两数一空字符串

undefined 和 null

其实他们都是空类型,为啥有两个空:因为是JS原创哦

区别

  • 没有本质区别
  • 细节一:如果一个变量声明了,但没有赋值,那么默认值就是undefined,而不是null
  • 细节二:如果一个函数,没有写return,那么默认return undefined,而不是null
  • 细节三:前端程序员习惯上,把非对象的空值写为undefined,把对象的空值写为null;但仅仅是习惯上而已

symbol

JS 中的 Symbol 是什么

var、let、const

变量声明可指定值,也同时可修改类型

三种变量声明方式
var a = 1
let a = 1:我们的说法是变量声明
const a = 1:我们的说法是常量声明
a = 1:有的时候是声明全局变量,有的时候是赋值

区别

  • var是过时的,不好用的方式,但提升过,var 变量提升
  • let是新的,更合理的方式,大佬对let的理解
  • const是声明时必须赋值,且不能再改的方式
  • 最后这种时错误,不能这样声明

let

规则:

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

const

规则:

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

转换类型

  1. number => string:String(n),n+''
  2. string => number:Number(s),parseInt(s) / parseFloat(s),s - 0
  3. x => bool:Boolean(x),!!x
  4. x => string:String(x),x.toString(),1.toString():不合法,(1).toString(),1..toString()