随笔1

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"]