1,http和https的区别?
http是超文本传输协议,信息是明文传输,不安全; https则是具有安全性的ssl加密传输协议.
http的端口是80,https的端口是443.
2,浏览器输入url之后发生了什么?
进行地址解析,解析出来字符串地址中的主机,域名,端口,参数等.->
根据DNS解析解析出来的IP地址,寻找目标服务器.->
与服务器建立TCP连接,发送http请求,服务器处理请求,服务器返回相应结果,关闭TCP连接->
浏览器接受到响应码开始处理并渲染页面.
**3,输入框会使用的事件?
**
focus->keydown->input->keyup->change->blur
4,eval是做什么用的?
它的功能是把对应的字符串解析成JS代码并运行; 避免使用eval,不安全,耗性能.
**5,什么是window对象,什么是document对象?
**
window对象是指浏览器打开的窗口,document对象是指window对象的一个属性.
6,null和undefined的区别?
null表示声明了一个变量,并且它的值为空.undefined表示声明了一个变量,但是没有赋值.
null的类型是object, undefined的类型是undefined.
7,JS中的"use strict"是什么意思?使用它的区别是什么?
use strict是ES5中添加的雅阁模式,使用它能消除JS语法中的一些不合理,不严谨之处.
如:不能变量提升,不能声明同名变量,import/export/class等一些保留名不能作为变量名.等..
8,JS中,有一个函数,执行对象查找时,永远不会去查找原型,这个函数是?
hasOwnProperty->Obj.hasOwnProperty(name)
9,说说对JSON的理解?
JSON是一种轻量级的数据交换格式,它是基于JS的一个子集.数据是个简单,易于读写.
key需要用""括起来.
JSON字符串转换为JSON对象: JSON.parse(str);JSON对象转化为JSON字符串:JSON.stringify(obj).
10,JS延迟加载的方式?
动态创建script标签,当页面的全部内容加载完毕后,在执行创建挂载。
<script>
function loadJS() {
let element = document.createElement("script")
element.src = "download.js"
document.body.appendChild(element)
}
if(window.addEventListener) {
window.addEventListener("load", loadJS, false)
}else if(window.attachEvent) {
window.attachEvent("onload", loadJS)
}else {
window.onload = loadJS
}
</script>
在script标签上,设置async属性,可以达到异步加载js文件的目的。
1、async属性只对外部文件有效,对本地js文件没有效果。
2、async属性是遇到scirpt标签开始通知浏览器异步下载,下载完毕之后,就可以立即执行。
3、async设置的js文件不是按照顺序的。
当外部加载js文件时,将js脚本放在最后,当全部的文件都加载完成后,再开始加载执行js脚本。
11,判断 js 类型的方式
1. tyeof
可以判断出’string’,‘number’,‘boolean’,‘undefined’,‘symbol’但判断 typeof(null) 时值为 ‘object’; 判断数组和对象时值均为 ‘object’2. instanceof原理是 构造函数的 prototype 属性是否出现在对象的原型链中的任何位置function A() {}
let a = new A();
a instanceof A //true,因为 Object.getPrototypeOf(a) === A.prototype;
3. Object.prototype.toString.call()常用于判断浏览器内置对象,对于所有基本的数据类型都能进行判断,即使是 null 和 undefined4. Array.isArray()用于判断是否为数组
11,列举几种强制类型转换和隐式类型转换
强制:parseInt()/parseFloat()/Number()
隐式: == / !=
12,split()和join()
split()把字符串分割成数组;join()将数组转化成字符串.
13,数组pop/push/unshift/shift的简述
push尾部添加 unshift头部添加
pop尾部删除 shift头部删除
14,事件绑定和普通事件的区别
1,普通添加事件的方法:
var btn = document.getElementById('id');
btn.onclick = function(){alert('1')};
btn.onclick = function(){alert('2')};
执行上面代码只会输出'2'
2,事件绑定
var btn = document.getElementById('id');
btn.addEventListener("click",function(){alert('1')},false);
btn.addEventListener("click",function(){alert('2')},false);
执行上面代码先输出'1',在输出'2'
普通添加事件的方法不支持添加多个事件,最下面的事件会覆盖上面的事件.而事件绑定可以添加多个事件.
普通事件无法取消,事件绑定可以通过removeEventListener()去取消.
15,JS的数据类型有哪些?
基本数据类型:string/number/null/undefined/boolean/symbol
引用数据类型: object
16,call()和apply()的区别是什么?
call()/apply()可以直接调用函数,并且可以改变函数内this的指向,
call(this的指向,a,b,c)可以传多个参数,apply(this的指向,[a,b,c])传两个参数.
17,闭包的概念?优缺点?
闭包的概念:闭包就是能读取其他函数内部变量的函数.
优点:避免全局变量的污染希望一个变量长期存储在内存中(缓存变量)缺点:内存泄露(消耗)常驻内存,增加内存使用量
18,new之后干了什么?
1,创建一个新对象.
2,新对象的__proto__属性指向构造函数的原型对象(prototype).
3,绑定this给新对象.
4,执行构造函数内部的代码,将属性添加给新对象的this.
5,返回新对象.
19,ES6新增了什么?
1,新增了块级作用域(let/const)
2,提供了定义类class
3,新增了一种数据类型 symbol
4,新增了箭头函数,函数参数允许设置默认值,引入了rest参数
5,新加了import/export处理模块化
6,增加了promise来处理异步操作
7,增加了结构赋值