久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

一些冷門的JavaScript操作——你真的精通嗎,?

 xpxys99 2018-04-19

大家學習的時候,一開始小白,,然后接觸到進階的東西的時候,,發(fā)現(xiàn)一切得心應手,有的人可能開始說精通了,。突然有一天,,發(fā)現(xiàn)了一些基于很基礎(chǔ)的東西的騷操作,就開始懷疑人生:wtf JavaScript,?

如果沒有遇到被某些東西打擊到或者見識到新的世界,,可能永遠的,,就感嘆:jQuery真好用,我精通jQuery,,精通js,。要不就是,vue,?angular,?react?我都會,,我精通,。

然而,我現(xiàn)在只能說我只是熟悉,,越學發(fā)現(xiàn)越多坑。


一.數(shù)組

類似一些遍歷類型的api:forEach,、map,,可能有人就說了:不就是arr.map(x=>x+1),要是涉及到索引,,那就再來個index,,arr.map((x,index)=>x+index),多簡單是不是

然后,,先拋出一個問到爛的面試題:

['1','2','3'].map(parseInt)

找工作的人,,看過面試題的,都知道結(jié)果是[1,NaN,NaN],,那么為什么會這樣呢,?

首先,map里面可以傳兩個參數(shù):map(對每一個元素都調(diào)用的函數(shù),,該函數(shù)的this值)

而那個每一個元素都調(diào)用的函數(shù),,他傳入的參數(shù)是(current,index,,arr)當前元素(必須),、索引、數(shù)組,。

1.1對parseInt精通了嗎

在這個例子,,對parseInt傳入的就是這三個參數(shù)。

而parseInt這個原生的函數(shù),,他傳入的參數(shù)是(num,,radix):

radix表示要解析的數(shù)字的基數(shù)。該值介于 2 ~ 36 之間,。

如果省略該參數(shù)或其值為 0,,則數(shù)字將以 10 為基礎(chǔ)來解析。如果它以 “0x” 或 “0X” 開頭,將以 16 為基數(shù),。如果該參數(shù)小于 2 或者大于 36,,則 parseInt() 將返回 NaN

一些冷門的JavaScript操作——你真的精通嗎?

那就很明顯了,,對于為什么是[1,NaN,NaN],,其實就是:

一些冷門的JavaScript操作——你真的精通嗎?

另外,,parseInt,,遇到字符串的數(shù)字他會盡量解釋,直到不能解釋就停止,。

一些冷門的JavaScript操作——你真的精通嗎,?

1.2數(shù)組遍歷的api第二個參數(shù)

第二個參數(shù),表示前面那個函數(shù)內(nèi)部的this,,一般不填這個參數(shù),,this就是undefined。而在非嚴格模式下,,undefined就是window:

[1,2,3].forEach(function(x){console.log(this)})//window

我們可以強行把他改成其他的看看:

[1,2,3].forEach(function(x){console.log(this)},Math)//Math

1.3讓Array成精

我們知道,,Array可以直接生成某一個長度元素全是空的數(shù)組:

Array(5)//注意了,5空和5個undefined是不同的

不妨apply一下:

一些冷門的JavaScript操作——你真的精通嗎,?

相當于給新創(chuàng)建的array的屬性直接進行改變

1.4你是不是用循環(huán)生成一個序列,?

生成一個序號數(shù)組:

一些冷門的JavaScript操作——你真的精通嗎?

常規(guī)操作,,沒什么問題,,但是精通jQuery的你會不會用到其他方法呢?

比如:

一些冷門的JavaScript操作——你真的精通嗎,?

對于最后一個結(jié)果,,點開第二個看看

一些冷門的JavaScript操作——你真的精通嗎?

map的那個函數(shù),,傳入了三個參數(shù),,第一個參數(shù)是當前元素??墒菍τ诩恿薱all的,,第一個參數(shù)就是call的this指向了。而map后面的那個參數(shù),,就是this,,也就是后面那個this已經(jīng)把current覆蓋,起到主導作用的也是后面那個參數(shù),。而map的第一個參數(shù)fn,,fn里面的第二個參數(shù)是index,,也就是當前索引。而對于f.call,,第一個參數(shù)是this指向,,第二個參數(shù)以后全是f.call的函數(shù)f所使用的參數(shù)。最后,,就相當于對每一個元素進行,,Number(index),Boolean(index),,String(index),,Object(index)


2.位操作符

基本用法和概念就不說了,自行看文檔,。

2.1字符串轉(zhuǎn)數(shù)字

有全世界都知道的parseInt,,但是我們又可以用簡單一點的方法:

一些冷門的JavaScript操作——你真的精通嗎?

2.2更多的操作

要是我們要隨意得到一個很大的數(shù),,一般就是9999*9999這樣子吧,,而位移操作可以相當于乘上2的n次方:

1<30>

好像沒什么用,先拋出一個需求:隨機生成字符串(數(shù)字+字母)

我知道,,很多人完全不需要思考,直接拿起鍵盤擼:比如生成一個6位隨機字符串

一些冷門的JavaScript操作——你真的精通嗎,?

對于位操作,,就是短短的代碼解決:

一些冷門的JavaScript操作——你真的精通嗎?

首先生成一個大數(shù),,再轉(zhuǎn)進制,。16進制就是0-9加上前面幾個字母,36進制就是0-9加上26個字母,,那么我們可以得到一個穩(wěn)定的生成n位隨機字符串版本:

一些冷門的JavaScript操作——你真的精通嗎,?

另一種方法:(也是基于高進制)

我們可以從Math.random().toString(36)得到一個0.xxx后面有11位小數(shù)的字符串,所以我們只要取第2位以后的就可以了Math.random().toString(36).slice(2)

來一段小插曲

對于追求代碼極其簡短的強迫癥,,看見上面的if -else,,突然想起來平時寫了一大堆if-else實在是不順眼,好的,,除了無腦if和簡短的三元表達式,,我們還有短路表達式:

|| &&

a&&b:a為true,跑到b

a||b:a為false,,跑b,,a為true就取a

一些冷門的JavaScript操作——你真的精通嗎?

如果在實際應用上面,,代碼將會大大簡潔,,但是可能第一次讓別人看難以理解

位操作交換倆整數(shù)

不用中間變量,,加減法實現(xiàn)交換

a = a+b;b = a-b;a = a-b

用位操作:

a ^= b;

b ^= a;

a ^= b;

具體過程可以這樣子證明:

一些冷門的JavaScript操作——你真的精通嗎?

    本站是提供個人知識管理的網(wǎng)絡存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多