1.js中typeof返回的数据类型
基础数据类型:string, number,boolean,null,undefined
复合数据类型:object,function,array
null和undefined区别: undefined是默认值;只有赋值为null,返回值才能是null;
2.window对象和document对象
● window对象是指浏览器打开的窗口。
● document对象是Document对象(HTML 文档对象)的一个只读引用,window对象的一个属性。
3.call, apply,bind
call和apply是为了改变函数运行时的上下文而存在的,换句话说就是改变函数内部的this指向 举例:
function fruits() {}
fruits.prototype = {
color: "red",
say: function() {
console.log("My color is " + this.color);
}
}
var apple = new fruits;
apple.say(); //My color is red
但是如果我们有一个对象banana= {color : "yellow"} ,我们不想对它重新定义 say 方法,那么我们可以通过 call 或 apply 用 apple 的 say 方法:
banana = {
color: "yellow"
}
apple.say.call(banana); //My color is yellow
apple.say.apply(banana); //My color is yellow
apply和call的区别,作用完全一样但是接受的参数方式不太一样,第一个参数是你想指定的上下文,call只需要将参数按顺序的传递进去,而apply需要把参数放入一个数组中。
举例:获取数组的最大值或最小值
var numbers = [5, 458 , 120 , -215 ];
var maxInNumbers = Math.max.apply(Math, numbers), //458
maxInNumbers = Math.max.call(Math,5, 458 , 120 , -215); //458
bind bind()方法会创建一个新函数,称为绑定函数,当调用这个绑定函数时,绑定函数会以创建它时传入 bind()方法的第一个参数作为 this,传入 bind() 方法的第二个以及以后的参数加上绑定函数运行时本身的参数按照顺序作为原函数的参数来调用原函数。
比较
var obj = {
x: 81,
};
var foo = {
getX: function() {
return this.x;
}
}
console.log(foo.getX.bind(obj)()); //81
console.log(foo.getX.call(obj)); //81
console.log(foo.getX.apply(obj)); //81
因此 apply 、 call 、bind 三者都是用来改变函数的this对象的指向的;
apply 、 call 、bind 三者第一个参数都是this要指向的对象,也就是想指定的上下文;
apply 、 call 、bind 三者都可以利用后续参数传参;
bind 是返回对应函数,便于稍后调用;apply 、call 则是立即调用
4.this指向
this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象; 如果一个函数中有this,没有被上一级的对象所调用,this指向就是window;如果一个函数中有this,这个函数有被上一级的函数所调用,那么this指向的就是上一级的对象。
全局默认指向window对象,this指向最终调用它的对象
5.dom
什么是dom: 文档对象模型,DOM是一个接口,我们可以通过dom这个接口对文档html或者xml进行修改
dom有什么用: DOM把一个文档描述成一个树
<p id="purchases" title="">food<p>
var shopping = document.getElementById("purchases");
shopping.setAttribute("title","a list of goods");
getElementById(),是DOM中的一个方法,可用于查找文档中的一个特定的元素,即id=purchases的元素,在此例中将id=purchases的元素p赋值给shopping。setAttribute()方法,用于对属性节点的值做出修改,此处将元素p中title属性的值设置为"a list of goods"。
DOM事件流的三阶段
1.事件捕获阶段(自上向下)
2.处于目标阶段
3.事件冒泡阶段(自下向上)
6.JS阻止事件冒泡和阻止默认事件
event.stoppropagation()阻止事件冒泡;
当父级节点和子级节点都有事件时,触发子级事件时应该阻止事件冒泡;
event.preventdefault()阻止默认事件;
7.JS splice()方法 或者删除数组中某个值的方法
数组中的splice()方法,删除数组中的某一个或几个值
splice(index,length,item)
为数组开始的下标,length替换或删除的长度,item替换的值。 若无item则直接删除。
8.对数组的一些操作
push()//向数组的末尾添加一个或多个元素,并返回新的长度
pop()//删除数组的最后一个元素,把数组长度减1,并返回它删除的元素的值,如果数组为空,则POP不改变数组,并返回undefined值
unshift()//向数组的开头添加一个或多个元素,并返回新的长度
shift()//将数组的第一个元素从其中删除,并返回新的长度
array.reverse()
array.sort()
9.document.load()和document.ready()的区别
● document.load在所有的资源全部加载完成后,执行下一个函数(会有卡顿)。需要加载dom树,css,图片,js等。
● document.ready只要加载完dom树就执行函数(加载比较快)。
10.JS创建函数的方法
- 声明函数:
function name(){} - 匿名函数 :
var double = function(x) { return 2* x; } - 具名函数:首先创建一个变量,变量时一个有名的函数,
var a=function b() - 构造函数 :
new function - 立即函数(自动执行):
void function() ; (function(){}); (function(){})()
11.http请求状态码?也就是常见的HTTP协议状态?
-
200请求成功
-
4开头一般是客户端(前端)的错误
400请求错误
404 not found
403服务器了解用户请求,但是拒绝处理
-
5开头一般是服务器的事儿
500服务器内部错误,不能完成客户请求
502服务器作为网关或代理收到了无效的响应
503服务不可用,服务器由于维护或负载过量未能应答
12.什么是http协议
超文本传输协议(http)是一种通讯协议,允许超文本传输语言(HTML)文档从web服务器传输到客户端。
13.从输入URL到页面加载的过程中都发生了什么?
1.服务器查找域名的ip地址
2.查找完成后浏览器向web服务器发送一个http请求
3.服务器的永久重定向响应
4.浏览器跟踪重定向地址
5.服务器处理请求
6.服务返回一个http响应
7.浏览器显示HTML
8.浏览器发送异步请求
14. 浏览器是如何渲染页面的?
- 解析HTML文件,创建dom树(自下向上)
- 解析css
- css与DOM合并,渲染树
- 重绘(repaint)和回流(reflow)
15.简述ajax过程
- 创建XMLHttpRequest对象,也就是创建一个异步调用对象
- 创建一个新的http请求,并指定该http请求的方法,URL及验证信息
- 设置响应http请求变化的函数
- 发送http请求
- 获取异步调用返回的数据
- JS和dom实现局部刷新
16.ajax中post()和get()请求的区别
(1)get请求,参数会显示在url中,将参数添加在请求的url路径后面,进行传参,(受url的限制)发送的数据量小,会被客户端的浏览器缓存起来,会带来严重的安全问题,一般在获取数据时使用get。
(2)post请求,需要添加HTTP请头,来发送到服务器,传送得数据量大,一般在上传数据时使用post。
区别一:get重点在从服务器上获取资源,post重点在想服务器发送数据;
区别二: get传输数据是通过URL请求,以filed(字段)=value的形式,置于URL后,并用"?"连接,
多个请求数据之间用 "&"连接,如http://127.0.0.1/Test/login.action?name=admin&password=admin,这个过程用户是可见的
区别三: get传输量小,因为受URL长度限制,但效率较低 post可以传输大量数据,所以上传文件时只能用post方式
区别四: get是不安全的,因为URL是可见的,可能会泄露私密信息,如密码等 post较get安全