JS循環(huán) 函數(shù) 數(shù)組

for? 循環(huán)

for(初始化; 退出條件; 最終表達式){

//執(zhí)行重復(fù)條件

}

輸出1到10?

for(var i=1 ; i<=10; i++){?

console.log(i);

}

輸出10到1

for(var i = 10 ; i > 1; ?i-- ){

console.log(i);

}

輸出偶數(shù)下標(biāo)字符

var ssc='溜溜你你在在娜娜玉玉蘭蘭為為哎哎';

for(var i = 0 ; i < ssc.length ; i+=2){

console.log(ssc[i] );

}


while ?在表達式為真的情況下循環(huán)執(zhí)行一段代碼

條件表達式會在代碼塊。

var n = 1 ; ? //變量

while(n <= 10){ ? ? ? // n 為真的話份乒, 執(zhí)行下面的代碼

console.log(n);?

n +=1 ;

}

while (true){

//一直被循環(huán)的代碼 ? ? ? ? ? ? ? ? // 死循環(huán) ? 需要break終止

}

while(false){

//永遠不會被執(zhí)行的代碼

}


用while 和indexOf 來統(tǒng)計在字符串中某個字符出現(xiàn)的次數(shù)

var str='To be, or no ttobe, thatisthequestion.';

var count= 0 ;

var pos= 0 ;

while(pos !==-1 ){ ? ? ?// 循環(huán)判斷找不到-1就一直循環(huán)找默,

pos = str.indexOf('e' , pos); ? ? ? ?// 尋找 ?e

if (pos!== -1 ){ ? // 看是否找到了 ?e 找到了則判斷弹谁,

pos+=1; ?//找到了則在找到的位置前面一個下標(biāo)繼續(xù)尋找,

count+=1 ;// 找到了 則在count ?+1 ?

}

}console.log(count); ? ? ? ? ? // 出現(xiàn)了4個


break ??

出現(xiàn)在循環(huán)改览, 用來終止當(dāng)前循環(huán)并淋。

break出現(xiàn)在循環(huán), 用來終止當(dāng)前循環(huán)侥啤。

while(true){ ? ? ? //無限死循環(huán)

let ?numder = prompt('請輸入一個偶數(shù)');//彈出一個可以輸入字符的框

if(number % 2 === 0 ){ ?//如果輸入了偶數(shù)則

break; ?// 跳出循環(huán)

}

}





函數(shù) Function

函數(shù)是一小段可重用的代碼,可用于封裝操作茬故,計算結(jié)果并返回。函數(shù)最有趣的地方在于:它可以調(diào)用它自身蚁鳖,即遞歸磺芭。


函數(shù)聲明

以下是一個計算直角三角形斜邊長的函數(shù)

function xc(a,b){

var ?a2 = a*a;

var b2 = b*b;

return Math.sqrt(a2+b2); ? ? ?// Math.sqrt() 用于開平方

}


有時候參數(shù)是可選的

>['HTML', 'CSS', 'JavaScript'].join()

→"HTML,CSS,JavaScript"

>['HTML', 'CSS', 'JavaScript'].join(' ')

→"HTML CSS JavaScript"


函數(shù)的默認參數(shù)值

調(diào)用函數(shù)時如果沒有給參數(shù)賦值,則參數(shù)值是undefined醉箕。使用=可以給參數(shù)設(shè)置默認值钾腺。ES6

function say(mass){

console.log(mass);

}

function say(mass = 1 ){

undefined

console.log(mass);

}


參數(shù)列表 arguments

在函數(shù)內(nèi)部可通過arguments對象訪問參數(shù)列表,在參數(shù)個數(shù)不確定時一般通過遍歷arguments訪問各個參數(shù)讥裤。

arguments是一個貌似數(shù)組的對象放棒,具有l(wèi)ength屬性,可以通過下標(biāo)訪問元素己英,但沒有數(shù)組的方法间螟。

