与javascript有关的面试题汇总
参考资料
https://jirengu.github.io/javascript-tutorial/
http://book.jirengu.com/fe/
引用类型的问题
|
|
!!画内存图即可解题。值得注意的是,数组是引用类型,所以y会修改obj里的b
this的指向问题
this只有在函数被执行时才能确认
箭头函数中的this是在定义函数的时候就确定了,而不是在执行函数时确定
|
|
|
|
|
|
|
|
数组中的this
|
|
arr0 等同于 arr.0() ,因此 this 指向arr
箭头函数中的this
|
|
异步中的this
|
|
js类型转换
|
|
6 个falsy值
0、NaN、’’、false、null、undefined
|
|
正则表达式
号码段为131到139的11位手机号的验证
|
|
用正则实现string.trim()去除首尾空格
|
|
正则判断url
匹配邮箱
除了用正则,还可以用什么来匹配邮箱?
前端做了表单验证后,后端还需要再验证一遍吗?
把yyyy-mm-dd格式,替换成mm/dd/yyyy怎么做?
正则表达式中,括号的用法
变量提升
在进入一个执行环境后,先把 var 和 function 声明的变量前置, 再去顺序执行代码
|
|
|
|
|
|
|
|
|
|
|
|
setTimeout异步题
|
|
|
|
数组api
forEach,map,filter,some,every
slice和splice
伪数组转数组
|
|
对象api
Object.assign是干嘛的
ES6
ES6新增的数据类型有哪些?
- Set:类似于数组,但Set中不允许出现重复的元素
- Map:类似于对象,但Map的key可以是任何数据类型
解构赋值
用ES6解构的方式,将下面代码中的obj.name赋值给n,obj.age赋值给a
|
|
var,let,const
- var声明的变量,无块级作用域,且存在变量提升现象,可以重复声明;
- let声明的变量,有块级作用域,不存在变量提升,不能重复声明;
- const声明的是常量,如果是基本类型则不能修改,如果是引用类型可以修改。1234567//let不能重复声明let a=1;let a=2; //报错 'a' has already been declared//const声明的变量,基本类型的不能更改,引用类型的可以更改const obj={x:1}obj.x=2;
算法题
快速排序https://segmentfault.com/a/1190000009426421
时间复杂度:O(NlogN)
空间复杂度:O(logN)
稳定性:不稳定
选择排序https://segmentfault.com/a/1190000009366805
希尔排序https://segmentfault.com/a/1190000009461832
冒泡排序
堆栈http://juejin.im/entry/58759e79128fe1006b48cdfd
队列
链表
递归https://segmentfault.com/a/1190000009857470
编码题
用js实现一个随机打乱数组顺序的函数
|
|
千分位标注,使得1234567变成1,234,567
|
|
手写发布订阅
|
|
编写一个函数,获取最大值
|
|
sort排序
|
|
节流,始终以均匀的流速出结果
疯狂点击,始终以每2s的速度打印出1
|
|
另一种:
防抖,当有下一个事件时,前一个事件取消
疯狂点击,不打印出结果;不点击时才打印出结果
|
|
递归实现杨辉三角
假设输入3,输出[[1],[1,1],[1,2,1]]maximum subarray,求数组中,最大连续子数组的和
|
|
代码运行结果题
|
|
变量提升,函数作用域
有了私有属性,则公共属性失效
|
|
知识点:arguments 和 apply的用法
|
|
|
|