js中使用typeof 得到有哪些类型?,只能区分值类型,引用类型区分不出来
undefind
string
number
boolean
object
function
变量类型?
引用类型,(数组,函数,对象)
值类型
变量计算-强制类型转化,以下操作会发生类型转化
字符串拼接
==运算符
if语句
逻辑运算
何时使用== ,何时===?
100='100' //true
0='' //true
null==undefind //true
如何理解json
json只不过是一个js对象而已
window.onload 和domcontentloaded的区别
创建10个a标签,点击时弹出来对应的编号
简述创建一个模块加速器,实现一个类似require.js的基本功能
实现数组的随机排序
原型和原型链
如何判断一个变量是否为数组类型?
写一个原型链继承的例子
描述new一个对象的过程
构造函数
构造函数-拓展
原型规则和示例
外部script 异步加载的一种几种方式
<script async src="" ></script>
你对css盒模型的认识?
考察基本概念, 标准模型+ie模型
标准模型和IE模型的区别,高度和宽度不同。
css 如何设置这2种模型
如何设置和模型的对应高和宽
根据盒模型解释边距重叠问题
bfc,边距解释方案
ifc
bfc(边距重叠解决方案)
bfc的基本概念
bfc的原理
如何创建bfc
bfc的使用场景
dom事件
基本概念,dom事件的级别
dom0 element.onclick=function(){}
dom1 没有设计dom的事件
dom2 element.addEventListener('click',function(){},false)
dom3 element.addEventListener('keyup',function(){},false)
dom 增加了鼠标相关事件
dom 事件模型 (捕获和冒泡)
捕获,从上到下的过程,
冒泡。从下到上的过程
第一阶段。 捕获
第二阶段。 目标阶段
第三阶段。 冒泡
dom 事件流
捕获dom事件的具体流程
window -> document ->html 标签->body->....
冒泡反之。。。
event对象的常见应用
event.preventDefault();//阻止默认行为
event.stopPropagation();//阻止冒泡
event.stopImmediatePropagation();//阻止行为
event.currentTarget();//子元素事件代理
event.target();//父集事件
....
自定义事件
var eve=new Event('custome')
dom.addEventListener('custome',function(){})
dom.dispatchEvent(eve)
http协议
http协议的主要特点
简单快速,灵活,无连接,无状态
http报文的组成部分
请求报文,相应报文
请求行,请求头,空行,请求体
状态行,相应头,空行,响应体
http方法
post 和get的区别
http状态码
什么是持久连接
keep-alive. 1.1版本支持
什么是管线化
js运行机制
// console.log(1);
// setTimeout(function () {
// console.log(2);
// }, 0);
// console.log(3);
// console.log(4);
//
// console.log('A');
// setTimeout(function () {
// console.log('B');
// }, 0);
// while (1) {
//
// }
//
for (var i = 0; i < 4; i++) {
setTimeout(function () {
console.log(i);
}, 1000);
}
通讯类,跨域通讯的几种方式
jsonp
hash
postmassage
websocket
cors 本质是fetch()
// jsonp工作原理.
// 利用hash,场景是当前页面 A 通过iframe或frame嵌入了跨域的页面 B
// 在A中伪代码如下:
var B = document.getElementsByTagName('iframe');
B.src = B.src + '#' + 'data';
// 在B中的伪代码如下
window.onhashchange = function () {
var data = window.location.hash;
};
// postMessage
// 窗口A(http:A.com)向跨域的窗口B(http:B.com)发送信息
Bwindow.postMessage('data', 'http://B.com');
// 在窗口B中监听
Awindow.addEventListener('message', function (event) {
console.log(event.origin);
console.log(event.source);
console.log(event.data);
}, false);
// Websocket【参考资料】http://www.ruanyifeng.com/blog/2017/05/websocket.html
var ws = new WebSocket('wss://echo.websocket.org');
ws.onopen = function (evt) {
console.log('Connection open ...');
ws.send('Hello WebSockets!');
};
ws.onmessage = function (evt) {
console.log('Received Message: ', evt.data);
ws.close();
};
ws.onclose = function (evt) {
console.log('Connection closed.');
};
// CORS【参考资料】http://www.ruanyifeng.com/blog/2016/04/cors.html
// url(必选),options(可选)
fetch('/some/url/', {
method: 'get',
}).then(function (response) {
}).catch(function (err) {
// 出错了,等价于 then 的第二个参数,但这样更好用更直观
});
安全类
csrf
概念 跨站请求伪造,(利用接口漏洞做想做的事)
攻击原理 cookie
解决办法
加token验证,
加referer验证
隐藏令牌
xss 跨域脚本攻击
核心原理;在页面注入script脚本
算法类
排序(快速排序,选择排序,希尔排序,冒泡排序)
https://segmentfault.com/a/1190000009426421
https://segmentfault.com/a/1190000009366805
https://segmentfault.com/a/1190000009461832
堆栈,队列,链表
https://juejin.cn/post/6844903459993419790
递归
https://segmentfault.com/a/1190000009857470
波兰式或逆波兰式
http://www.cnblogs.com/chenying99/p/3675876.html
页面性能提升
提升页面性能的方法
1,资源压缩合并,减少http请求
2.非核心代码异步加载-> 异步加载的方式-> 异步加载的区别
3.利用浏览器缓存->缓存分类->缓存的原理
4.使用cdn
5.预解析dns
dns预解析的实现
预解析的实现:
1、用meta信息来告知浏览器, 当前页面要做DNS预解析:<meta http-equiv="x-dns-prefetch-control" content="on" />
2、在页面header中使用link标签来强制对DNS预解析: <link rel="dns-prefetch" href="http://bdimg.share.baidu.com" />
注:dns-prefetch需慎用,多页面重复DNS预解析会增加重复DNS查询次数。
异步加载方式
1.动态脚本加载
2.defer
3.asyns
异步加载的区别
1.defer 是在html解析完后才会执行,如果是多个,按照顺序执行
2.asyns 是在加载完后后立即执行,如果是多个,执行顺序和加载顺序无关
浏览器缓存
1)。缓存分类
1.强缓存,
2.协商缓存
错误监控
即使错误捕获
1)try catch
2)winow.onerror
资源加载错误
1)object.onerror
2) performance.getEntries()
3) Error事件捕获
使用 window..addEventListener('error',function(){
console.log('错误信息')
},false)
上报错误的基本原理
1)使用ajax通讯方式上报
2)使用image对象上报。
(new Image).src='http://域名/api/error'