知识点

//向window派发一个resize内置事件
window.dispatchEvent(new Event('resize'))
  • ...语法
// 拼接数组
arr1 = [...arr2, ...arr1]
// 复制数组
var arr2 = [...arr]
同arr.slice()
// 传参
function sum(x, y, z) { return x + y + z;}
const numbers = [1, 2, 3];
sum(...numbers)
同sum.apply(null, numbers)
// 展开对象字面量
var obj1 = { foo: 'bar', x: 42 };
var obj2 = { foo: 'baz', y: 13 };
var clonedObj = { ...obj1 }; // Object { foo: "bar", x: 42 }
var mergedObj = { ...obj1, ...obj2 }; // Object { foo: "baz", x: 42, y: 13 }
// 复制对象更简洁;Object.assign()会触发set,展开语法不会。
  • 反转
// 给 s = "the sky is blue",
// 返回 "blue is sky the".
var str = "the sky is blue";
var arr = str.split(' ');
arr.reverse();
arr.join(' ');
  • Event Loop(事件循环)

主线程从"任务队列"中读取事件,这个过程是循环不断的,所以整个的这种运行机制又称为Event Loop(事件循环)。


image.png

上图中,主线程运行的时候,产生堆(heap)和栈(stack),栈中的代码调用各种外部API,它们在"任务队列"中加入各种事件(click,load,done)。只要栈中的代码执行完毕,主线程就会去读取"任务队列",依次执行那些事件所对应的回调函数。

  • 字符串问题:给定两个字符串str1和str2,如果str1和str2中出现的字符种类一样且每种字符出现的次数也一样,那么str1和str2互为变形词。请实现函数判断两个字符串是否互为变形词。
  function isDeformation (str1, str2) {
    if (!str1 || !str2 || str1.length !== str2.length) {
      return false
    }
    let obj = {}
    let arr1 = str1.split('')
    let arr2 = str2.split('')
    for (let i = 0, len = arr1.length; i < len; i++) {
      obj[arr1[i]] ? obj[arr1[i]] += 1 : obj[arr1[i]] = 1
      obj[arr2[i]] ? obj[arr2[i]] += -1 : obj[arr2[i]] = -1
    }
    let aimArr = Object.values(obj)
    return aimArr.every(el => el === 0)
  }
  console.log(isDeformation('abcabcabc', 'bcacbaacb')) // true
  • 数组排序
function createComparisonFunction(propertyName){
    return function(object1, object2){
        var value1 = object1[propertyName];
        var value2 = object2[propertyName];
        if(value1 < value2){ return -1;}
        else  if(value1 > value2){return 1;}
        else{return 0;}
    }
}
var data = [{name : "Zachary", age : 28}, {name : "Nicholas", age : 29}];
data.sort(createComparisonFunction("age"));

你可能感兴趣的:(知识点)