js数组

Array 是一个全局对象

let a = ['a','b'] 等价于 let b = new Array('a','b')

image.png

var a =Array(3) 和 var a = Array(3,3) 两者的区别
一个是创建一个长度为3的数组
一个是创建一个数组,包含两个元素3,3 长度为2

var a = new Array(3) 也能创建一个长度为3大的数组


js几种数据类型的函数加不加new的区别

image.png

普通类型,不加new就是加数据转换成相应的数据类型,加new就是生成一个对象
复杂类型,加不加new都一样,都是生成一个对象


function

var f1 = function(a,b){return a+b)
var f2 = new Function('a','b','return a+b') 等价
image.png

function 和 Function 的区别(不好意思,看到之前我也很迷糊)
function 是一个关键字 if else var fucntion
Function 是一个全局对象
var 声明一个变量 var a = 1
function 声明一个函数 function f(){}
window.Object
window.Function 对象
两种声明函数的方式
1.function f(){}
2.var f = new Function('x','y','return x+y')
//变种 var f = function(x){} => var f ; f=function(x){}
字符串 String
没有string的关键字
var s = new String()


Array

什么是数组:
“抽象” 按次序排列的一组值
“js” 用Array构造出来的对象

image.png

很经典

console.dir(Array) 可以显示Array的层级结构


image.png

数组和对象的本质区别

image.png

他两最大的不同就是 _ _ proto_ _ 的指向不一样,数组指向的是Array.prototype 而对象的 - - proto - - 指向的是Object.prototype

伪数组:原型链中没有Array.prototye

arguments 就是一个伪数组


数组API

  1. forEach 无返回值

a = ['a','b','c','d']
a.forEach(function(x,y,z){
  console.log('value',x)
  console.log('key',y)
  console.log('Array',z)
})
image.png

模拟Array.forEach

function forEach(array,x){
  for(let i=0;i<array.length;i++){
    x(array[i],i);
  }
}

forEach(['a','b','c'],function(value,key){
  console.log(value,key)
})

/////////数组的forEach不同之处就在于,把array放到前面调用方法了

var arr = ['e','f','g']

arr.forEach(function(value,key){
  console.log(value, key)
})
image.png

为什么自定义的forEach传入了两个参数,而Array的forEach函数只传入一个值??

image.png

‘一般情况下都把call()和this省略了,其实是存在的,所以,Array的forEach函数本质上也是传入了两个参数’


image.png

上面的回答牵强了一些,下面这个比较好理解,this 调用了本身,不需要传入参数


2.Array.sort() 快排 改变数组
排序,默认从小到大

要添加一个参数来控制排序方向,是从大到小还是从小到大

//Array.sort(function(x,y){return x-y})

var a = [1,3,2,5,4]
a.sort(function(x,y){return x-y})
//[1,2,3,4,5]

比较对象


image.png
var chengji = {小明:88,小红:75,小王:99}
undefined
a=['小明','小红','小王']
(3) ["小明", "小红", "小王"]
a.sort(function(x,y){return chengji[x]-chengji[y]})
(3) ["小红", "小明", "小王"]

3.Array.join() 数组元素拼成字符串

[1,2,3].join()
"1,2,3"
[4,5,6]+''
"4,5,6"

4.Array.concat() 数组拼接

[1,2,3]+[4,5,6]
"1,2,34,5,6"
[1,2,3].concat([4,5,6])
(6) [1, 2, 3, 4, 5, 6]

利用concat 复制一个出一个新的数组,concat会返回一个新的数组

var a =[1,2,3]
undefined
var b = a.concat()
undefined
a
(3) [1, 2, 3]
b
(3) [1, 2, 3]
a===b
false
var c = a
undefined
c
(3) [1, 2, 3]
c === a
true

4.Array.map() 遍历的效果和forEach一样,但是forEach没有返回值,而map会把每一个值经历过函数后收集起来组成一个新的数组并返回

a
(3) [1, 2, 3]
a.forEach(function(x,y,z){return x*2})
undefined
a.map(function(x,y,z){return x*2})
(3) [2, 4, 6]
a.map(value => value*2)
(3) [2, 4, 6]

5.Array.filter) 过滤 不改变原数组

var a = [1,2,3,4,5,6,7,8,9,10]
undefined
a.filter(function(value){return value>5})
(5) [6, 7, 8, 9, 10]
a
(10) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

6.Array.reduce()

a
(10) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
a.reduce((prev,curr) => prev+curr,0)
55

reduce(function(prev,curr){ return prev},initial)

reduce 两个参数,第一个是函数,第二个是初始的值,所以第一个prev是initial
函数接受两个参数,第一个是前一次运算的结果,第二个是当前遍历的元素

用reduce 实现map

//map 用 reduce实现
undefined
a
(10) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
a.map(function(x,y){return x*2})
(10) [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
a.reduce(function(arr,n){ arr.push(n*2);return arr},[])
(10) [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]


//filter 用 reduce 实现
undefined
a
(10) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
a.reduce(function(arr,n){ if(n>=5){arr.push(n)} return arr},[])
(6) [5, 6, 7, 8, 9, 10]
a.filter(function(x,y){ return x>=5 })
(6) [5, 6, 7, 8, 9, 10]
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • Array -MDNwindow.Array 全局对象(也是函数)基本用法:var a = Array(3) /...
    半斋阅读 354评论 0 0
  • 由于最近都在freecodecamp上刷代码,运用了很多JavaScript数组的方法,因此做了一份关于JavaS...
    2bc5f46e925b阅读 1,960评论 0 16
  • 我想做一个自己的原创微信公众号。在这里我可以表达自己的想法,可以写理财方面的文章,可以跟大家互动,获得赞赏,赚钱。...
    陈敬Chris阅读 611评论 1 51
  • 2017年8月17日,如是家人李建英,第3天种种子日志 发心:我今不是为了我个人而闻思修行,而是为了六道轮回一切如...
    萌豆妈妈_李建英阅读 297评论 1 4
  • 经营距离远近,影响到生产经营的效果,产品的质量、服务的质量。 说到质量,毋庸致疑我们会谈到管理,下面的故事对于我们...
    Z老三阅读 527评论 0 0