自检:前端知识清单——语法和API

2019-10-02  本文已影响0人  极奏

前言

题目来自ConardLi的blog
写的是自己的题解,水平有限,所以仅供参考
代码会整合在github,觉得有帮助就给个star吧~

正文

一、Javascript基础

语法和API

1、理解ECMAScript和JavaScript的关系

ECMAScript是JavaScript的规范,JavaScript是ECMAscript的体现

2、熟练运用es5、es6提供的语法规范

ES6:

不能被增加,我们可以用Object.preventExtensions来实现
不能被增加和删除,我们可以用Object.seal来实现
不能被修改,我们可以用Object.freeze来实现,但是Object.freeze只能作用一层,我们需要通过递归调用

ES7:
Array.prototype.includes()

const arry = ['xiaoMing','xiaoHong','xiaoLan']
arry.includes('xiaoMing')   //true

指数操作符
**

console.log(Math.pow(2,10))  //1024
console.log(2**10)  //1024

ES8:

const values=Object.values(obj1);
console.log(values);//[1, 2, 3]
for(let [key,value] of Object.entries(obj1)){
    console.log(`key: ${key} value:${value}`)
}
//key:a value:1
//key:b value:2
//key:c value:3
const obj = {
    name: 'Jine',
    get age() { return '18' }
};
Object.getOwnPropertyDescriptors(obj)

3.熟练掌握JavaScript提供的全局对象(例如Date、Math)、全局函数(例如decodeURI、isNaN)、全局属性(例如Infinity、undefined)

全局对象:

全局函数:

全局属性:

4、熟练应用map、reduce、filter 等高阶函数解决问题

map实现

const arr = [1, 2, 3, 4]

arr.push(5)

Array.prototype.selfMap = function (callback, context) {
    let arry = Array.prototype.slice.call(this)
    let mapArry = Array()
    for (let i = 0; i < arry.length; i++) {
        if (!arry.hasOwnProperty(i)) {
            continue
        }
        mapArry[i] = callback.call(context, arry[i], i, this)
    }
    return mapArry
}

const result = arr.selfMap(value => value + 1)

const arry = [1, 2, 3, 4]

arry.push(5)

Array.prototype.selfFilter = function (callback, context) {
    let filterArry = Array()
    let arry = Array.prototype.slice.call(this)
    for (let i = 0; i < arry.length; i++) {
        if (!arry.hasOwnProperty(i)) {
            continue
        } else {
            callback.call(context, arry[i], i, this) ? filterArry.push(arry[i]) : filterArry.push()
        }
    }
    return filterArry
}

const result = arry.selfFilter(value => value % 2 === 0)

reduce接受两个参数,一个是回调函数,另一个是初始值。

const finalVal = oldArray.reduce((accumulator, currentValue, currentIndex, array) => {
  ...
}, initalValue)

reduce实现

const arry = [1, 2, 3, 4]

Array.prototype.selfReduce = function (callback, initialValue) {
    let arr = Array.prototype.slice.call(this)
    let res
    let startIndex
    if (initialValue === undefined) {
        for (let i = 0; i < arr.length; i++) {
            if (!arr.hasOwnProperty(i)) {
                continue
            } else {
                startIndex = i
                res = arr[i]
                break
            }
        }
    } else {
        res = initialValue
    }
    for (let i = ++startIndex || 0; i < arr.length; i++) {
        if (!arr.hasOwnProperty(i)) {
            continue
        } else {
            res = fn.call(null, res, arr[i], i, this)
        }
        return res
    }
}

5、setInterval需要注意的点,使用setTimeout实现setInterval

关于setInterval容易造成内存泄漏的说法,是由于使用者没有清除计时器造成的,setInterval不背这个锅。

实现setInterval

const mySetInterval = (cb, time) => {
    const fn = () => {
        cb() // 执行传入的回调函数
        setTimeout(() => {
            fn() // 递归调用自己
        }, time)
    }
    setTimeout(fn, time)
}

mySetInterval(() => {
    console.log(new Date())
}, 1000)

6、JavaScript提供的正则表达式API、可以使用正则表达式(邮箱校验、URL解析、去重等)解决常见问题

API:

const result = "2,3,5".replace(/(\d+),(\d+),(\d+)/, "$3=$1+$2")
console.log(result)

解决常见问题:
暂时不会

7、JavaScript异常处理的方式,统一的异常处理方案

统一异常处理:
toast,alert

上一篇下一篇

猜你喜欢

热点阅读