分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

JS常见问题总结二

发布时间:2023-09-06 01:08责任编辑:白小东关键词:暂无标签

四、异步

console.log(100)setTimeout(function(){ ????console.log(200)})console.log(300)

4.1 同步和异步的区别是什么?分别举一个同步和异步的例子。

答:同步会阻塞代码执行,而异步不会;alert是同步,setTimeout是异步

4.2 一个关于setTimeout的笔试题

console.log(1)setTimeout(function(){ ???console.log(2)},0)console.log(3)setTimeout(function(){ ???console.log(4)},1000)console.log(5)

打印顺序:1,3,5,2,一秒钟之后打印4

4.3 前端使用异步的场景有哪些?

 答:定时任务: setTimeout , setInterval

        网络请求: AJAX请求 , 动态<img>加载

        事件绑定

五、日期和math

知识点:日期

Math:  获取随机数Math.random()

数组API:

   forEach  :遍历所有元素

   every      : 判断所有元素是否都符合条件    

   some       :判断是否有至少一个元素符合条件   

   sort          :排序

   map         :对元素重新组装,生成新数组

   filter         :过滤符合条件的元素

var arr = [‘a‘,‘b‘,‘c‘,‘d‘]arr.forEach(function(item,index){ ???console.log(index,item)})var arr = [1.2.3.4]var result = arr.every(function(item,index){ ???if (item<5) { ???????return true ???}})console.log(result)var arr = [1.2.3.4]var result = arr.some(function(item,index){ ???if (item<3) { ???????return true ???}})console.log(result)var arr = [1.2.3.4]var arr2 = arr.sort(function(a,b){ ???//从小到大排序 ???return a-b ???//从大到小排序 ???return b-a})console.log(arr2)var arr = [1,2,3,4]var arr2 = arr.map(function(item,index){ ???return ‘<b>‘+item+‘<b>‘})console.log(arr2)

var arr = [1,2,3,4]
var arr2 = arr.filter(function(item,index){
if (item<3) {
return true
}
})
console.log(arr2)

 

5.1 获取2017-06-10格式的日期

function formatDate(dt){ ???if (!dt) { ???????dt = new Date() ???} ???var year = dt.getFullYear() ???var month = dt.getMonth()+1 ???var date = dt.getDate() ???if (month < 10) { ???????//强制类型转换 ???????month = ‘0‘+month ???} ???if (date < 10) { ???????date= ‘0‘+date ???} ???return year + ‘-‘+month + ‘-‘+date}var dt = new Date()var formatDate = formatDate(dt)console.log(formatDate)

5.2 获取随机数,要求是长度一致的字符串格式

var random = Math.random()var random = random + ‘0000000000‘//后面加上10个0var random = random.slice(0,10)console.log(random)

5.3 写一个能遍历对象和数组的通用forEach函数

function forEach(obj,fn){ ???var key ???if (obj instanceof Array) { ???????obj.forEach(function(item,index){ ???????????fn(index,item) ???????}) ???}else { ???????//不是数组就是对象 ???????for(key in obj){ ???????????fn(key,obj[key]) ???????} ???}}var arr = [1,2,3]//参数顺序换了,为了和对象的遍历格式一致forEach(arr,function(item,index){ ???console.log(index,item)})var obj = {x:100 , y:200}forEach(obj,function(key,value){ ???console.log(key,value)})

六、JS-WEB-API

 

6.1 DOM是哪种基本的数据结构?  树

6.2 DOM操作的常用API有哪些?

var div1=document.getElementById(‘div1‘)//添加新节点var p1 - document.createElement(‘p‘)p1.innerHTML=‘this is p1‘//添加新创建的元素div1.appendChild(p1)//移动已有节点var p2 = document.getElementById(‘p2‘)div1.appendChild(p2)//获取父元素和子元素var div1 = document.getElementById(‘div1‘)var parent = div1.parentElementvar child = div1.childNodesdiv1.removeChild(child[0])//获取DOM节点var div1= document.getElementById(‘div1‘)//元素var divList = document.getElementsByTagName(‘div‘)//集合console.log(divList.length)console.log(divList[0])var containerList = document.getElementByClassName(‘.container‘)var pList = document.querySelectorAll(‘p‘) 

6.3 DOM节点的attr和property有何区别?

 答: attr是对html标签属性的修改

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

//propertyvar div1 = document.getElementById(‘div1‘)console.log(div1.className)div1.className=‘abc‘console.log(div1.className)//attrvar p1 = document.getElementById(‘p1‘)console.log(p1.getAttribute(‘data-name‘))p1.setAttribute(‘data-name‘,‘xyz‘)

6.4 如何检测浏览器的类型

Navigator/screen/location/history

//检测浏览器类型,以chrome为例//navigatorvar ua=navigator.userAgentvar isChrome = ua.indexOf(‘Chrome‘)console.log(isChrome)

6.5 拆解url的各部分

//screenconsole.log(screen.width)console.log(screen.height)//locationconsole.log(location.href)console.log(location.protocol)console.log(location.host)console.log(location.ashpathname)console.log(location.search)console.log(location.h)//historyhistory.back()history.forward()

七、AJAX

XMLHttpRequest

状态码说明

跨域

可以跨域的三个标签:<img src=xxx>

                                   <link href=xxx>

                                   <script src=xxx>

 

 

7.1 手动编写一个ajax,不依赖第三方库。

var rhr = new XMLHttpRequest()xhr.open("GET","/api",false)xhr.onreadystatechange = function(){ ???if (xhr.readyState == 4) { ???????if (xhr.state === 200) { ???????????alert(xhr.responseText) ???????} ???}}xhr.send(null)

7.2 跨域的几种实现方式

 答:1.JSONP(JSONP实现原理:比如加载一个网址,但不一定服务器端真的有这样一个文件,服务器可以根据请求,动态生成一个文件返回

返回内容格式如:callback({x:100,y:200}))

        2.服务器端设置http header

7.3 请描述一下cookie,sessionStorage和localStorage的区别?

 答:1.cookie :本身用于客户端和服务器端通信,但是它有本地存储的功能,于是就被“借用”

                          使用document.cookie=.....获取和修改即可,不过只能存4kb,每次都携带到AJAX中,API需要封装才能使用

        2.sessionStorage和localStorage:HTML5专门为存储而设计,最大容量5M,不会携带到AJAXzh中易用,API简单y

                                                              前者会自动清理,后者不会

八、事件

8.1 编写一个通用的事件监听函数

function bindEvent(elem,type,selector,fn){ ???if (fn==null) { ???????fn=selector ???????selector=null ???} ???elem.addEventListener(type,function(e){ ???????var target ???????if (selector) { ???????????target = e.target ???????????if (target.matches(selector)) { ???????????????fn.call(target,e) ???????????} ???????}else{ ???????????fn(e) ???????} ???})}//使用代理var div1 = document.getElementById(‘div1‘)bindEvent(div1,‘click‘,‘a‘,function(e){ ???console.log(this.innerHTML)})//不使用代理var a = document.getElementById(‘div1‘)bindEvent(div1,‘click‘,function(e){ ???console.log(a.innerHTML)})

8.2 描述事件冒泡流程

DOM树形结构,事件冒泡,阻止冒泡,冒泡的应用

8.3 对于一个无限下拉加载图片的页面,如何给每个图片绑定事件

使用代理

九、模块化

9.1 window.onload和DOMContentLoaded的区别?

window.addEventListener(‘load‘,function(){ ???//页面得全部加载完成才会执行,包括图片、视频等})document.addEventListener(‘DOMContentLoaded‘,function(){ ???//DOM渲染完即可执行,此时图片、视频可能还没加载完}) 

过程从输入url到得到html的详细过程:

       1.浏览器根据DNS服务器得到域名的IP地址

        2.向这个IP的机器发送http请求

        3.服务器收到、处理并返回http请求

        4.浏览器得到返回内容

9.2简述如何实现一个模块加载器,实现类似require.js的基本功能。

9.3  http协议知识

(1)浏览器先搜索自身的DNS缓存
(2)操作系统搜索自身的DNS缓存(浏览器没有找到缓存或者缓存已经失效)
(3)读取本地的HOST文件
(4)浏览器发起一个DNS的一个系统调用
       宽带运营商服务器查看本身缓存
       运营商服务器发起一个迭代DNS解析的请求
       运营商服务器把结果返回操作系统内核同时缓存起来
       操作系统内核把结果返回浏览器
       浏览器就拿到了www.imooc.com的IP地址

(5)浏览器获得域名对应的IP地址后,发起HTTP“三次握手”
(6)TCP/IP链接建立起来后,浏览器就可以向服务器发送HTTP请求了
(7)服务器端接受到了这个请求,根据路径参数,经过后端的一些处理之后,把处理后的结果数据返回给浏览器,比如页面完整的html代码等返回给浏览器
(8)浏览器拿到了完整的html代码后,在解析和渲染这个页面的时候,里面的JS,CSS,图片静态资源,他们同样也是一个个http请求,都要经过上面的主要七个步骤。
(9)浏览器根据拿到的资源对页面进行渲染,最终把一个完整的页面呈现给了用户。

 

1.回调:将后续逻辑封装在回调函数中作为起始函数的参数

2.同步:只有一个端口每次只处理一件事。
   异步:同样只有一个端口,但这个端口只做分配工作,把事件分配个下面的员工,有上千个员工等着帮你处理事情。

3.事件驱动:为了某个事件而注册的回调函数,但是这个回调函数不是马上执行,当事件发生的时候才会调用 ,这种函数执行的方式就叫做 事件驱动

 

9.5 上线和回滚

 答:1.上线:将测试完成的代码提交到git版本库的master分支 

                      将当前服务器的代码全部打包并记录版本号

                      将master分支的代码提交覆盖到线上服务器,生成新版本号

         2.回滚:将当前服务器的代码打包并记录版本号,备份

                      将备份的上一个版本号解压,覆盖到线上服务器,并生成新的版本号

10.Ajax和Flash

Ajax的优势:1.可搜索性 2.开放性 3.费用 4.易用性 5.易于开发。

Flash的优势:1.多媒体处理 2.兼容性 3.矢量图形 4.客户端资源调度

Ajax的劣势:1.它可能破坏浏览器的后退功能   2.使用动态页面更新使得用户难于将某个特定的状态保存到收藏夹中 ,不过这些都有相关方法解决。

Flash的劣势:1.二进制格式 2.格式私有 3.flash 文件经常会很大,用户第一次使用的时候需要忍耐较长的等待时间  4.性能问题

JavaScript 中包含以下 7 个全局函数

escape( )、eval( )、isFinite( )、isNaN( )、parseFloat( )、parseInt( )、unescape( )。

 

以上。

JS常见问题总结二

原文地址:http://www.cnblogs.com/Yannk/p/7475806.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved