JavaScript—原生函数

165 阅读1分钟

map()

map是Array原型中的一个方法:将原数组中的每一个元素传递给一个函数,然后返回一个新数组。上代码:

//现我想使用map函数记录每个元素,应将console.log作为传参
[1,2,3,4,5].map(console.log)

每次console.log都记录了索引和完整数组,而不仅仅是值。经上所述,得:在map()函数中,每次迭代都有三个参数:currentVal、currentIndex、array。

//上面例子等同于
[1,2,3,4,5].map(
    (val,index,array) => console.log(val,index,array)
)

parseInt()

parseInt()有两个参数:stringradix(进制),如果radix为0或假值,则默认进制基数为10。

parseInt('11');             =>11
parseInt('11',1);           =>NaN,在进制基数为1的系统中,任何数都输NaN
parseInt('11',2);           =>3,2进制中符号11表示数字3
parseInt('11',16);          =>17
parseInt('11',undefined);   =>11
parseInt('11',0)            =>11

题1:
['1','7','11'].map(parseInt)返回什么,为什么?

参考

push()

Array的push底层实现依赖于数组的length属性

//push函数直接将传参赋值给obj[length]位置,然后改变length
Array.prototype.push = function(rest){
    for(var i = 0;i<arguments.length;i++){
        this[this.length++] = arguments[i]
    }
    return this.length
}
Array.prototype.push = function(...rest){
    this.splice(this.length,0,...rest);
    return this.length;
}

题2:
var obj = {
    '2':3,
    '3':4,
    length:2,
    push:Array.prototype.push
}
obj.push(1);
obj.push(2);

debounce

throttle

答案

题1

返回:

第一次迭代:('1',0,array)=>{parseInt('1',0)},10进制下的符号'1'值是1
第二次迭代:('7',1,array)=>{parseInt('7',1)},进制1下任何符号皆为NaN
第三次迭代:('11',2,array)=>{parseInt('11',2)},2进制下符号'11'值是3

题2

参考

未完。。。本着学习和总结的心态,若文中有什么问题或者其他想法请大家指出