根据(juejin.cn/post/701764…) 学习,并记录本笔记
js核心知识点
数据类型
原始类型(基本数据类型)
Boolean、null、undefined、Number、String、Symbol(ES6)、BigInt(ES6)
原始数据存储的都是值,是没有函数可以调用的
undefined.toString() 会报错
BigInt
解决使用Number类型的限制:Number只能显示-(2^53-1)和9007199254740991(2^53-1)的数,大于(2^53-1)的都会失去精度
js提供Number.MIN_SAFE_INTEGER和Number.MAX_SAFE_INTEGER来表达最小安全整数和最大安全整数
创建BigInt,只需要在数值末尾加个n即可
> 9007199254740993n => 9007199254740993
> 9007199254740994 => 9007199254740994
BigInt也可以使用2,8,16进制的数表示
> 0b100000000000000000000000000000000000000000000000000011n => 9007199254740995n
不能使用“===”将BigInt和常规数字相比较,因为类型不同
BigInt也可使用算术运算符
除了一元加号(+)
+10n => //报错
20n+10n => 30n
25n/10n => 2n 自动向下舍入到最接近的整数
隐式类型转换
三大引用类型
Object
创建Object实例
- new Object()
- {}
Array
创建Array对象
- new Array()
- []
Function
每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法
类型判断
typeof
typeof不能识别null,不能识别引用类型
会将null,Array,Object均识别为“Object”
但能识别function
instanceof
不能识别基本数据类型,但是可以检测出 引用数据类型 一般用来检测对象类型,以及继承关系
instanceof 检测的是原型
instanceof(A,B){
var L=A.__proto__
var R=B.prototype
if(L==R){
return true
}
return false
}
当 A 的 __proto__ 指向 B 的 prototype 时,就认为 A 就是 B 的实例
__proto__和prototype和constructor的理解
拓展:
- __proto__是对象所独有的,prototype是函数所独有的;
- 函数实际上也是一个对象,所以函数既有prototype也有__proto__
- proto:指向自己的原型对象,是构成原型链的关键
- prototype:存放共享属性和共享方法,本质是为了节约资源
constructor
指向构造函数 null、undefined无constructor方法,因此constructor不能判断null和undefined
Object.prototype.toString.call
是一种相对全面的js判断类型方法
类型转换
字符串转换
将一个值变成字符串类型
String()
数字型转换
将值变成数字
Number()
| 值 | |
|---|---|
| undefined | NaN |
| null | 0 |
布尔型转换
直观上为空的转换为false
其余为true
Boolean(0) => false
Boolean("0") => true
Boolean("") => false
Boolean(" ") => true