JS有八大数据类型分别是
和 唯一一种复杂类型:
- Object 对象先了解
数组、函数、日期,它们都属于 Object 。八大数据类型,5个falsy值要记得是什么。
--资料来源于饥人谷,MDN
一些要说的话
本文简单记录了JavaScript的基础数据类型,如果你是老手希望可以查漏补缺,如果是和我一样的小白,那我的一系列笔记都会对你很有帮助的。如果你想快速了解JavaScript,建议直接看文档JavaScript MDN。要方便快捷试手代码可以用浏览器console控制台或者jsbin。祝您早日达成所愿。
1. Boolean 布尔值
bool(很简单没必要详细讲)
- bool由来
bool是人们为了纪念数理逻辑学先驱乔治 · 布尔而把最基本的两个值(true和false)命名为bool。
让“布尔(Bool)”这个名字如此广为人知的不是布尔代数,而是布尔变量。20实际50年代之后,基本上每一种编程语言都有布尔类型,使得“boolean”一词广为流传。人很好却死由妻子的瞎治病。
- bool只有两个值
真是true和假是false(注意大小写)
- 下列运算符会得到 bool 值
①否定运算
!value
在一个值前加上!,表示取反
②相等运算
1 == 2、1 != 2、3 === 4、3 !== 4
1 == 2得到false、1 != 2得到true、3 === 4得到false、3 !== 4得到true
③比较运算
1 > 2、1 >= 2、3 < 4、3 <= 4
1 > 2 false、1 >= 2 false、3 < 4 true、3 <= 4 true
Boolean 布尔值
- if 配 bool
if 语句常常需要判断真假
if( value ) { ... } else { ... }
问题来了
如果 value 是 bool 值还好说
如果 value 不是 bool 值咋办,谁真谁假
1 是真还是假,0 是真还是假
'1' 是真还是假,'0' 是真还是假
- 五个falsy值* 🧠要记得
falsy就是相当于false但又不是false的值
有五个false值需要记,这5个falsy值是假的
分别是 undefined null 0 NaN ''(空字符串,注意''和' ')
2. Number 数字类型
在JavaScript里定义为64位双精度浮点型的数字数据类型。
在其他编程语言中,有不同的数字类型存在,比如:整型(Integers),单精度浮点型(Floats),双精度浮点型(Doubles),大数(Bignums)。
他有很多种写法
- 整数写法* 1
- 小数写法* 0.1
- 科学计数法* 1.23e4,表示1.23乘以10的4次方
- 八进制写法(用得少) 0123 或 00123 或 0o123。0/00/0o开头的
- 十六进制写法 0x3F 或 0X3F。0x/0X开头的
- 二进制写法 0b11 或 0B11。0b/0B开头的
特殊值有
- 正0 和 负0 都等于 0,要严谨
1除以0->infinity 1/+0->infinity 1/-0->-infinity
- 无穷大
Infinity无穷大 、+Infinity 、-Infinity负无穷大
- 无法表示的数字
NaN (Not a Number)
0/0->NaN(没有办法表示0是0的几倍,是数学上不确定的,用NaN)
虽然是无法表示的数字但它也是一个数字(古人用绳子计数时,对负数无法计数还没发明出来,如1-5=NaN。这时负数就对那时人们来说就是NaN。但后来发明出来了,就可以1-5=-4。)
NaN==NaN->得到false。一个不确定的数和另一个不确定的数,不相等。
64位浮点数
- JS数字的存储形式
浮点就是浮动的点,意思就是小数点会乱动
123.456 可以表示为 1.23456e10^2
,也可以表示为 12345.6e10^-2
- 64位存储一个 number
符号占 1 位 指数占 11 位(-1023~1024) 有效数字占 52 位(开头的 1 省略)
例:①0.5怎么存: 0.5转换成二进制:0.5->1*(1/2)-->0.1-->1.0*(2^-1),然后和图对号入座得 0 -1 0
例:①0.625怎么存: 0.625转换成二进制:(0.5+0.125)-->1/2 + 1/8--> 1*(2^-1) + 1*(2^-3)-->0.101-->1.01*2^-1,然后和图对号入座得 0 -1 01
JS的范围和精度
- 范围(忽略符号位)
指数拉满、有效数字拉满,得到最大二进制数字: Number.MAX_VALUE: 1.7976931348623157e+308
指数负方向拉满、有效数字最小1,得到最小值: Number.MIN_VALUE: 5e-324
- 精度(有效数字)
最多只能到52+1个二进制位表示有效数字。
2^53 对应的十进制是 9 后面 15 个零,所以15位有效数字都能精确表示,16位有效数字如果小于 90 开头,也能精确表示,9110000000000001 就存不下来
3. String 字符串
每个字符两个字节(阉割版 UTF8)
写法
单引号
'你好'
双引号
"你好"
反引号
`你好`
- 注意
引号不属于字符串的一部分,就像书名号不属于书名的一部分一样,如果要在单引号里面包含单引号怎么办?就需要用到转义字符了。
转义
- 错误写法
'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 = ` 这样是
可以的
用反引号很容易做到`
以前没有反引号的时候,可以看网道教程
字符串的属性
只有对象才有属性,字符串只是特殊的。
搜的解释,了解对象的可以看看。
通过字面量的方式创建:var a = 'string';,这时它就是基本类型值;通过构造函数的方式创建:var a = new String('string');这时它是对象类型。基本类型是没有属性和方法的,但仍然可以使用对象才有的属性方法。这时因为在对基本类型使用属性方法的时候,后台会隐式的创建这个基本类型的对象,之后再销毁这个对象.
- 字符串的长度
空字符串 ''.length => 0
空格字符串 ' '.length => 1
'\\\'.length =>3
- 字符串的下标
通过下标读取字符
string[index]
let s = 'hello';
s[0] // "h"
注意 index 从 0 开始
s[0] 是第一个字符
注意 index 到 length
let s = 'hello';
s[4] 结果为 'o'
s[5] 结果为 undefined,居然不报错
base64 转码
- window.btoa('要转码的内容')
正常字符串转为 Base64 编码的字符串,它也有自己的转码规则的。
- window.atob('base64内容')
Base64 编码的字符串转为原来的字符串
一般用来隐藏招聘启事里的简历
比如邮箱:MTA2OTY0NjQzNUBxcS5jb20=你可以尝试解码一下就可以得到我的邮箱哦
- 有时候也用来自欺欺人
所谓的「加密」,也就能骗过一部分外行
我这有个密码,看到就是赚了,但需要你动手解码eW91IGxvb2sgc28gY29vbA==
4/5. Null 和 Undefined 两种空类型
空空如也。 为什么有两个空? 这是 JS 的原(la)创(ji)之处
区别
没有本质区别
- 细节一
如果一个变量声明了,但没有赋值,那么默认值就是 undefined,而不是 null
- 细节二
如果一个函数,没有写 return,那么默认 return undefined,而不是 null
- 细节三
前端程序员习惯上,把非对象的空值写为 undefined,把对象的空值写为 null,但仅仅是习惯上而已
6. BigInt 数字类型
BigInt 是一种内置对象,它提供了一种方法来表示大于 253 - 1 的整数。这原本是 Javascript中可以用 Number 表示的最大数字。BigInt 可以表示任意大的整数。
太新了,可以看看<a href"developer.mozilla.org/zh-CN/docs/… MDN文档
7. Symbol 符号
不怎么常用的数据类型,直接看Symbol MDN吧
8. Object 对象
先简单了解下,后面会单独更新
- 定义
无序的数据集合
键值对的集合
- 写法
①let obj = { 'name': 'frank', 'age': 18 }
简单写法。'name','age'是键名(也是属性名,每个key都是对象的属性名property,键名只能是字符串)。'frank','18'是键值(也是属性值,每一个value都是对象的属性值)。obj等于一个对象({键值对})
②let obj = new Object({'name': 'frank'})
正规写法。和第一种写法一样。让你知道这个对象是由Object构造出来的。obj=nwe Objective接个对象
③console.log({ 'name': 'frank, 'age': 18 })
匿名对象。直接console.log一个没有名字的对象。
- 细节
键名是字符串(只要是字符串都可以),不是标识符(不能以数字开头),可以包含任意字符(Unicode包含的都可以)
引号可省略,省略之后就只能写标识符
可以通过Object.keys(obj)查看obj的键名,你会发现 就算引号省略了,键名也还是字符串(重要)
奇怪的属性名
所有属性名会自动变成字符串
let obj = {
1: 'a',
3.2: 'b',
1e2: true,
1e-2: true,
.234: true,
0xFF: true
};
输入Object.keys(obj)
=> ["1", "100", "255", "3.2", "0.01", "0.234"]
//1e2(JS先把1e2变成了100在加上了引号'100')
//1e-2=>0.01
//.234=>0.234
//0xff=>255
//加引号才不会变
- 细节
Object.keys(obj) 可以得到 obj 的所有 key,学会这个API
更奇怪的,变量作属性名
- 如何用变量做属性名
之前都是用常量做属性名
let p1 = 'name'
let obj = { p1 : 'frank'} 这样写,属性名为 'p1'。(没写''也不是变量)
let obj = { [p1] : 'frank' } 这样写,属性名为 'name'(p1就是变量)。ES 6新语法
- 对比
不加 [ ] 的属性名会自动变成字符串
加了 [ ] 则会当做变量求值(先求值,然后在变字符串)
值如果不是字符串,则会自动变成字符串
以前是
var p1 = 'xxx'
var obj={}
obj[p1] = 1234
console.log(obj)
//结果:{xxx: 1234}
现在是
var p1 = 'xxx'
var obj = {
[p1] :1234
}
console.log(obj)
//结果:{xxx: 1234}
//注意是冒号
对象的隐藏属性
先简单了解
- 隐藏属性
JS 中每一个对象都有一个隐藏属性
这个隐藏属性储存着其共有属性组成的对象的地址
这个共有属性组成的对象叫做原型(后面会更新详解原型)
也就是说,隐藏属性储存着原型的地址
知道有这么个东西
除了字符串,symbol 也能做属性名
let a = Symbol()
let obj = { [a]: 'Hello' }
//let a等于一个Symbol,a就是一个变量,变量名是Symbol。obj这个key(a的Symbol)对应的值为'Hello'
在学习「迭代」时会用到
好了,7大基本数据类型,和5个falsy值都记得了么.
不记得的可以点回到顶部再看一次哦
--continue
解码有彩蛋哦。
后面会更新本章一些详解知识。
今年一定旺,🛐。