以下函數(shù)sum()接受任意數(shù)目的(數(shù)字)參數(shù),并返回這些參數(shù)的和。

function suv(){

var result = 0 ;

for ( var i = 0 ; i < arguments.length ; i++ ){? ? ? ? ? //參數(shù)列表 arguments

result += arguments[i];

}

return result

}


函數(shù)返回值

在函數(shù)中使用return返回值厢破。

若函數(shù)中沒有return或只是通過return;結(jié)束函數(shù)的執(zhí)行荣瑟,則函數(shù)的返回值是undefined。

若函數(shù)中包含return且有具體的返回值摩泪,如return a + b;笆焰,則函數(shù)的返回值是return后面的表達式的值。

永遠不要在return和返回值之間添加換行见坑。

當(dāng)返回的表達式較長時嚷掠,你可能會想把它放到下一行。以下代碼會使函數(shù)返回undefined荞驴,

return

(1+2+3+4+5+6+7+8+9+10+11+12+13+14+15);

因為它等價于以下代碼不皆。

return;?

?(1+2+3+4+5+6+7+8+9+10+11+12+13+14+15);

函數(shù)返回值



函數(shù)表達式

函數(shù)表達式



匿名函數(shù)

匿名函數(shù)在 JavaScript 中被廣泛使用,尤其是在監(jiān)聽瀏覽器事件時戴尸。

//瀏覽器窗口大小改變時粟焊,輸出窗口寬高。addEventListener 用于添加事件監(jiān)聽器孙蒙。

window.addEventListener('resize',function() {

console.log(`當(dāng)前窗口寬度:${window.innerWidth}px 高度:${window.innerHeight}px`);

}

);



IIFE

IIFE 全稱 Immediately-Invoked Function Expression项棠,譯作立即執(zhí)行の函數(shù)表達式

創(chuàng)建一個新的函數(shù)作用域

IIFE



函數(shù)作用域

函數(shù)作用域




內(nèi)置函數(shù)

isNaN()

alert()

prompt()

confirm()

console.log()

console.warn()

console.error()

...



函數(shù)VS方法

形如console.log()的函數(shù)更準(zhǔn)確的稱謂是方法挎峦。定義在對象(Object)內(nèi)部的函數(shù)稱為方法香追。

方法的顯著特征是調(diào)用時前面有?.?。


箭頭函數(shù)

箭頭函數(shù)(Arrow Function)ES6比函數(shù)表達式更簡潔且以詞法方式綁定this坦胶。箭頭函數(shù)總是匿名的透典。

》var ?ls = (a,b) => a*b

》ls(4,8)

> 32


> ?var square=x=>x*x;

→ undefined

> ?square(3)

→9

> ? ?['?','!','.'].map((m,i)=>m.repeat(i+1))

→ ?[ "?" , "!!" , "..." ]





數(shù)組?

遍歷數(shù)組

用for循環(huán) 遍歷數(shù)組

var sxs = ['1','2','3','4','5','6','7','8','9','10','11','12'];

for( var i = 0 ; i <sxs.length; i++){

console.log('sssss'+sxs[i])

};

EC5 的遍歷數(shù)組方法 。

forEach ? ? ? ? ?(function(每一個數(shù)組, 每一個數(shù)組的下標(biāo), 列表 ?不常用 ){ ??})

var sxs=['1','2','3','4','5','6','7','8','9','10','11','12'];

sxs.forEach(function(i,l){

console.log(i+(l+1));

})

for ?of ? ?EC6的方法

let ?sxs = ["??","??","??","??","??","??","??","??","??","??","??","??"];

for(let sx of sxs) {console.log(`十二生肖之${sx}`);}


數(shù)組 api


數(shù)組與字符串

split將通過特定符號(如逗號,)隔開內(nèi)容的字符串分拆成一個數(shù)組顿苇。

String.prototype.split()?將通過特定符號(如逗號,)隔開內(nèi)容的字符串分拆成一個數(shù)組峭咒。

