扫码关注公众号
property 和 attribute 的区别是什么?
【解析】propertyDOM节点就是一个JS对象,它符合之前讲述的对象的特征——可扩展属性,因为DOM节点本质上也是一个JS对象。因此,如下代码所示,p可以有style属性,有classNamenodeNamenodeType属性。注意,这些都是JS范畴的属性,符合JS语法标准的。varpList=document.querySelectorAll('p')varp=pList[0]console.log(p.style.width)//获取样式p.style.width='100px'//修改样式console.log(p.className)//获取classp.className='p1'//修改class//获取nodeName和nodeTypeconsole.log(p.nodeName)console.log(p.nodeType)attributeproperty的获取和修改,是直接改变JS对象,而attribute是直接改变HTML的属性,两种有很大的区别。attribute就是对HTML属性的get和set,和DOM节点的JS范畴的property没有关系。varpList=document.querySelectorAll('p')varp=pList[0]p.getAttribute('data-name')p.setAttribute('data-name','juejin')p.getAttribute('style')p.setAttribute('style','font-size:30px;')而且,get和setattribute时,还会触发DOM的查询或者重绘、重排,频繁操作会影响页面性能。
DOM 操作的基本 API 有哪些?
【解析】新增节点vardiv1=document.getElementById('div1')//添加新节点varp1=document.createElement('p')p1.innerHTML='thisisp1'div1.appendChild(p1)//添加新创建的元素//移动已有节点。注意,这里是“移动”,并不是拷贝varp2=document.getElementById('p2')div1.appendChild(p2)获取父元素vardiv1=document.getElementById('div1')varparent=div1.parentElement获取子元素vardiv1=document.getElementById('div1')varchild=div1.childNodes删除节点vardiv1=document.getElementById('div1')varchild=div1.childNodesdiv1.removeChild(child[0])还有其他操作的API,例如获取前一个节点、获取后一个节点等,但是面试过程中经常考到的就是上面几个。
cookie和localStorage有何区别?
【解析】cookiecookie本身不是用来做服务器端存储的(计算机领域有很多这种“狗拿耗子”的例子,例如CSS中的float),它是设计用来在服务器和客户端进行信息传递的,因此我们的每个HTTP请求都带着cookie。但是cookie也具备浏览器端存储的能力(例如记住用户名和密码),因此就被开发者用上了。使用起来也非常简单,document.cookie=....即可。但是cookie有它致命的缺点:①存储量太小,只有4KB②所有HTTP请求都带着,会影响获取资源的效率③API简单,需要封装才能用localStorage和sessionStorage后来,HTML5标准就带来了sessionStorage和localStorage,先拿localStorage来说,它是专门为了浏览器端缓存而设计的。其优点有:①存储量增大到5MB②不会带到HTTP请求中③API适用于数据存储localStorage.setItem(key,value)localStorage.getItem(key)sessionStorage的区别就在于它是根据session过去时间而实现,而localStorage会永久有效,应用场景不同。例如,一些需要及时失效的重要信息放在sessionStorage中,一些不重要但是不经常设置的信息,放在localStorage中。针对localStorage.setItem,使用时尽量加入到try-catch中,某些浏览器是禁用这个API的,要注意。