空投来啦!!!
随手笔记总结,随时补充;如有误之处,请留言指出,在此先感谢各路大佬🙏
数据类型
JavaScript
语言中类型集合由原始值和对象组成。
原始值(直接表示在语言底层的不可变数据)
- 布尔类型 :布尔值是一种取值仅能为 真 或 假 的数据类型,它赋予了编程语言在逻辑上表达真 或 假 的能力;
Boolean:布尔值是一种取值只有 真 或 假 的数据类型,它可以在代码逻辑上表达真 或 假 的能力
-
如果值为以下情况之一则为
false
:-
0
-
-0
-
null
-
false
-NaN
-
undefined
-
空字符串「
""
」 -
否则为
true
-
其值不是
undefined
或null
的任何对象「所有的对象类型」(包括其值为false
的布尔对象)在传递给条件语句时都将计算为trueconst f = new Boolean(false); if(f){// 执行} const f = Boolean(false); if(f){// 执行}
-
转换布尔值的方法
Boolean(123)
「直接将Boolean
当作转换函数使用」!!(123)
「双重非运算符」new Boolean(123)
「不推荐,不要用创建对象的方式进行类型转换;对于任何对象来说,即使值为false
的Boolean
对象,使用此方法转换结果都是true
」
-
注意:不要在应该使用基本类型布尔值的地方使用
Boolean
对象 -
实例方法
-
Boolean.prototype.toString()
- 以字符串形式返回该布尔对象的值
- 不会继承
Object.prototype.toString()
-
Boolean.prototype.valueOf()
-
返回一个
Boolean
对象的原始值「基本类型值」const x = new Boolean(null); console.log( x.valueOf() ) // false // 首先会进行隐式转换,其次在进行比较 Boolean(null) ==> false
-
-
-
数字类型 :是一种基于
IEEE 754
标准的双精度64 位二进制
格式的值;-
整数
-
+0 / -0
console.log(+0 === -0) ==> true console.log(1 / +0) ==> Infinity console.log(1 / -0) ==> -Infinity
-
负数
-
小数
-
+/-Infinity
- 检查数值是否大于或者小于
+/-Infinity
:Number.MAX_VALUE
/Number.MIN_VALUE
- 最大安全数和最小安全数
:Number.MAX_SAFE_INTEGER
/Number.MIN_SAFE_INTEGER
- 检查是否在安全数之内:
Number.isSafeInteger()
-NaN
(非数值,Not-a-Number
)
- 检查数值是否大于或者小于
-
用途:一般用于浏览器的隐式转换中
- 数学运算
isNaN
检测==
比较- …
-
-
字符串类型 :;
""
/''
/String()
- 字符串一旦被创建,就不能被修改
-
Undefined
类型 :一个没有被赋值的变量会有个默认值undefined
-
标识符:用来标识变量/函数/属性的字符序列
-
全局对象的一个属性
undefined
「全局作用域的一个变量」 -
函数没有
return
返回值,就会返回一个undefined
值 -
用途
-
判断变量是否有值
- 判断变量是否与
undefined
严格相等,若相等则变量有值
- 判断变量是否与
-
判断变量是否被声明
-
一般会使用
typeof
来判断变量是否存在,其优点:typeof
不会在变量没有被声明时抛出错误,所以不会阻塞代码执行- 注意:必须使用严格相等操作符,否则会出现值为
null
的情况
-
通过判断变量是否在当前上下文中被声明;如果是全局上下文,可以通过全局对象来检查是否存在当前属性
-
in
操作符:指定的属性在指定的对象或其原型链中,则in
运算符返回true
。 -
void
运算符:对给定的表达式进行求值,然后返回undefined
。- 一般只用于获取
undefined
的原始值,一般使用void(0)
- 当函数返回值是一个不会被使用到的时候,应该使用
void
运算符,来确保返回undefined
- 一般只用于获取
-
-
-
==
和===
的区别:==
:判断值相等则返回true
,不会判断类型是否相等===
:判断类型和值都相等则返回true
-
-
Null
类型 :特指对象的值未设置-
是一个字面量
-
变量未指向任何对象 「表示一个空指针」
-
返回类型是一个对象,但是没有关联任何的值
-
null
与undefined
的区别:“==”
相等「内部会进行隐式转换」==>true
“===”
全等 「内部不会进行隐式转换」==>false
-
-
Symbol
类型:是唯一且不可修改的原始值-
创建
symbol
数据类型:let sym = Symbol();
-
该类型的性质在于这个类型的值可以用来创建
匿名的对象属性
-
该属性是匿名的,并且是不可枚举的,所以:
- 不是
for..in
循环中的成员 - 不是
Object.getOwnPropertyNames()
中返回的成员
- 不是
-
可以通过
Object.getOwnPropertySymbols()
属性访问
-
-
能对该类型实例使用其他操作符
-
不能被当作构造函数使用,作为构造函数调用时会抛出一个错误:
Symbol is not a constructor「new Symbol()
」 -
应用场景:
-
给对象设置“唯一值”的属性名
- 字符串「属性的类型为字符串」
Symbol
类型「属性的类型也可为Symbol
类型」:用变量存储symbol
的值,然后使用存储的值创建对象属性Map
新的数据结构:可以允许属性名是对象「Map
属性名是字符串/对象」Symbol.asyncIterator/iterator「for...of..」/hasInstance「instanceOf」/toPrimitive/toStringTag...
是某些JS
知识底层实现的机制
-
在派发行为标识统一进行管理的时候,可以基于
symbol
类型的值,保证行为标识的唯一性 -
…
-
-
-
BigInt
类型:表示任意精度的整数;-
BigInt([value])
/[value]n
-
通过在整数末尾附加字母
n
或调用构造函数来创建的 -
可以安全地存储和操作大整数,甚至可以超过数字类型的安全整数限制「四则运算都支持」
-
不能与数字相互运算;需要把数字转换为
BigInt
类型,在进行运算 -
最大安全数:
Number.MAX_SAFE_INTEGER
「9007199254740991
」 -
最小安全数:
Number.MIN_SAFE_INTEGER
「-9007199254740991
」 -
超过安全数后,进行运算或者访问,结果会不准确!!!解决方案:
- 服务器返回给客户端的大数,按照“字符串”格式返回!
- 客户端把其变为
BigInt
,然后按照BigInt
进行运算 - 最后把运算后的
BigInt
转换为字符串,在传递给服务器即可
-
对象类型(一组属性的集合)「引用数据类型」
对象(
object
) 是指内存中的可以被标识符引用的一块区域
-
标准普通对象
-
标准特殊对象
-
非标准特殊对象
-
可调用/执行对象「函数」
- 普通函数
- 构造函数
- 箭头函数
- 生成器函数