juejin.cn/post/684490… juejin.cn/post/684490… juejin.cn/post/696122…
JS有哪几种数据类型:
原始数据类型:7种。Undefined、Null、Boolean、Number、String、Symbol(ES6)
、BigInt(ES10)。
引用数据类型:Object
prototype和_proto_
prototype:是函数和类上面的属性
_proto_:是每一个JS对象都有的一个属性
Person.prototype === person.__proto__
JS种的this
当函数独自调用的时候,严格模式下,this指向undefind,非严格模式下,this指向window
当用户在浏览器输入地址,按下回车,进行了那几步?
1、DNS域名解析,将域名解析为IP地址。
2、建立TCP链接,服务器和浏览器的桥梁(3次握手,关闭连接)
3、TCP链接建立成功,浏览器向服务器发送请求,服务器响应
4、关闭TCP链接,浏览器渲染
JS浮点数运算的精度问题
JS在计算0.1+0.2:首先十进制会转换成二进制,但由于浮点数用二进制表达时是无穷的;
0.1 -> 0.0001100110011001……
0.2 -> 0.00011001100110011……
两个相加得 0.01001100110011001100110011
再换成十进制就成了0.30000000004
numObj.toFixed(digits);
parseFloat((2.22 + 0.1).toFixed(10)) ===2.23
vue组件通信
1、props和$emit
2、$parent和$children
3、$refs
4、vuex
5、provide和inject(祖孙)
reload是父组件的方法
父组件:provide(){
return{
parentValue:"我是父组件的值啊"
}
}
子组件:inject:{
parentValue: { // 健名
from: 'parentValue', // 来源
default: 'parentValue'// 默认值
}
}
或者inject:['parentValue']
6、$attrs 和$listener(祖孙)
知识点
基础知识:1、原型、原型链
2、作用域、闭包
3、异步、单线程
JS API:1、DOM操作
2、Ajax
3、事件绑定
开发环境:1、版本管理
2、模块化
3、打包工具
运行环境:1、页面渲染
2、性能优化
typeof
typeof只能判断基础类型,对于引用类型,没作用。
JS中内置函数
Object、Array、Boolean、Number、String、Function、Date、RegExp、Error
JSON和Math一样是对象
原型和原型链
所有的引用类型(数组、对象、函数),都有一个__proto__属性,属性值是一个普通对象
所有的函数,都有一个prototype属性,属性值也是一普通对象
所有的引用类型(数组、对象、函数),__proto__属性值指向它的构造函数的“prototype”属性值(指向就是===)
obj.__proto__===Object.prototype
当试图得到一个对象的某个属性时,如果这个对象没有这个属性,那么就会去它的__proto__(即它的构造函数的prototype)中寻找。
//构造函数:
function Foo(name,age){
this.name = name;
}
Foo.prototype.alertName = function(){
alert(this.name)
}
//创建实例
var f = new Foo('张三');
f.printName = function(){
console.log(this.name)
}
//测试
f.printName()
f.alertName()
面试中实际用到的实例:
function Elem(id){
this.elem = document.getElementById(id);
}
Elem.prototype.html = function(val){
var elem = this.elem
if(val){
elem.innerHTML = val;
return this
}else{
return elem.innerHTML
}
}
var div1 = new Elem('div1');
instanceof
用于判断引用类型属于哪个构造函数的方法
arr instanceof Array ->true
this
this是函数在哪里调用,this指向哪个对象。
var a = {
name:'A',
fn:function(){
console.log(this.name)
}
}
a.fn() //this === a
a.fn.call({name:'B'}) //this === {name:'B'}
var fn1 = a.fn();
fn1() //this === window
作用域链
作用域是函数定义的时候,所在的作用域不是调用的时候
闭包
闭包使用场景
1、函数作为返回值
2、函数作为参数传递
异步使用场景
1、定时任务:setTimeout、setInterval
2、网络请求:promise
3、事件绑定
同步执行完,在解封异步。(单线程)
数组的API
forEarch 遍历所有元素
every判断所有元素是否都满足条件
some判断是否至少有一个元素符合条件
sort排序
map对元素重新组装,生成新数组
JSONP
加载一个不同源的JS文件,服务器动态生成JSON数据并执行callback函数(数据当参数返回),返回给我们,我们通过定义callback函数获取。
window.callback = function(data){
}
<script src="http://coding.immoc.com/api.js"></script>
存储
cookie、sessionStorage、localStorahe区别
cookie:1、本身用于客户端和服务器端通信
2、但它本身有存储功能,于是被借用
3、document.cookie=
4、存储太小,只有4kb
5、所有http请求带着,影响性能
localStory、sessionStory
1、HTML5,5M
Git
git add .
git checkout xxx
git commit -m '注释'
git push
git pull
页面加载
//浏览器访问资源过程
1、浏览器根据DNS服务器得到域名IP地址
2、浏览器向这个IP的机器发送http请求
3、服务器受到、处理并返回http请求
4、浏览器得到返回内容
//浏览器渲染页面过程
1、根据HTML机构生成DOM Tree
2、根据CSS生成CSSOM
3、将DOM和CSSOM整合形成RenderTree
4、根据RenderTree渲染和展示
5、遇到<script>时,会执行并阻塞渲染
性能优化
//加载资源优化
1、静态资源的压缩合并
2、静态资源缓存
3、使用CDN让资源加载更快
4、使用SSR后端渲染,数据直接输出到HTML中
//渲染优化
1、css放前面,JS放后面
2、懒加载
3、减少DOM查询、减少操作
4、事件节流
模块化