您的位置:首页 > 职场人生

前端js面试技巧(2)——JS-WEB-API部分

2017-10-20 18:41 537 查看
上期回顾 JS基础知识

①变量类型和计算

②原型和原型链

③闭包和作用域

④单线程和异步

⑤其他(如日期,Math,各种常用API)

注意:内置函数和内置对象的区别

1、内置函数:Object Array RegExp Function Error Date Number Boolean String…

2、内置对象:Math JSON…

本期主要内容

1、Dom操作

2、Bom操作

3、事件绑定

4、Ajax请求(包括http协议)

5、存储

注:

JS基础知识:ECMA 262标准

JS-WEB-API:W3C标准,它参与规定任何JS基础相关的东西,不管什么变量类型、原型、作用域和异步,只管定义用于浏览器JS操作页面的API和全局变量





①页面弹框是window.alert(123),浏览器需要做:

定义一个window全局变量,对象类型

给它定义一个alert属性,属性值是一个函数

②获取元素document.getElementById(id),浏览器需要:

定义一个document全局变量,对象类型;

给它定义一个getElementById的属性,属性值是一个函数

Dom操作

Dom本质

html是xml的一种特殊结构

Dom可以理解为:

浏览器把拿到的html代码,结构化一个浏览器能识别并且js可操作性的一个模型而已

Dom节点操作

①获取DOM节点

var div1=document.getElementById(‘div1’);//元素

var divList=document.getElementsByTagName(‘div’); //集合

console.log(divList.length)

console.log(divList[0])

var containerList=document.getElementsByClassName(“.contaner”)//集合

var pList=document.querySelectorAll(‘p’)//集合

②property

var pList=document.querySelectorAll(‘all’);

var p=pList[0];

console.log(p.style.width)

p.style.width=’100px’

console.log(p.className)

p.className=’p1’

//获取nodeName和nodeType

console.log(p.nodeName)

console.log(p.nodeType)



③Attribute



Dom结构操作

①新建节点

②查询子节点

③查询父节点

④删除节点

解答

问题1、dom是哪种基本的数据结构?



问题2、Dom操作的常用API有哪些?

①获取DOM节点,以及节点的property和Attribute

②获取父节点,获取子节点

③新增节点,删除节点

问题3、Dom节点的Attribute和Property有和区别?

①property只是一个JS对象的属性的修改

②Attribute是对html标签属性的修改

BOM操作

navigator

var ua=navigator.userAgent

var isChrome=ua.indexOf(‘Chrome’)

console.log(isChrome)



screen

console.log(screen.width)

console.log(scr)

location

console.log(location.href)

console.log(location.protocal)

console.log(location.pathname)

console.log(location.search)

console.log(location.hash)

history

history.back()

histort.forward()

解答

题目1、如何检测浏览器的类型

var ua=navigator.userAgent

var isChrome=ua.indexOf(‘Chrome’)

console.log(isChrome)

题目2、拆解url的各部分

参考location

事件

通用事件绑定

var btn=document.getElementById(‘btn1’);

btn.addEventListener(‘click’,function(event){

console.log(‘clicked’)

})

function bindEvent(elem,type,fn){

elem.addEventListener(type,fn)

}

var a=document.getElementById(‘link1’)

bindEvent(a,’click’,function(e){

e.preventDefault() //阻止默认行为

alert(‘clicked’)

})

注:关于IE低版本的兼容性

①IE低版本使用attachEvent绑定事件,和W3C标准不一样

②IE低版本使用量以非常少,很多网站都早已不支持

建议对IE低版本的兼容性:了解即可,无需深究

如果遇到对IE低版本要求苛刻的面试,果断放弃

事件冒泡



代理



解答

问题1、编写一个通用的事件监听函数



问题2、描述事件冒泡流程

①DOM树形结构

②事件冒泡

③阻止冒泡

④冒泡的应用(代理)

问题3、对于一个无线下拉加载图片的页面,如何给每个图片绑定事件

①使用代理

②知道代理的两个优点

代码简洁

减少浏览器内存占用

Ajax

XMLHttpRequest

var xhr=new XMLHttpRequest()

xhr.open(“GET”,’/api’,false)

xhr.onreadystatechange=function(){

//这里的函数异步执行,可参考之前JS基础中的异步模块

if(xhr.readyState==4){

if(xhr.status==200){

alert(xhr.reponseText)

}

}

}

xhr.send(null)

注:IE兼容性问题

①IE低版本使用ActiveXObject,和W3C标准不一样

②IE低版本使用量非常少,很多网站都早已不支持

③建议对IE低版本的兼容性了解即可,无需深究

④如果遇到对IE低版本要求苛刻的面试,果断放弃

状态码说明

0-(未初始化)还没有调用send()方法

1-(载入)已调用send()方法,正在发送请求

2-(载入完成)send()方法执行完成,已经接收得到全部响应内容

3-(交互)正在解析响应内容

4-(完成)响应内容解析完成,可以在客户端调用了

2xx-表示成功处理请求。如200

3xx-需要重定向,浏览器直接跳转

4xx-客户端请求错误,如404

5xx-服务器端错误,如500

跨域

什么是跨域

JSONP

服务器端设置http header
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: