一共有七种:数字number、字符串string、布尔bool、符号symbol、空undifined、空null、对象object,先介绍前几种简单类型,object是复杂类型
一、数字number
数字由64位浮点数组成数字有整数(1)、小数(0.1)、科学计数法(1.23e4)、八进制(0123或00123或0o123)、十六进制(0X3F或0x3F)、二进制(0B11或0b11)
1、浮点数
浮动的点,小数点会乱动。
eg. 123.456 = 1.23456e10^(2) = 12345.6e10^(-2)
2、数字特殊值
- 正0和负0都等于0
- 无穷大有三种:Infinity、+Infinity、-Infinity
- 无法表示的数字:NaN(Not a Number);eg. 0除以0就是NaN
3、JS如何存数字
JS把数字转为二进制以后才能存储,十六进制共有(0-9A-F)十六个数字和字母
-
规则示意图:注有效数字最开头的1省略
-
存储规则注意:
- 64位存储一个数字
- 指数部分占11位(范围:-1023-1024)
- 正负符号占一位
- 有效数字占52位:开头的1省略
-
64位浮点数的范围:指数拉满,有效数字拉满可得到最大二进制数字:Number.MAX_VALUE;最小:Number.MIN_VALUE
-
64位浮点数的精度(有效数字):
- 最多只能到52+1个二进制位表示有效数字
- 2^53对应的十进制是9后面有15个0
- 15位的有效数字可以被精确表示 ④ 16位精确数字如果小于90开头,可以被精确表示
- 例如9110000000000001(12个0)就不能准确存储
-
十进制、二进制、八进制、十六进制之间的相互转化
- 十进制转二进制;
eg.把32转为二进制:32=12^5 + 02^4 + 02^3 + 02^2 + 02^1 + 02^0 ===>100000
- 十六进制转为二进制同理除以二取余
- 二进制转为十六进制
- 十进制转二进制;
eg.把32转为二进制:32=12^5 + 02^4 + 02^3 + 02^2 + 02^1 + 02^0 ===>100000
二、字符串string
在JS中,字符串用的是阉割版的UTF-8,每个字符两个字节
1、写法
- '单引号'
- “双引号”
- ``反引号
- 注意:引号不属于字符串的一部分,类似于书名号不是书名的一部分一样
2、如何在引号中加引号
- 错误写法:it's ok ————>'it's ok'
- 正确写法:不确定的时候用就反引号
'it\'s ok'//转义"it's ok"it's ok//(用反引号包住内容)
- 转义:用另一种写法表示想要的内容
\'————>'\"————>"\n————>换行\r————>回车\t————>tab制表符\\————>\\uFFFF————>对应的Unicode字符\xFF————>前256个Unicode字符
- 多行字符串的表示:在字符串里用回车
3、字符串属性
- 字符串长度
'123'.length// 长度为3'\n\r\t'.length// 长度为3''.length// 长度为0,''是空字符串'_'.length//长度为1,'_'里面是下划线
- 通过下标读字符串
string[index]举例:let s= 'hello'; s[4]//"o"- 注意:index是从0开始的
s[0]是第一个字符 - 注意index的长度:举例:
let s = 'hello'; s[5]//undifined不会报错
4、JS如何存字符串
用0-127表示所有的符号:重点记忆:0用48号,A用65号,a用97号
5、base64编码
- 一般用来隐藏招聘启事里的简历
- window.btoa:正常字符串转为base64编码字符串
- window.atob:base64编码转为原来的字符串
举例:
window.btoa('124')//'MTI0'
window.atob('MTI0')//'124'
三、注意数字和字符串的区别
1和'1'
- 功能不同:数字可以进行加减乘除运算,字符串不可以
- 存储形式不同,在JS中数字是用64位浮点数的形式存储,字符串是用类似于UTF—8的形式存储
四、布尔bool
真或假(true或false)
1、下面几种运算可以得到bool值
- 否定运算:
!value - 相等运算:
1==2//false 、1!=2//true 、3===4//false、3!===4//ture - 比较运算:
1>2//faslse 、1>=2// false 、1<2//true 、1<=2//true
2、布尔有五个falsy值:undifined、null、0、NaN、''
''是空字符串
3、 提问
1是真么?// 是0是真假 ? //假'0'和'1'是真假? //真(都是字符串,字符串'0'不是0)
五、null和undifined的区别:
- 如果一个变量声明了但未赋值,默认为
undifined - 如果一个函数没有写return,那默认的return为
undifined - 一般习惯把非对象的空值写
undifined,对象的空值写null
六、符号symbol
一般不用:参考MDN
七、变量声明
var a = 1let a = 1- 遵循块作用域,即使用范围不能超过
{};
举例:{let a =1 ;console.log(a)} console.log(a) - 不能重复声明
- 可赋值也可不赋值
- 必须先声明再使用,否则报错
- 全局声明的
let变量不会变成window的属性
- 遵循块作用域,即使用范围不能超过
const a = 1- 声明时必须已经赋值,且不能再更改的
八、类型转换
1、number ————>string
- ''+n
- String(n)
- n+''
2、string————>number
- Number(n)
- s-0
- +s
- ParseInt('123')/Parse False('n')
3、x————>bool
- Boolean(x)
- !!x
4、x————>string
- String(x)
- x.toString()
5、注意
1.toString会报错,正确写法:1..toString或(1).toString,具体可以搜索JavaScript 秘密花园 (shamansir.github.io)