"格物致知".split('')?→ ?["格","物","致","知"]

"We is for of split join".split(' ') →? ["we","is","for","of","split","join"]? //按空格來分拆成一個數(shù)組


join將數(shù)組元素連接成一個字符串并返回,數(shù)組本身不會因此改變

Array.prototype.join()將數(shù)組元素連接成一個字符串并返回纪岁,數(shù)組本身不會因此改變凑队。

["we","is","for","of","split","join"].join('') ?//按字符串連接在一起

"weisforofsplitjoin"


["we","is","for","of","split","join"].join(' ')? //按空格連接在一起

"we is for of split join"


數(shù)組API

數(shù)組常用API

判定

Array.isArray() ? ES5方法用于.判斷某個值是否數(shù)組

Array. isArray('') ? ? ? false

Array. isArray([]) ? ? ? true

Array.pretotype.some() ES5 方法是用于判定中是否有? 部分的元素? 通過條件的測試

>[95,85,100,90,82,100,99,98,95].some(score=>score===100)

→true

>['劉備','關(guān)羽','張飛','曹操','孫權(quán)'].some(function(name) {

return name.endsWith('瑜'); })// endsWith方法返回的測試該字符串是否以指定的后綴 結(jié)束, 是的話返回true幔翰, 否的話則返回false

→false

Array.pretotype.every()ES5 方法用于判定數(shù)組的 ? ?所有元素 ? 是否通過了條件函數(shù)的測試

['劉備','劉于','劉飛','劉操','劉奇','劉索'].every(function(name){return name.startsWith('劉');})

// startsWith 方法返回的測試該字符串是否以指定的前綴開始漩氨, 是的話返回true, 否的話則返回false

true

遍歷

Array.prototype.forEach()ES5方法用于遍歷數(shù)組遗增,并將提供的函數(shù)作用在每個元素上

var ls=['蘋果','香蕉','芒果','西瓜'].forEach(function(ll,xx){console.log(`我喜歡吃的水果${xx+1}位是${ll}`);})


修改

Array.prototype.push()方法將一個 叫惊, 或者多個元素添加到 數(shù)組末尾,并返回數(shù)組的最新長度做修。

ls = ['鼠','牛','龍','虎','狗']

ls.push('雞','羊')?

?["鼠", "牛", "龍", "虎", "狗", "雞", "羊"]

Array.prototype.pop()方法將一個 霍狰, 數(shù)組末尾的數(shù)組刪除抡草,并返回數(shù)組的最新長度。 pop 會修改數(shù)組長度

>var ns = ['華為5','iphone 6','iphone 7']

>ns

-['華為5','iphone 6','iphone 7']

>var si = ns.pop()

>si?

?-iphone 7

>ns

['華為5','iphone 6']


Array.pretotype.shift()方法是將數(shù)組的 ?第一個元素刪除 ?蚓耽, 并返回該元素的值渠牲,數(shù)組的長度 length因此改變。

var stas= ['笑','哭','不','得']

stas.shift()

"得"

stas

['笑'步悠,'哭','不'}

Array.pretotype.unshift() 方法是 將一個或多個元素添加到數(shù)組開頭签杈,并返回數(shù)組的最新長度。

var learn = ['CSS','HTML']

learn.unshift('JavaScript')

learn?

['JavaScript','CSS','HTML']



Array.prototype.splice()方法通過刪除現(xiàn)有的元素和 鼎兽, 或添加元素來更改一個數(shù)組答姥。

copyWithin? ? ? ? ? ? ES6的 API? 用來復(fù)制更換某個元素

>var蜀=['劉備','關(guān)羽','張飛'];

→undefined>

蜀.splice(1,0,'諸葛亮','龐統(tǒng)')//諸葛亮龐統(tǒng)先后拜入劉備帳下 ?// ?

→ []

>蜀

→ ["劉備","諸葛亮","龐統(tǒng)","關(guān)羽","張飛"]

