前端知识体系
JS 基础
变量和数据类型
-
数据类型
-
基本数据类型
-
常见值类型
- Undefined、String、Number、Boolean、Symbol
- Undefined、String、Number、Boolean、Symbol
-
-
常见引用类型
- Null、Object、Array
- Null、Object、Array
typeof和深拷贝
-
typeof运算符
- 识别所有值类型
识别函数
判断是否是引用类型(不能再细分了) - 1.识别值
- 识别所有值类型
-
效果图
-
2.识别函数
-
效果图
-
3.判断是否是引用类型(不能再细分了)
-
-
效果图(只能判断为 object ,但无法识别到底是对象还是数组等)
-
深拷贝
-
值类型的赋值操作其实就是深拷贝:变量赋值时,拷贝的不是内存地址,而是将数据完整的在内存中复制了一份
-
- 图示
-
-
引用类型(null、对象、数组)的赋值操作都不是深拷贝:拷贝的是内存地址,最终两个变量指向的是同一个地址
-
举例(对象浅拷贝)
-
- 图示
-
-
对象深拷贝
-
数组深拷贝
-
-
变量计算-类型转换
-
字符串拼接
-
==(双等)
-
- 在比较当中,其实会发生类型转换,转换规则如下
if语句
-
两个概念
- truly 变量:经过 !! 运算后结果为 true 的变量
falsely 变量:经过 !! 运算后结果为 false 的变量
- truly 变量:经过 !! 运算后结果为 true 的变量
-
除下面为 falsely 变量外,其他都是 truly 变量
- if语句中,其实就是默认调用 !! 判断()中的变量是 truly 变量还是 falsely 变量
-
逻辑运算
-
逻辑与
- 与(&&):两个都为true才是true
-
逻辑或
- 或(||):一个是true都为true
-
!:逻辑非
-
&&和||都是短路运算符,意思就是如果第一个操作数决定了结果,那么永远不会对第二个操作数求值
-
逻辑运算符的操作数如果都是布尔值,则返回值是布尔值
-
如果不是布尔值,则返回值也不是布尔值,而是其中的一个操作数
-逻辑与(&&):如果操作数1是truely变量,则返回值是操作数2
如果操作数是falsely变量,则返回值是操作数1本身
-逻辑或(||):如果操作数1是truely变量,则返回值是操作数1
如果操作数1是falsely变量,则返回值是操作数2
-
举例
-
举例2
- 传参进去转换成truely,&&前面是true没有办法决定结果,所以返回值是操作数2callback(),函数调用执行
- 不穿参数进去则返回undefined,只有形参没有实参,&&来说前面是false,后面不管是true还是false都返回false,所以返回值是undefined
-
练习
-
答案是:{ x: 101, y: 200 }
- 图示
-
-
-
原型和原型链
-
举例
-
对象.proto 获取的是对象的对象原型,也叫隐式原型
类.prototype 获取的是类的原型对象,也叫显式原型
对象的隐式原型与类的显式原型是同一个对象,内存地址一致 -
图示:每个 class 都有显示原型 prototype
每个实例都有隐式原型 proto_
实例的 proto 指向对应 class 的 prototype -
看xialuo这个对象里有没有sayHi这个函数,然后发现并没有
-
获取属性或方法时,首先再对象的自身属性中查找,如上面 name 就是对象的自身属性
如果找不到,则自动取 proto 中查找,如上面的 sayHi 方法,在对象中并没有,所以去对象的隐式原型上查找,见上图-
查找eat方法的的查找顺序
-
toString方法 的查找顺序
- 图示:所有 class 都是从 Object 继承的,也就式说 Object 式是其他类的原型
-
-
-
理解 instanceof
-
看 instanceof 后面的类,是否存在于 xialuo 原型链中某个隐式原型中
jQuery
-
js页面
-
html页面