JS数据类型
JS七种数据类型
数字 number
字符串 string
布尔 bool
符号 symbol
空 undefined
空 null
对象 object
四基两空一对象
一下不属于数据类型
数组,函数,日期
它们属于object
number(数字)
64位浮点数
写法
整数写法:1
小数写法:0.1
科学计数法:1.23e4
八进制写法:0123或 00123
十六机制写法: 0x3f
二进制写法: 0b11 或 0B11
特殊值
正0 和 负0:都等于0,要严谨
无穷大:lnfinity,+lnfinity,-lnfinity
NaN;无法标书的数字
64位浮点数
范围和精度
范围(忽略符号位)
指数拉满、有效数字拉满,得到最大二进制数字
Number.MAX_VALUE: 1.7976931348623157e+308
指数负方向拉满、有效数字最小1,得到最小值
Number.MIN_VALUE: 5e-324
精度(有效数字)
最多只能到52+1个二进制位表示有效数字
2^53 对应的十进制是 9 后面 15 个零
所以15位有效数字都能精确表示
16位有效数字如果小于 90 开头,也能精确表示
9110000000000001 就存不下来
string(字符串)
注意:每个字符串两个字节
写法:
单引号
'你好'
双引号
"你好"
反引号
`你好`
注意
引号不属于字符串的一部分,就像书名号不属于书名的一部分一样
如果要在单引号里面包含单引号怎么办?
转义
错误写法
'it's ok'
JS 引擎会认为 'it' 就结束了,后面的看不懂
正确写法
'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] // 'o'
base64转码
window.btoa
正常字符串转为 Base64 编码的字符串
window.atob
Base64 编码的字符串转为原来的字符串
一般用来隐藏招聘启事里的简历
邮箱:ZmFuZ3lpbmdoYW5nQGZveG1haWwuY29t
有时候也用来自欺欺人
所谓的「加密」,也就能骗过一部分外行
bool(布尔)
bool只有两个值 true和false
下列运算得到布尔值
否定运算
!value
相等运算
1 == 2、1 != 2、3 === 4、3 !== 4
比较运算
1 > 2、1 >= 2、3 < 4、3 <= 4
五个falsy的值
falsy就相当于false ,但又不是false
分贝是:undefined,null,0,NaN , " "
注意:'' 和 ' ' 不是一个玩意
undefined 和 null •两种空类型
区别
没有本质区别
细节一
如果一个变量声明了,但没有赋值,那么默认值就是 undefined,而不是 null
细节二
如果一个函数,没有写 return,那么默认 return undefined,而不是 null
细节三
前端程序员习惯上,把非对象的空值写为 undefined,把对象的空值写为 null
但仅仅是习惯上而已
symbol(字符)
不常用,查看文章
变量的声明
三种声明方式
var a = 1
let a = 1
const a = 1
a = 1
区别
var 是过时的、不好用的方式
let 是新的,更合理的方式
const 是声明时必须赋值,且不能再改的方式
最后这种方式是错误的,不准这样声
var 变量提升:看文章网道教程
let声明规则
规则
遵循块作用域,即使用范围不能超出 { }
不能重复申明
可以赋值,也可以不赋值
必须先声明再使用,否则报错
全局声明的 let 变量,不会变成 window 的属性
for 循环配合 let 有奇效
const声明
规则
跟 let 几乎一样
只有一条不一样:声明时就要赋值,赋值后不能改
变量声明
指定值
var a = 1
同时也指定了类型
var a = 1
但是值和类型都可以随意变化
a = 2
a = '字符串'
name 和 'name' 的区别
name 是变量
值可变,可能是 'name',也可能是 'hello'
'name' 是字符串常量
常量就是不变量
'name' 只能是 'name',不能是其他值
总结
六种类型(大小写无所谓) undefined null number string bool symbol 这些都是简单类型 只有 object 叫做复杂类型,下节课学
类型转换
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()
\