说明:刚经历过面试不久,以前老是不总结的我,这回总结一下我经常遇到的面试题,留个回忆~
这里只是做个简单的介绍,给自己提个醒,根据面试题延伸出自己需要补哪一块的知识。
下面,开始我的表演
本地对象和单体内置对象统称为“内置对象”
undefined/number/string/boolean/object/function
typeof undefined // undefined
typeof ‘abc‘ // string
typeof 123 // number
typeof true // Boolean
typeof {} // object
typeof [] // object
typeof null // object
typeof console.log // function
if (obj.a == null) {
// 这里相当于obj.a === null || obj.a === undefined的简写形式
// jquery源码推荐写法
}
除了这个,其他一律使用全等.
值类型
把数值分块存储在内存中,存储在栈内存中
引用类型
存储在堆内存,变量只存了变量名和指针(用于找到堆内存的位置)
JSON只不过是一个JS对象,也是一种数据格式
JSON.stringify({a: 10, b: 20})
JSON.parse("{"a": 10, "b": 20}")
数据格式:简单值,对象,数组
JSON跟对象字面量的写法很像,JSON属性必须加双引号。
简单判断:
var arr = [];
arr instanceof Array // true
typeof arr // object。 typeof 是无法判断是否是数组
更准确的判断:
function isArray(value) {
return Object.prototype.toString.call(value) === ‘[object Array]‘;
}
isArray([1, 2, 3]);
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;
}
}
Elem.prototype.on = function(type, fn){
var elem = this.elem;
elem.addEventListener(type, fn);
return this;
}
var div1 = new Elem(‘div1‘);
div1.html(‘<p>显示出来了</p>‘).on(‘click‘, function() {
console.log(‘ok‘);
}).html(‘<p>kaopu</p>‘)
变量定义和函数声明(函数表达式)都会被提到前面,即变量提升。
单线程:只有一个线程,同一时间只能做一件事,两段JS不能同时执行
原因:避免DOM渲染的冲突
解决方案:异步算是一种“无奈”的解决方案,虽然有很多问题
异步是单线程的解决方案
避免DOM渲染的冲突:
异步存在的两个问题:
实现方式:event loop
使用异步的场景
总结当前异步的解决方案
同步和异步的区别
同步会阻塞代码执行,而异步不会
alert是同步,setTimeout是异步
property只是一个js对象的属性修改,它们会在初始化的时候再DOM对象上创建。
Attribute是对html标签属性的修改,attributes是属于property的一个子集。
cookie: 本身用于客户端和服务器端通信,但是它有本地存储的功能,于是就被“借用”,使用document.cookie = … 获取和修改即可。
缺点:存储量太小,只有4kb,所有http请求都带着,会影响获取资源的效率,API简单,需要封装才能用。
sessionStorage, localStorage:HTML5专门为存储而设计,最大容量5M,API简单易用: localStorage.setItem(key, value) localStorage.getItem(key)
localStorage在IOS safari隐藏模式下,localStorage.getItem会报错
sessionStorage关闭浏览器后数据也会跟着清掉,而localStorage不会。
区别:容量,是否会携带到ajax中,API易用性
${}
首先从名字来看,MVVM即Model, View ViewModel,Model对应的是data数据部分,View对应的是html视图部分,ViewModel对应的是new Vue实例部分,View通过事件绑定的方式影响到Model,Model通过数据绑定影响到View。
对ViewModel的理解:连接器,用于连接View和Model
MVVM不是一个从零开始的创新,是由之前的MVC发展过来的,因为MVC是应用到后端的,并不是前端的,为了适用前端的场景,把C换成了VM
MVVM实现的三要素也是vue的三要素:
方法一:
let arr = [6, 8, 9, 9, 12, 13, 14, 1, 3];
function removeArr(arr) {
let arrayResult = [];
for (let i = 0, len = arr.length; i < len; i++) {
if (arrayResult.indexOf(arr[i]) === -1) {
arrayResult.push(arr[i]);
}
}
return arrayResult;
}
removeArr(arr);
方法二:
var arr = [6, 8, 9, 9, 12, 13, 14, 1, 3];
function removeArr(arr) {
var i = 0,
len = arr.length,
j;
for (i; i < len; i++) {
for (j= i+1; j < len; j++) {
if(arr[i] == arr[j]) {
arr.splice(j, 1);
j--;
}
}
}
return arr;
}
removeArr(arr);
方法三:
let arr = [6, 8, 9, 9, 12, 13, 14, 1, 3];
function removeArr(arr) {
return Array.from(new Set(arr))
}
removeArr(arr);
方法四:
let arr = [6, 8, 9, 9, 12, 13, 14, 1, 3];
function removeArr(arr) {
let arrayResult = [];
arr.reduce((s1, s2) => {
if(s1 !== s2) {
arrayResult.push(s1);
}
return s2
});
arrayResult.push(arr[arr.length-1])
return arrayResult;
}
removeArr(arr);
fetch:
号称是AJAX的替代品.。
优势:
缺点:
beforeCreate和created在vue实例化的时候就执行了,此处可请求数据,但是不能进行dom操作,因为拿不到组件对应的dom节点,如下图。
给实例赋值最早要在created里面操作。
beforeMount和mounted这里是把组件生成的html内容挂在到dom上面的一个过程,如果不指定el或者是$mount()的话,数据是不会挂在到页面上的,因为它不知道该挂载到哪里去。所以dom应该在mounted这里才去操作。
beforeMount()是渲染前的,mounted()是通过render函数渲染后拿到的,mounted之后实例就创建完成了.
说明:上述4个钩子都是只会被调用一次。beforeMount和mounted在服务端渲染的时候不会被调用。服务端渲染的时候会调用的只有beforeCreate和created。
在.vue文件里开发的过程中,是都没有template的,在.vue里面写的template都经过vue-loader处理直接变成了render函数放在vue-loader解析过的文件里面。
beforeUpdate和updated是有数据更新的时候才会去执行的。
beforeDestroy和destroyed组件被销毁的时候才会去执行。
$destroy() // 组件销毁的一个方法,解除所有的事件监听和所有的watch。
activated和deactivated和keep-alive有关系,该钩子在服务器端渲染期间不被调用。activated是在keep-alive 组件激活时调用。
deactivated在keep-alive 组件停用时调用。
render(h)和renderError(),有render的时候就不需要template了,因为template处理后最终也是变成render函数的返回vnode的,renderError是在render报错之后才会触发,报错之后渲染出来的就是报错的信息,只有在本组件的render函数出现错误的时候才会被调用,只关心自己有没有渲染成功,不管子组件。
errorCaptured() 正式环境可以使用,收集线上环境的一些错误。所有子组件的错误都可以捕捉到,除非子组件把冒泡事件停止掉。
原文:https://www.cnblogs.com/arissy/p/9903141.html