1.如何牢记call和apply的区别?
apply 是 a 开头,所以参数是数组(arr);
call 是 c 开头,所以参数是逗号隔开(comma);
function add(a, b) {
return a + b;
}
console.log(add.call(null, 1, 2)); // 3
console.log(add.apply(null, [1, 2])); // 3
2.数组去重方法
var arr = [1,2,3,4,2,2,1,'abc',6,'abc'];
a. [...new Set(arr)]
b. function duplicate(arr) {
var dupArr = []
for(var i = 0; i < arr.length; i++) {
if(dupArr.indexOf(arr[i]) === -1) dupArr.push(arr[i])
}
return dupArr
}
duplicate(arr)
3.实现一个快速排序和冒泡排序? 谁的速度更快?
a. 冒泡排序(速度更快一些)
var arr1 = [2, 40, 1, 6, 25, 37,16, 32];
function sort1(arr) {
console.time('bubble1') //开始计算
for(var i = 0; i < arr.length; i++){
for(var j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j+1] ){
let a = arr[j]
arr[j] = arr[j+1]
arr[j+1] = a
}
}
}
console.timeEnd('bubble1') //执行时间
return arr
}
b.快速排序
var arr = [2, 40, 1, 6, 25, 37,16, 32]
function quickSort(arr) {
console.time('bubble');
if(arr.length <= 1) { return arr }
let middleIndex = Math.floor(arr.length / 2);
let middleValue = arr.splice(middleIndex, 1)[0];
let left = [] , right = [];
for(var i = 0;i<arr.length;i++) {
if(arr[i] <= middleValue){
left.push(arr[i]);
} else {
right.push(arr[i]);
}
}
console.timeEnd('bubble');
return quickSort(left).concat([middleValue], quickSort(right))
}
quickSort(arr)
4.截取地址栏参数
var url = 'www.baidu.com?token=123&a=1&b=2';
url = url.split('?')[1]; // "token=1231&a=1&b=2"
url1 = url.split('&'); // ["token=1231", "a=1", "b=2"]
var arr = {};
url1.forEach(function(v, i, ele){
return arr[v.split('=')[0]] = v.split('=')[1]
})
arr; // Object {token: "123", a: "1", b: "2"}
5.如何把get_element_by_id 改为驼峰大小写?
var str = 'get_element_by_id'
str = str.split('_');
strStart = str[0]
len = str.length;
var arr = []
for(var i=1;i<len;i++) {
arr.push(str[i].charAt(0).toUpperCase()+str[i].slice(1))
}
arr = arr.join('')
var str1 = strStart+arr
console.log(str1) // getElementById
6.基础类型
null == undefined ? true : false //true undefined是null衍生出来的
var a; 1+a // NaN
var a; '1'+a //1undefined
7.toString()和valueOf()的作用和区别?
valueOf() 返回最适合该对象类型的原始值
toString() 返回改对象的字符串形式
["1"].toString() // "1"
["1,2,3"].toString() // "1,2,3"
["1"].valueOf() // ["1"]
["1,2,3"].valueOf() // ["1,2,3"]