>蜀.splice(2,1)//龐統(tǒng)戰(zhàn)死于雒城

→ ["龐統(tǒng)"]>

蜀→ ["劉備","諸葛亮","關(guān)羽","張飛"]

>蜀.splice(2,2,'劉嬋','趙云','廖化')//關(guān)羽張飛先后被殺

→ ["關(guān)羽","張飛"]

>蜀→ ["劉備","諸葛亮","劉嬋","趙云","廖化"]

>蜀.copyWithin(0,2,3).splice(2,1)//劉備去世,劉嬋繼位 ? ? ? //copyWithin(更換的元素,復(fù)制的元素位置,復(fù)制的元素位置到哪的數(shù)字)? ES6的 API? 用來復(fù)制更換某個元素

→ ["劉嬋"]

>蜀→ ["劉嬋","諸葛亮","趙云","廖化"]

排序

Array.pretotype.sort()? 方法對數(shù)組進行排序并返回谚咬,默認排序順序是根據(jù)字符串Unicode碼點

>['c','p','w','g','h','a','b','r']

→["a", "b", "c", "g", "h", "p", "r", "w"]

> [1, 12, 200, 23, 2].sort() ? ? ? ? //數(shù)字排序不了鹦付,需要添加一個函數(shù)來進行排序

→[1, 12, 200, 23, 2]

>[1, 12, 200, 23, 2].sort(function(a,b){return a-b }) //添加函數(shù)表達式,使用A-B择卦, 如果A-B結(jié)果小于0則不變敲长,如果A-B結(jié)果大于0 則更換位置, ? ? 數(shù)字小的排序在前面秉继。數(shù)字大在后面

→[1, 2, 12, 23, 200]


>[1, 12, 200, 23, 2].sort(function(a,b){return b-a }) //添加函數(shù)表達式祈噪,使用B-A則得到和a-b相反

