JS面试题
1.介绍js的基本数据类型、引用类型、特殊类型
**基本数据类型**:String、Number、Boolean、undefined、null (es6新增Symbol)
**引用类型**: function、Object
**特殊类型**:undefined、null
2.原型链是什么 ?
每个对象都有一个prototype(原型),当访问一个对象属性时,如果不存在,那么它就会去prototype里找到这个属性,这个prototype又会有自己的protoType,于是就一直找下去,形成原型链。
3.JavaScript 如何实现继承?
(1)构造继承
(2)原型继承
(3)实例继承
(4)拷贝继承
4.null 和 undefined 有何区别?
null表示“无”的空值,转换数值为NAN;
undefined :是一个表示"无"的原始值,转换数值为0
5.Ajax 是什么?如何创建一个 Ajax ?
Ajax是异步;
(1)创建XMLHttpRequest对象,也就是创建一个异步调用对象
(2)创建一个新的HTTP请求,并指定该HTTP请求的方法、URL及验证信息
(3)设置响应HTTP请求状态变化的函数
(4)发送HTTP请求
(5)获取异步调用返回的数据
(6)使用JavaScript和DOM实现局部刷新
6.CMD和AMD的区别
CMD推崇依赖就近(requireJs实现),AMD推崇依赖前置(seaJs实现)
7.DOM操作
(1)创建新节点
createDocumentFragment() //创建一个DOM片段
createElement() //创建一个具体的元素
createTextNode() //创建一个文本节点
(2)添加、移除、替换、插入
appendChild()
removeChild()
replaceChild()
insertBefore() //在已有的子节点前插入一个新的子节点
(3)查找
getElementsByTagName() //通过标签名称
getElementsByName() //通过元素的Name属性的值(IE容错能力较强,会得到一个数组,其中包括id等于name值的)
getElementById() //通过元素Id,唯一性
7.call和apply的作用是什么?区别是什么?
call和apply的功能基本相同,都是实现继承或者转换对象指针的作用;
唯一不通的是前者参数是罗列出来的,后者是存到数组中的;
call或apply功能就是实现继承的;与面向对象的继承extends功能相似;但写法不同;
语法:
.call(对象,args);//此地参数是指的是对象的参数,非方法的参数;
.apply(对象,a1,a2,a3)//参数数组的形式:[参数1,参数2,......]
8.栈和堆的区别
一、堆栈空间分配区别:
1、栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;
2、堆(操作系统): 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。
二、堆栈缓存方式区别:
1、栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放;
2、堆是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。
三、堆栈数据结构区别:
堆(数据结构):堆可以被看成是一棵树,如:堆排序;
栈(数据结构):一种先进后出的数据结构。
9.JS的垃圾回收机制是什么
垃圾回收机制指的是一块被分配的内存即不能使用,又不能回收,知道浏览器进程结束。
10.JS字符串操作函数
* concat() – 将两个或多个字符的文本组合起来,返回一个新的字符串。
* indexOf() – 返回字符串中一个子串第一处出现的索引。如果没有匹配项,返回 -1 。
* charAt() – 返回指定位置的字符。
* lastIndexOf() – 返回字符串中一个子串最后一处出现的索引,如果没有匹配项,返回 -1 。
* match() – 检查一个字符串是否匹配一个正则表达式。
* substr() 函数 -- 返回从string的startPos位置,长度为length的字符串
* substring() – 返回字符串的一个子串。传入参数是起始位置和结束位置。
* slice() – 提取字符串的一部分,并返回一个新字符串。
* replace() – 用来查找匹配一个正则表达式的字符串,然后使用新字符串代替匹配的字符串。
* search() – 执行一个正则表达式匹配查找。如果查找成功,返回字符串中匹配的索引值。否则返回 -1 。
* split() – 通过将字符串划分成子串,将一个字符串做成一个字符串数组。
* length – 返回字符串的长度,所谓字符串的长度是指其包含的字符的个数。
* toLowerCase() – 将整个字符串转成小写字母。
* toUpperCase() – 将整个字符串转成大写字母。
10.比较typeof与instanceof?
相同点:JavaScript 中 typeof 和 instanceof 常用来判断一个变量是否为空,或者是什么类型的。
typeof 的定义和用法:返回值是一个字符串,用来说明变量的数据类型。
Instanceof 定义和用法:instanceof 用于判断一个变量是否属于某个对象的实例。
- 跨域请求资源的方法
(1)、porxy代理
定义和用法:proxy代理用于将请求发送给后台服务器,通过服务器来发送请求,然后将请求的结果传递给前端。
实现方法:通过nginx代理;
注意点:1、如果你代理的是https协议的请求,那么你的proxy首先需要信任该证书(尤其是自定义证书)或者忽略证书检查,否则你的请求无法成功。
(2)、CORS 【Cross-Origin Resource Sharing】
定义和用法:是现代浏览器支持跨域资源请求的一种最常用的方式。
使用方法:一般需要后端人员在处理请求数据的时候,添加允许跨域的相关操作。
(3)、jsonp
定义和用法:通过动态插入一个script标签。浏览器对script的资源引用没有同源限制,同时资源加载到页面后会立即执行(没有阻塞的情况下)。
特点:通过情况下,通过动态创建script来读取他域的动态资源,获取的数据一般为json格式。
12.什么是闭包
(1)函数内在嵌套函数
(2)内部函数可以引用外层的参数变量
(3)参数变量不会被垃圾回收机制回收
13.什么是防抖和节流
防抖 触发高频事件后n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间
节流 高频事件触发,但在n秒内只会执行一次,所以节流会稀释函数的执行频率
14.HTTP状态码
100 Continue 继续,一般在发送post请求时,已发送了http header之后服务端将返回此信息,表示确认,之后发送具体参数信息
200 OK 正常返回信息
201 Created 请求成功并且服务器创建了新的资源
202 Accepted 服务器已接受请求,但尚未处理
301 Moved Permanently 请求的网页已永久移动到新位置。
302 Found 临时性重定向。
303 See Other 临时性重定向,且总是使用GET请求新的URI。
304 Not Modified 自从上次请求后,请求的网页未修改过。
400 Bad Request 服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求。
401 Unauthorized 请求未授权。
403 Forbidden 禁止访问。
404 Not Found 找不到如何与URI相匹配的资源。
500 Internal Server Error 最常见的服务器端错误。
503 Service Unavailable服务器端暂时无法处理请求(可能是过载或维护)。
只需要记住(200,404,403,500,504)即可
15.浅拷贝和深拷贝的区别
浅复制:仅仅是指向被复制的内存地址,如果原地址发生改变,那么浅复制出来的对象也会相应的改变。
深复制:在计算机中开辟一块新的内存地址用于存放复制的对象。
16.["1","2","3"].map(parseInt) 的答案是多少?
[1,NaN,NaN]
因为 parseInt 需要两个参数(val,radix),其中 radix 表示解析时用的基数。
map 传了3个(element,index,array),对应的 radix 不合法导致解析失败。
有想了解更多的小伙伴可以加Q群链接里面看一下,应该对你们能够有所帮助。
网友评论