JS数据类型

98 阅读3分钟

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位浮点数

1641438569864(1).png

范围和精度

 范围(忽略符号位)
 指数拉满、有效数字拉满,得到最大二进制数字
 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
 分贝是:undefinednull0NaN , " "
 注意:''' ' 不是一个玩意
 undefinednull •两种空类型

区别

 没有本质区别
 细节一
 如果一个变量声明了,但没有赋值,那么默认值就是 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()

\