常见的一些面试题(四)
1.找出数组中最大的值,arr = [7,4,8,1,5]
console.log(Math.max(7,4,8,1,5));
console.log(Math.max.apply(1,arr));
2.封装一个函数,生成n位的随机验证码
function randomCode(num) {
var str = '0-9a-zA-Z';
var arr = '';
for (var i = 0; i < num; i++) {
var n = Math.floor(Math.random() * str.length);
arr += str[n];
}
return arr;
}
3. 请解释DOM事件流?怎么阻止事件冒泡,怎么阻止事件默认行为
事件流:当事件发生的时候,事件在父子节点之间传递的顺序就叫事件流
阻止事件冒泡
event.stopPropagation ? event.stopPropagation() : event.cancelBubble = true;
阻止事件默认行为
event.preventDefault ? event.preventDefault() : event.returnValue = false;
4. 请解释变量提升?
js代码在执行的时候 至少分成2步:
- 预解析: 找var、function, 将var声明的变量, 声明提到最前, 找function声明的函数, 将整个函数存储在内存中
- 逐行解析: 从上到下执行
5. 字符串的方法有哪些,分别的作用?
长度:length
查找:charAt、charCodeAt、indexOf、lastIndexOf
截取:substring、slice、substr
分割:split
替换:replace
转大写:toUpperCase
转小写:toLowerCase
去除空格:trim
中文排序:localeCompare
6. 数组的方法有哪些,分别的作用?
栈:push、pop、unshift、shift
万能:splice
查找:indexOf、lastIndexOf
拼接:concat
截取:slice
拼接成字符串:join
翻转:reverse
排序:sort
迭代:every、some、filter、map、forEach
7. JavaScript对象的几种创建方式?
- 字面量创建
- new关键字创建
- 工厂模式
- 构造函数
- 原型创建
- 混合创建
8. JavaScript对象的几种继承方式?
- 面向对象继承
- 原型链继承
- 对象冒充继承
- 组合继承
- 寄生式组合继承
9. new的时候发生了什么?
- 创建一个空对象
- 将this指向空对象
- 将函数的prototype赋值给对象的__proto__
- 指向函数中的代码,添加属性和方法
- 隐式返回
10. 写出数组排序中的冒泡排序原则以及实现代码
原理:用相邻的两个数字作比较,如果前面的比后面的大,换换位置
var arr = [99, 1, 46, 37, 33, 22, 11, 5];
for (var i = 0; i < arr.length; i++) {
for (var j = 0; j < arr.length - i; j++) {
if (arr[j] > arr[j + 1]) {
var temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
console.log(arr);
11. 写出数组排序中的选择排序原则以及实现代码
原理:拿数组的每一项和当前项后面的每一项做对比,如果当前项比后面项大,互换位置
var arr = [99, 1, 46, 37, 33, 22, 11, 5];
for (var i = 0; i < arr.length; i++) {
for (var j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
var temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
console.log(arr);
- 数组去重
方法一:空数组 判断arr中每个项是否在空数组中存在 不存在追加到空数组
var arr = [1, 2, 2, 3, 4, 1, 5, 2, 6, 8];
var brr = [];
for (var i = 0; i < arr.length; i++) {
if (brr.indexOf(arr[i]) == -1) {
brr.push(arr[i]);
}
}
console.log(brr);
方法二:用arr中的每一项和当前这一项后面的每一项做判断 如果相等 删除后面的
var arr = [1, 2, 2, 3, 4, 1, 5, 2, 6, 8];
for (var i = 0; i < arr.length; i++) {
for (var j = j + 1; j < arr.length; j++) {
if (arr[i] == arr[j]) {
arr.splice(j, 1);
j--;
}
}
}
console.log(arr);
14.有这样一个字符串"http://item.taobao.com/item.html?a=1&b=2&c=&d=xxx&e",要求转化成 {"a":1,"b":2,"c":,"d":xxx,"e":undefined}
/*
a:1
b:2
c:''
d:xxx
e:undefined
*/
var str = "http://item.taonao.com/item.html?a=1&b=2&c=&d=xxx&e";
var arr = str.split('?')[1].split('&');
console.log(arr);
// 新建一个集合
var obj = {};
for (var i = 0; i < arr.length; i++) {
var a = arr[i].split('=');
// 设置值 对象[变量] = 值;
obj[a[0]] = a[1];
console.log(obj);
}
上一篇: Vue的一些常见的面试题(下)
下一篇: 第一天面试题