您必须了解这JavaScript函数

您必须了解这14个JavaScript函数

在进行任何JavaScript研究之前,您应该应该能够手动理解和编写这些功能。

1、确定任何对象的特定类型

众所周知,JavaScript中有六种原始数据类型(布尔,数字,字符串,空值,未定义,符号)和对象数据类型。但是您知道对象数据类型可以细分为许多种子类型吗?对象可以是数组,函数,映射等。如果要获取对象的特定类型,该怎么办?
ECMAScript 规定了以下的规则:
在这里插入图片描述
对于不同的对象,调用Object.prototype.toString()时将返回不同的结果。

例:

Object.prototype.toString.call('Hello World');
Object.prototype.toString.call(1);
Object.prototype.toString.call(function(){})
Object.prototype.toString.call({})
Object.prototype.toString.call(Object.create(null))
Object.prototype.toString.call(Symbol())
Object.prototype.toString.call(/aa/)
Object.prototype.toString.call(+(new Date()))
Object.prototype.toString.call((new Date()))
Object.prototype.toString.call(null)
Object.prototype.toString.call()
Object.prototype.toString.call(void(0))

依次输出

"[object String]"
"[object Number]"
"[object Function]"
"[object Object]"
"[object Object]"
"[object Symbol]"
"[object RegExp]"
"[object Number]"
"[object Date]"
"[object Null]"
"[object Undefined]"
"[object Undefined]"

此外,Object.prototype.toString()的返回值始终为’ [object ’ +’ tag ’ +’ ] ’ 的格式。如果只需要中间标记,则可以通过正则表达式或String.prototype.slice()删除两侧的字符。

"[object Undefined]".slice(8,"[object Undefined]".length-1)

输出

"Undefined"

2.缓存功能计算结果

如果有这样的功能:

函数compute(str){
    //假设函数中的计算非常耗时
    console.log('2000过去了')
    返回“结果”
}

我们要缓存函数操作的结果。以后调用时,如果参数相同,则将不再执行该函数,但是将直接返回缓存中的结果。我们能做什么?

例:

在这里插入图片描述

3.实现Array.prototype.map

这是JavaScript中有用的内置方法,但是您应该可以自己实现此功能。

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

Array.prototype.selfMap = selfMap;

console.log([1,2,3].selfMap(val=>val*2))

输出

[2, 4, 6]

4.实现Array.prototype.filter

这是JavaScript中有用的内置方法,但是您应该可以自己实现此功能。

function  selfFilter(fn,context) {
    let arr =Array.prototype.slice.call(this);
    let filterArr = new Array();
    for(let i =0; i<arr.length; i++){
        if(!arr.hasOwnProperty(i)) continue;
		fn.call(context,arr[i],i,this) && filterArr.push(arr[i])
    }
    return filterArr;
}

Array.prototype.selfFilter = selfFilter;

console.log([1,2,3,4,5,6].selfFilter(val=>val>2))

输出

[3, 4, 5, 6]

5.实现Array.prototype.some

这是JavaScript中有用的内置方法,但是您应该可以自己实现此功能。

function  selfSomer(fn,context) {
    let arr =Array.prototype.slice.call(this);
    if(!arr.length) return false;
    for(let i =0; i<arr.length; i++){
        if(!arr.hasOwnProperty(i)) continue;
        let result = fn.call(context,arr[i],i,this)
        if(result) return true;
    }
    return false;
}

Array.prototype.selfSome = selfSomer
console.log([1,2,3,4,5,6].selfSome(val=>val%2==0))

输出

true

6.实现Array.prototype.reduce

这是JavaScript中有用的内置方法,但是您应该可以自己实现此功能。
原理同 some;这里不做具体编码

7.实现Array.prototype.flat

这是JavaScript中有用的内置方法,但是您应该可以自己实现此功能。

const selfFlat3 = (depth = 1)=>{
    let arr =Array.prototype.slice.call(this);
    if(depth === 0) return arr;
    return arr.reduce((pre,cur)=>{
        if(Array.isArray(cur)){
            return [...pre,...selfFlat3.call(cur,depth-1)]
        }else{
            return [...pre,cur]
        }
    },[])
}
Array.prototype.selfFlat = selfFlat3
[1,[2,3],[4,5],[6],[7,8]].selfFlat();

输出

[1, 2, 3, 4, 5, 6, 7, 8]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值