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

来源:互联网 发布:微店淘宝快速搬家 编辑:程序博客网 时间:2024/06/03 18:33

上期回顾 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

原创粉丝点击