→[[200, 23, 12, 2, 1]

搜索

Array.pretotype.indexOf()方法是用于搜索 查找的元素的下標(biāo)?

映射

Array.pretoty.map()ES5 方法是返回一個新數(shù)組尚辑,新數(shù)組中的每個元素都是映射函數(shù)作用在原數(shù)組元素上的結(jié)果

>[1,2,3,4,5,6].map(function(x){return x*x})

-[1, 4, 9, 16, 25, 36]

>['冷','熱','痛','痛'].map(function(stri){return stri.repeat(3);})

-["冷冷冷", "熱熱熱", "痛痛痛", "痛痛痛"]


歸納

Arrat.pretotype.reduce()

將數(shù)組里的值求和

var sum = [0, 1, 2, 3].reduce(function (a, b) {

return a + b;

}, 0);


var flattened = [[0, 1], [2, 3], [4, 5]].reduce(

function(a, b) {

return a.concat(b);

})? // flattened is [0, 1, 2, 3, 4, 5]


MapReduce

MapReduce是Google提出的一個軟件架構(gòu)辑鲤,用于大規(guī)模數(shù)據(jù)集(大于1TB)的并行運算。 概念“Map(映射)”和“Reduce(歸納)”杠茬,及他們的主要思想月褥,都是從函數(shù)式編程語言借來的,還有從矢量編程語言借來的特性瓢喉。

MapReduce 用于購物車總價結(jié)算

var items = [ ? ? ? //購物車里面的產(chǎn)品價格數(shù)量

{title:'蘋果',price:5,puantity:3 }, ? //產(chǎn)品數(shù)量宁赤,價格

{title:'雪梨',price:8,puantity:6 },

{title:'香蕉',price:6,puantity:8 },

]

console.log(items.map(fruit => fruit.price* fruit.puantity).reduce((a,b)=> a+b ))//使用MapReduce完成購物車總價格計算


篩選

Aray.pretoty.filter() ES5 ?方法返回一個包含滿足條件函數(shù)的數(shù)組元素組成的新數(shù)組

>[1,2,3,4,5,6,7,8,9,10].filter(function(n) {returnn%2===0; })

→ [2,4,6,8,10]

>['王維','劉禹錫','王勃','白居易','王之渙','賀知章','陳子昂'].filter(name=>name.startsWith('王'))

→ ["王維","王勃","王之渙"]



查找

Array.prototype.find()ES6方法返回數(shù)組中第一個滿足條件函數(shù)的元素的值栓票,沒有則返回undefined礁击。

>[2,8,32,7,15,23,36,45].find(x=>x%3===0)

→15

>['劉備','關(guān)羽','張飛','曹操','孫權(quán)'].find(name=>name.endsWith('瑜')) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//endsWith方法返回的測試該字符串是否以指定的后綴 結(jié)束, 是的話返回true逗载, 否的話則返回false

→undefined



s?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市链烈,隨后出現(xiàn)的幾起案子厉斟,更是在濱河造成了極大的恐慌,老刑警劉巖强衡,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件擦秽,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機感挥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門缩搅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人触幼,你說我怎么就攤上這事硼瓣。” “怎么了置谦?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵堂鲤,是天一觀的道長。 經(jīng)常有香客問我媒峡,道長瘟栖,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任谅阿,我火速辦了婚禮半哟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘签餐。我一直安慰自己寓涨,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布贱田。 她就那樣靜靜地躺著缅茉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪男摧。 梳的紋絲不亂的頭發(fā)上蔬墩,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天,我揣著相機與錄音耗拓,去河邊找鬼拇颅。 笑死,一個胖子當(dāng)著我的面吹牛乔询,可吹牛的內(nèi)容都是我干的樟插。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼竿刁,長吁一口氣:“原來是場噩夢啊……” “哼黄锤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起食拜,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤鸵熟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后负甸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體流强,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡痹届,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了打月。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片队腐。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖奏篙,靈堂內(nèi)的尸體忽然破棺而出柴淘,到底是詐尸還是另有隱情,我是刑警寧澤报破,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布悠就,位于F島的核電站,受9級特大地震影響充易,放射性物質(zhì)發(fā)生泄漏梗脾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一盹靴、第九天 我趴在偏房一處隱蔽的房頂上張望炸茧。 院中可真熱鬧,春花似錦稿静、人聲如沸梭冠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽控漠。三九已至,卻和暖如春悬钳,著一層夾襖步出監(jiān)牢的瞬間盐捷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工默勾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留碉渡,地道東北人。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓母剥,卻偏偏與公主長得像滞诺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子环疼,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 工廠模式類似于現(xiàn)實生活中的工廠可以產(chǎn)生大量相似的商品习霹,去做同樣的事情,實現(xiàn)同樣的效果;這時候需要使用工廠模式炫隶。簡單...
    舟漁行舟閱讀 7,766評論 2 17
  • 單例模式 適用場景:可能會在場景中使用到對象淋叶,但只有一個實例,加載時并不主動創(chuàng)建等限,需要時才創(chuàng)建 最常見的單例模式爸吮,...
    Obeing閱讀 2,073評論 1 10
  • 函數(shù)聲明和函數(shù)表達式有什么區(qū)別 (*)解析器會率先讀取函數(shù)聲明,并使其在執(zhí)行任何代碼之前可以訪問望门;函數(shù)表達式則必須...
    coolheadedY閱讀 388評論 0 1
  • Javascript有很多數(shù)組的方法形娇,有的人有W3C的API,還可以去MDN上去找筹误,但是我覺得API上說的不全桐早,M...
    頑皮的雪狐七七閱讀 4,088評論 0 6
  • 《慕僧》 足踏靈性之水,身心 自在輕安厨剪。 一如哄酝,壇城之中 蓮足輕履的兜羅綿。 法喜祷膳,無量無邊陶衅, 誰慕? 誰贊直晨? ...
    娑婆如斯閱讀 756評論 27 73