数字与字符串
- 都是一,为什么要分 1和'1'
- 功能不同- 数字是数字,字符串是字符串,要严谨
- 数字能加减乘除,字符串不行
- 字符串能表示电话号码,数字不行
 
- 存储形式不同- JS 中,数字是用 64 位浮点数的形式存储的
- JS 中,字符串是用类似 UTF8 形式存储的(UCS-2)
 
二进制
- 10 转 2 - 31 变成二进制 
- 经过一番尝试 
- 所以 31(十进制) = 01111(二进制)
- 不是套公式吗?程序员从来不套公式
 
- 31 变成二进制
- 2 转 10 - 100011 变成十进制
- 每一位乘以 2 的 N 次方,然后加起来即可
- 100011 = 2^5 + 2^1 + 2^0 = 35
 

如何存字符
- 转成数字不就得了
- 但是注意,1不能用1表示



Unicode 万国码



存字符就是编号
数字 1 和 字符 ‘1’
- 功能不同 存储形式不同
JS 中的数据类型
7 种(大小写无所谓)
- 数字 number
- 字符串 string
- 布尔 bool
- 符号 symbol
- 空 undefined
- 空 null
- 对象 object
- 总结:四基两空一对象
以下不是数据类型
- 数组、函数、日期
- 它们都属于 object
数字
- 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
- 但它是一个数字
- NaN表示一个不知道是什么的数字,是不确定的
 
 


64位浮点数
- JS 数字的存储形式- 浮点就是浮动的电,意思就是小数点会乱动
- 123.456 可以表示为 1.23456e10^2
- 也可以表示为 12345.6e10^-2 
 
- 64位存储一个 number- 符号占 1位
- 指数占 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 开头,也能精确表示
- 9110000000000001就存不下来
 
- 最多只能到
字符串 string
每两个字符两个字节(阉割版UTF-8)
写法
- 单引号- ‘你好’
 
- 双引号- “你好”
 
- 反引号- 你好
 
- 注意- 引号不属于字符串的一部分,就像书名号不属于书名的一部分一样
- 如果要在单引号里面包含单引号怎么办
 
转义
错误写法
- ‘it’s ok’
- JS 引擎会认为 ‘it’ 就结束了,后面的看不懂
正确写法
- ‘it's ok’ // 这就是转义
- “it’s ok”
- it's ok
用另一种写法表示你想要的东西
- \'表示- '
- \"表示- "
- \n表示- 换行
- \r表示- 回车
- \t表示- tab 制表符
- \\表示- \
- \uFFFF表示- 对应的 Unicode 字符
- \xFF表示- 前 256 个 Unicode 字符
多行字符串
如果你想要在字符串里回车
以前没有反引号的时候
字符串的属性
- 对象才有属性,但是字符串也有
字符串的长度
通过下标读取字符
- string[index]
- 注意 index 从 0 开始
- 注意 index 到 length
base64 转码
- window.btoa- 正常字符串转为 Base64 编码的字符串
 
- window.atob- Base64 编码的字符串转为原来的字符串
 
- 一般用来隐藏招聘启事里的简历- 邮箱: YWRtaW5AaWNvZGVxLmNvbQ
 
- 邮箱: 
- 有时候也用来自欺欺人- 所谓的 【加密】,也就能骗过一部分外行
 
布尔 Boolean
- 真或假
否定运算
- !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 值,那么就是 五个 falsy 值
五个 falsy 值
- falsy就是相当于- false但是又- 不是- false的值
- 分别是 undefined、null、0、NaN、''- ''和- ' '不是一个玩意
 
undefined 和 null 两种空类型
- 为什么有两个空?
区别
- 没有本质区别
- 细节一- 如果一个变量声明了,但没有赋值,那么默认值就是 undefined,而不是null
 
- 如果一个变量声明了,但没有赋值,那么默认值就是 
- 细节二- 如果一个函数,没有写 return,那么默认return undefined,而不是null
 
- 如果一个函数,没有写 
- 细节三- 前端程序员习惯上,把非对象的空值写为 undefined,把对象的空值写为null
- 但仅仅是习惯上而已
 
- 前端程序员习惯上,把非对象的空值写为 
symbol 符号
- 不怎么常用 见此文章:https://zhuanlan.zhihu.com/p/22652486
变量声明
三种声明方式
- var a = 1- 代码不准用 var
 
- 代码不准用 
- let a = 1
- const a = 1
- a = 1// 错的- 如果没有在任何地方声明过 a 那就直接被放在 window上了
- 过时的,从来不会用
 
- 如果没有在任何地方声明过 a 那就直接被放在 
区别
- var是过时的、不好用的方式
- let是新的,更合理的方式
- const是声明时必须赋值,且不能再改的方式
- 最后这种方式是错误的,不准这样声明
var 变量提升
- 押题时再讲
- 可以看这个 变量提升
var 声明
- 直接跳过- 我们写代码不用 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 => number
- x => bool
- x => string
js 秘密花园
https://www.javascriptc.com/books/javascript-garden/
新增 bigint 类型
资料来源:饥人谷。任何组织或个人未经许可,禁止转载
 评论







