四、标准库

    上篇文章我们讲了jsd的原型及原型链的概念,以及他们之间的区别。我们知道了js在内存中有一个全局的对象window对象(注意是全局的对象,而不是全局对象)。其中window对象中包含标准库和非标准库,他们的关系如下图:
这里写图片描述
这篇文章就来讲讲window对象中的标注库里面的几个对象。
window标准库包括:
Number对象、String对象、Boolean对象、Array对象、Function对象、Object对象、Math对象、Date对象、JSON对象.RegExp对象。这些对象不仅是对象他们还是构造函数,添加new 关键字即可构造出相对应的实例。
!!这里要讲一些他们的区别:
* 基本类型所对应的标准库里对象使用new 和不适用new 构造出的对象是不一样的
(如:number、string、Boolean)。
这里写图片描述
* 基本数据类型不加new会返回对应类型的常量,加new 会返回对应的包装对象
* 发咋数据类型所对应的对象加不加new构造出对象都是一样的。
注意function是和var一样的用来声明的关键字,而Function则是全局的对象。

1.Array

1.Array是 JavaScript 的原生对象,同时也是一个构造函数,可以用它生成新的数组。
2.数组和对象都是对象,只不过他们的原型不一样
这里写图片描述
3.伪数组:是一个类似于数组的对象。但是其proto不指向Array.prototype(也就是说其原型链中没有Array.prototype这一节点)
目前我们能见到的伪数组:函数参数所存的的arguement伪数组。他的proto直接指向Object.prototype;

1.1 数组的一些方法
1.1.2 静态方法

Array.isArray()
返回一个布尔值,表示参数是否为数组。它可以弥补typeof运算符的不足

1.1.2 实例方法

1 .forEach()

array.forEach(callback(currentValue, index, array){
    //do something
}, this)

2 sort()

arr.sort(function(a,b){
    return a-b  //生序排列
})

例子:

var a=["马云","马化腾","李彦宏"];
var hash={
    "马云":123,
    "马化腾":456,
    "李彦宏":525
    }
a.sort(function(x,y){
    return hash[x]-hash[y];
})

会改变自身
3.arr.join("连接符");
4.arr.concat(arr1);

利用concat复制数组(深复制)

var  arr2=arr.concat();

5.map()

var a= arr.map(function(value,index,arr){
    return value*2;
})

有返回值,返回值为被操作后的新数组;和froEach类似,但forEach没有返回值

7.filter()

arr.filter(function(value.index,arr){
    return value>0;
})

返回一个符合规则的新数组

8.reduce()

arr.reduce(function(pre,cur){
    return pre+cur
},0)

初始化pre=0;
返回一个新数组
reduce的map用法

arr.reduce(function(arr2,cur){
    arr.push(cur**9);
    return arr
},[])

reduce的filter用法

arr.reduce(function(arr1,cur){
    if(cur%2===0){arr.push(cur)};return arr
},[])

2..函数

2.1 函数的声明方式
1.function f (){}   //具名函数
2.var f=function(){} //匿名函数
3.var a=function f(){}  //具名函数赋值
4.var f=new Function("x","y","return x+y") //Window.Function
5.var f =(x,y)=>{return x+y}  //箭头函

var a=(x,y)=>{return x+y};
如果只执行一句话
可以简写为:
var a=(x,y)=>x+y;
如果参数只有一个,可以简写为:
var a= x=>x*x;

2.2 五种函数的name属性

这里写图片描述

2.3 函数的调用

这里写图片描述
f(x,y);不推荐
f.call(undefined,x,y)推荐
**call的第一个参数可以用this得到(this就是call的第一参数)
**call的后面的参数可以用arguments得到
普通模式下,如果this是undefined,则浏览器会让其指向window。
然而this在这里并没有卵用

2.4 调用堆栈

这里写图片描述

3.作用域

这里写图片描述

!!!要特别注意,变量的提升问题,(var声明的变量(var a=0是两步,1.var a;2.a=0;)和function声明的函数)
运行时他们会被优先执行。

这里写图片描述
闭包:如果一个函数使用了他作用域以外的变量,那么这个函数+这个变量就叫闭包。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值