String、Number、Boolean、Object 另见文章:简单类型与对象(复杂类型)的区别,以下只对 Array 和 Function 进行讲解
window.Array 全局对象(也是函数)
- Array(3) // {length:3}
- Array(3,3) // [3,3]
- new Array(3) // {length:3}
- new Array(3,3,) // [3,3]
由结果可知 Array 加不加 new 结果都一样
Array 的更多用法见 Array MDN
window.Function 全局对象(也是函数)
- Function('x','y','return x+y')
- new Function('x','y','return x+y')
由结果可知 Function 加不加 new 结果都一样
这里简单说一下 function 与 Function 的区别:
- function 是一个关键字,例如 if、else、var 等
var 声明一个变量 a,例如var a = 1
function 声明一个函数 f,例如function f(){}
- Function 是一个全局对象(函数对象)
window.Object
window.Function
声明一个函数对象 f,例如var f = new Function('x','y','x+y')
函数的声明方法
- 具名函数
function f(x,y){
return x + y
}
- 匿名函数 + var
var f
f = function(x,y){
return x+y
}
- 具名函数 + var
var f1
f1 = function f2(x,y){
return x+y
}
console.log(f2) // undefined
console.log(f1) // ƒ f2(x,y){ return x+y }
- window.Function + var
var f
f = new Function('x','y','return x+y')
JS 中数组的本质
人类理解:数组就是数据的有序集合
JS理解:数组就是原型链中有 Array.prototype 的对象
数组和对象的区别:
array.__proto__ = Array.prototype
object.__proto__ = Object.prototype
即数组和对象分别对应的原型(共用属性)不同
数组本质上是一个拥有特殊原型链的对象,数组之所以是数组,并不是因为它本身是数组,而是因为我们遍历的时候把这个对象当做数组来进行遍历(用数字下标进行遍历)
伪数组
定义:
- 有 0,1,2,3,4,5...n,length 这些 key 的对象
- 原型链中没有 Array.prototype
这样的对象就是伪数组
目前知道的伪数组有
- arguments 对象(打印出函数执行时的参数)
- document.querySelectAll('div') 返回的对象
数组的 API
- Array.prototype.forEach
理解:forEach 会遍历['a','b','c']这个数组,对数组中的每一项都调用 function(value,key){ console.log(value,key) } 这个函数(调用3次),并且每次在调用这个函数时会传入两个参数,分别是 value 和 key,最后打印出3组不一样的value 和 key。
问:function forEach(array,x){ })
传了 array 和 x 两个参数,可为什么
a.forEach(function(value,key){ })
只用传 function(value,key){ }
(相当于参数 x )这一个参数就可以对 a 这个数组进行遍历呢?
答:可以将 a.forEach( function(){} )
理解为a.forEach.call( a,function(){} )
,这里数组 a 传入后实际上是用 this 进行获取的
问:for i 循环和 Array.prototype.forEach 都可以遍历数组,请问它们之间的区别是什么?
答:for 是关键字,不是函数;Array.prototype.forEach 是一个函数。
for 循环可以 break 和 continue;Array.prototype.forEach 不支持 break 和 continue。
- Array.prototype.sort
只有 a.sort() 会改变自身
- Array.prototype.join
-
Array.prototype.concat
contcat 表示合并
concat -
Array.prototype.toString
返回一个字符串,表示指定的数组及其元素
- Array.prototype.map
map 表示映射
- Array.prototype.filter
filter 表示过滤
- Array.prototype.reduce
reduce 表示减少、压缩
其他 API 见 Array MDN
网友评论