七种,不区分大小写。
- 数字
number
- 64位浮点数
- 写法:
- 整数写法:
1 - 小数写法:
0.1 - 科学计数法:
1.23e4 - 八进制写法(用得少):
0123或00123或0O123 - 十六进制写法:
0x3F或0X3F - 二进制写法:
0b11或0B11 - 特殊值:
正0和负0: 都等于0,要严谨- 无穷大:
Infinity,+Infinity,-Infinity - 无法表示的数字:
NaN(Not a Number)但它是一个数字 - NaN !== NaN
- JS数字的存储形式:
- 浮点数就是浮动的点,意思就是小数点会乱动
- 123.456 可以表示为 1.23456e10^2
- 也可以表示为 12345.6e10^-2

64位存储一个number- 符号占一位
- 指数占
11位(-1023~1024) - 有效数字占
52位(开头的1省略) - 范围(忽略符号位)
- 指数拉满、有效数字拉满,得到最大二进制数字
Number.MAX_VALUE:1.7976931348623157e+308- 指数负方向拉满、有效数字最小
1,得到最小值 Number.MIN_VALUE:5e-324- 精度:(有效数字)
- 最多只能到
52+1个二进制位表示有效数字 2^53对应的十进制是9后面15个零- 所以
15位有效数字都能精确表示 16位有效数字如果小于90开头,也能精确表示911 0000 0000 0000 1就存不下来
- 字符串
string
- 每个字符两个字节(阉割版UTF-8)
- 写法:
- 单引号:
'你好' - 双引号:
"你好" - 反引号:
`你好` - 注意:
- 引号不属于字符串的一部分,就像书名号不属于书名的一部分一样
- 如果在单引号里面包含单引号怎么办:
'it\'s ok'//这就是转义"it's ok"`it's ok`- 转义:用另一种写法表示你想要的东西
\'表示'\"表示"\n表示换行\r表示回车\t表示tab制表符\\表示\\uFFFF表示对应的Unicode字符\xFF表示前256个Unicode字符- 多行字符串
- 如果你想要在字符串里回车
let s = `这就是
可以的
用反引号很容易做到`
- 以前没有反引号的时候,写起来很麻烦。
- 字符串的属性:
- 字符串的长度:string length
'123'.length // 3
'\n\r\t'.length // ?
''.length // 0
' '.length // 1
- 通过下标读取字符
string[index]
let s = 'hello';
s[0] // "h"
- 注意index从0开始,s[0]是一个字符
- 注意index到length
let s = 'hello'
s[5] // undefined,居然不报错
s[4] // '0'
base 64转码 :window.btoa: 正常字符转为Base64编码的字符串window.atob:Base64编码的字符串转为原来的字符串- 一般用来隐蔽招聘启事里的简历邮箱
- 邮箱:
ZmFuZ3lpbmdoYW5nQGZveG1haWwuY29t - 有时候也用来自欺欺人,所谓的「加密」,也就能骗过一部分外行人
- 布尔
bool
- 某些运算可以得到布尔值
- 否定运算:
!value - 相等运算:
1 == 2,1 != 2,3 === 4,3 !== 4 - 比较运算:
1 > 2,1 >= 2,3 < 4,3 <= 4 - if 配 bool
- if语句常常需要判断真假:
if(value){..}else{..} - 问题来了:
- 如果value是bool值还好说,如果value不是bool值咋办,谁真谁假
- 1是真还是假,0 是真还是假
- '1'是真还是假,'0'是真还是假
五个falsy值:
falcy就是相当于false但又不是false的值
分别是 undefined null 0 NaN '' (空字符串)
- 符号
symbol - 空
undefined - 对象
object - 总结:四基两空一对象
- 以下不是数据类型:
- 数组、函数、日期
- 他们都属于
object
两个空:undefined和null的区别
- 没有本质区别
- 细节一:如果一个变量声明了,但没有赋值,那么默认值就是
undefined,而不是null - 细节二:如果一个函数,没有写
return,那么默认ruturn undefined,而不是null - 细节三:前端习惯上,把非对象的空值写为
undefined,把对象的空值写为null,但仅仅是习惯上而已
变量声明
- 三种变量声明方式
var a = 1
let a = 1
const a = 1
a = 1
- 区别:
var是过时的、不好用的方式;let是新的,更合理的方式;const是声明时必须赋值,且不能再改的方式;最后这种方式是错的,不准这样声明 var变量提升- 指定值:
var a = 1 - 同时也指定了类型:
var a = 1 - 但是值和类型都可以随意变化
a = 2a = '字符串'

let声明
- 规则:
- 遵循块作用域,即适使用范围不能超出{}

- 不能重复声明

- 可以赋值,也可以不赋值
- 必须先声明再使用,否则报错
- 全局声明的let变量,不会变成
window的属性 for循环配合let有奇效



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

name和'name'的区别是什么
- name是个变量,和'name'存储在内存的区域不同,name的类型不同,name可以是任何东西,甚至可以是个对象
- 'name'存储在内存的stack区域,是字符串常量,内容不可变

类型转换
- number => string
- string(n)
- n + ''
- string => number
- Number(s)
- parseInt(s) / parseFloat(s)
- s - 0
- x => bool
- Boolean(x)
- !!x
- x => string
- String(x)
- x.toString()
