成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

js基礎(chǔ)常用知識點由淺入深整理篇

Zack / 1298人閱讀

摘要:因為同一時間,只能處理一個異步,這又牽扯到單線程問題了。然后控制臺默默打印了個目前前端,異步主要為前后端交互以及定時器,僅僅說前端,如果說的話,還有文件讀取等其他的方面會異步。

此篇文章完全按照我個人理解去寫。

1.何為JS

先說說js干啥的。不負(fù)責(zé)點說,js就是操作瀏覽器的。

有人可能說nodeJS,nodeJS嚴(yán)格意義上只能說是用的ES,因為他沒有dom ,也沒有bom。

簡單點說,js = EcmaScript + dom + bom

那么就引申到EcmaScript, dom, bom;
EcmaScript 簡稱 es, 是一種腳本語言,也就是javaScript 語法的依據(jù),或者說標(biāo)準(zhǔn)。jS是在es的基礎(chǔ)上做了一些擴(kuò)展。
而 常說的es6 就是 第六版 EcmaScript,正式發(fā)行與2015年,所以es6 往往也稱為 es2015。

dom 一般就是節(jié)點,而bom 就是瀏覽器對象。
節(jié)點很好理解,就是div之流,而 瀏覽器對象也很好理解,就是url什么的。

然后說說js單線程的事情,線程和進(jìn)程這個大家自行查詢,網(wǎng)上有很簡潔清晰的一些描述,我高考語文不及格,不如別人說的清楚。只說單線程的運(yùn)行模式。

2.單線程

單線程是從上至下運(yùn)行的。目前我所知的唯一能擺脫這個順序的就是異步。

3.異步

異步的原因如果不專業(yè)點說,就是因為瀏覽器只是js的宿主,它并不是單線程的。

我曾經(jīng)傻乎乎地想利用異步來實現(xiàn)多線程的效果,果不其然呀,我想太多了。

因為同一時間,js只能處理一個異步,這又牽扯到單線程問題了。

異步相當(dāng)于只是瀏覽器借了塊地兒給js,最后運(yùn)行還得跑到j(luò)s里面來。
說說我當(dāng)時跑的多異步代碼呀。

let i = 0;
for(let n = 0; n < 10; n ++) {
    setTimeout(function(){while(i < 10000) {
    console.log("this is " + n +" async");
    i ++;
    }})
}

然后控制臺默默打印了10000個 this is 0 async

目前前端,異步主要為 前后端交互 以及 定時器,僅僅說前端,如果說nodeJS的話,還有文件讀取等其他的方面會異步。

回調(diào)函數(shù)

回調(diào)函數(shù)就是寫在異步方法里面的function,其原理是利用了js的單線程,異步完成-》異步處理-》處理回調(diào)函數(shù),所以一般回調(diào)函數(shù)都是寫在異步的最后。

比如封裝一個$.ajax

 function requestApi(url, method, data, cb) {
     $.ajax({
         url: url,
         type: method,
         data: data,
         success: function(res) {
             if(res.code === 1) {
                 cb(res.data);
             }
         }
     })    
 }

 然后就可以很瀟灑地寫一個,request("apiUrl", "get", {}, function(data){console.log(data)});

ajax 看著嫌麻煩的話,看定時器版本的

function callback(data){ console.log(data)};

setTimeout(function(){var i = 3; callback(i)}, 1000);

扯一句: nodeJS的高并發(fā)就是用異步來實現(xiàn)的。

然后說一下JS的基本用法。

JS的分基本數(shù)據(jù)類型 Number,String,Boolean,Undefined,Null,Symbol和 復(fù)雜數(shù)據(jù)類型 Object

所以不要再說JS中萬物皆對象了,那個就是欺騙新手的。
有人可能要說 a = "123";a.length = 3; a 明明也是一個對象,因為有l(wèi)ength 這個屬性。
兩年前我也是這么認(rèn)為的,實則不然。
a 就是一個 字符串 "123" ,之所以可以寫a.length 是因為弱類型語言對玩家們要求比較寬松,當(dāng)你寫a.length 的時候,會立刻給a包裝一個臨時對象new String(a),然后去調(diào)用這個臨時對象的length,然后調(diào)用完成再拋掉。

Number不用講了,就是數(shù)字,幼兒園就開始學(xué)的。
String 也不用講了,就是字符,幼兒園估計也開始學(xué)了。
Boolean 是布爾值,除了true就是false,可以看做開關(guān)。
Undefined 是一個特殊的類型,表示沒有被賦值。這個要區(qū)別于 not defined,undefined表示,可以有,沒賦值, not defined, 表示 沒有被定義,簡稱未定義。
Null表示空對象,是一個比較牛逼的對象。
symbol通俗點講吧。就是...symbol(1) 不等于 symbol(1),這話意思就是,每一個symbol都是唯一的,即便里面?zhèn)髦狄粯印?br>Object 對象,或稱引用類型,區(qū)別于基礎(chǔ)對象的是在于內(nèi)存方面,找個時間寫js非基礎(chǔ)語言分析的時候,再詳細(xì)說,如果需要了解,請自行查詢,這個涉及到一些指針,內(nèi)存方面的問題,雖然本人理解得很到位,但是高考語文不及格,解釋起來比較費(fèi)勁,一般情況下我都去畫畫解釋。

常用的對象方法(String 對象,Array 對象, 還有字典);
String對象 區(qū)別于 string ,string 是字符串,string對象是Object,具體解釋可以看上面的

這里假設(shè) a  = "123456", b = "1|2|3|4"
charAt:用法 a.charAt(1) // 2 相當(dāng)于 a[1]
split :用法 b.split("") //[1,2,3,4] 表示拆分,split 的括號里面寫拆分依據(jù)
replace: 用法 b.replace(/|/g, "")// 1234 表示替換,一般情況下兩個參數(shù),前面的是一個正則,表示需要篩選的內(nèi)容,后面的是替換內(nèi)容或者處理方法,這個方法是string對象里面最牛逼的方法,牛逼到正則玩得溜就可以批處理很多東西,正則的話,我有寫過一個簡版教程,勉強(qiáng)能看一下。
indexOf:用法 a.indexOf(3)// 2 尋找滿足條件的第一個字符串的位置
lastIndexOf:用法 和a.lastIndexOf(3)//2 意思和indexOf相反,是最后一個的位置

注意: string 所有的方法均不會改變原string對象,也就是說,所有的提取,都需要一個新的變量去接受,比如 xx = a.chartAt(1);

Array 對象 簡稱數(shù)組 實質(zhì)是也是一個對象,索引為0 ~ n
開發(fā)中用的最多的對象,常用方法
假設(shè) arr = [0]; arrs = [1,2,3,4,5]//語法糖,空數(shù)組

push:用法 arr.push(1)// 往尾部新增數(shù)據(jù),arr 會變成[0, 1] 并且返回數(shù)組長度 ,返回1 的意思就是,加入 c = arr.push(1)。 c的值為 1
pop: 用法 arr.pop()// 從尾部提取數(shù)據(jù),arr會重新變成[0], 并且返回1
unshifit: 用法 arr.unshift(1)// 往頭部新增數(shù)據(jù),arr變成[1, 0],并返回 數(shù)組長度
shift: 用法 arr.shift(1)// 從頭部提取數(shù)據(jù),arr 變成 [0], 并返回1
join: 用法 arrs.join("|")// 拆分并以|區(qū)別 ,返回 1|2|3|4|5
concat: 用法 arr.concat(arrs)// 合并,合并內(nèi)容可以是各種類型數(shù)據(jù),這里返回 [0,1,2,3,4,5]
find:用法 arrs.find( data => data > 3) // 返回4 表示第一個滿足條件的
fingIndex: 用法 arr.findIndex(data => data > 3) 返回 3 表示第一個滿足條件的數(shù)字的索引
Index 和 lastIndex 和 string 用法相同
some: 用法 arrs.some(data => data > 3) // 返回true 或者 false ,表示有沒有滿足條件的,如果有的話,返回true,

這個some和 find 操作方面比較騷氣,一般配合其他操作,之所以說操作,是因為他一旦判斷到有,就會立即停止后面的遍歷,如果這里寫
arrs.some(data => {console.log(data);return data > 3}; //1 2 3 4 不會去打印5,可以用于break 操作
forEach: 用法 arrs.forEach(data => console.log(data));//1 2 3 4 5 類似于批處理,好像不能break
,無返回值
map: 用法和forEach 一樣,但是會有返回值,把批處理的方法每一次結(jié)果封裝成數(shù)組返回,如果處理中不寫return ,則返回一堆[undefined, undefined]
reduce: 這個方法比較復(fù)雜,一共兩個參數(shù),前面是方法,后面是初始值(可以不寫),前面的方法需要倆個參數(shù)。簡單點說呀,就是從默認(rèn)值或者從數(shù)組第一個值(取決于有沒有默認(rèn)值)每次處理兩個值,這兩個值呢,
第一個是上一次處理完成返回的值,第二個是新值。
arrs.reduce(function(a, b) {console.log(a, b);return a + b}, 10);
打印就是 // 10 1 , 11 2 , 13 3, 16 4 ,20 5  最后返回一個25

arr 的 pop ,shift,push ,unshift方法會改變原數(shù)組, 其他不改變原來數(shù)組的方法一般還有第三個參數(shù),相當(dāng)于bind ,用來改變this指向

Object ,或者說JSON, 或者說字典
我實在是編不下去了,
形式就是key: value 的格式
主要用于完成數(shù)據(jù)結(jié)構(gòu)與算法。
假設(shè) obj = {age: 3};
常用方法一般都比較牛逼,這里只要會 obj.sex = 0;
obj["age"] //3
Object.keys(obj) // age, sex
Object.values(obj) // 3, 0
其他的方法等我哪天心血來潮寫非基礎(chǔ)知識點的時候再寫吧

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/105732.html

相關(guān)文章

  • javascript知識

    摘要:模塊化是隨著前端技術(shù)的發(fā)展,前端代碼爆炸式增長后,工程化所采取的必然措施。目前模塊化的思想分為和。特別指出,事件不等同于異步,回調(diào)也不等同于異步。將會討論安全的類型檢測惰性載入函數(shù)凍結(jié)對象定時器等話題。 Vue.js 前后端同構(gòu)方案之準(zhǔn)備篇——代碼優(yōu)化 目前 Vue.js 的火爆不亞于當(dāng)初的 React,本人對寫代碼有潔癖,代碼也是藝術(shù)。此篇是準(zhǔn)備篇,工欲善其事,必先利其器。我們先在代...

    Karrdy 評論0 收藏0
  • 前端基礎(chǔ)入門

    摘要:手把手教你做個人火的時候,隨便一個都能賺的盆滿缽滿,但是,個人沒有服務(wù)端,沒有美工,似乎就不能開發(fā)了,真的是這樣的嗎秘密花園經(jīng)典的中文手冊。涵蓋前端知識體系知識結(jié)構(gòu)圖書推薦以及入門視頻教程,全的簡直不要不要的了。 JavaScript 實現(xiàn)點擊按鈕復(fù)制指定區(qū)域文本 html5 的 webAPI 接口可以很輕松的使用短短的幾行代碼就實現(xiàn)點擊按鈕復(fù)制區(qū)域文本的功能,不需要依賴 flash。...

    shinezejian 評論0 收藏0
  • Python各熱門方向常用學(xué)習(xí)、工作網(wǎng)址大全【7000字大總結(jié)】

    摘要:做這一領(lǐng)域的工作,有很多網(wǎng)站能夠起到輔助性的作用。再加上爬蟲相對于其他熱門方向來說,更容易學(xué)。也促使更多人會優(yōu)先選擇學(xué)習(xí)爬蟲。能夠代替手工完成手工無法完成的測試任務(wù),并且可以記錄相關(guān)數(shù)據(jù)及報告。 ...

    linkFly 評論0 收藏0
  • 深入理解js

    摘要:詳解十大常用設(shè)計模式力薦深度好文深入理解大設(shè)計模式收集各種疑難雜癥的問題集錦關(guān)于,工作和學(xué)習(xí)過程中遇到過許多問題,也解答過許多別人的問題。介紹了的內(nèi)存管理。 延遲加載 (Lazyload) 三種實現(xiàn)方式 延遲加載也稱為惰性加載,即在長網(wǎng)頁中延遲加載圖像。用戶滾動到它們之前,視口外的圖像不會加載。本文詳細(xì)介紹了三種延遲加載的實現(xiàn)方式。 詳解 Javascript十大常用設(shè)計模式 力薦~ ...

    caikeal 評論0 收藏0
  • JavaScript - 收藏集 - 掘金

    摘要:插件開發(fā)前端掘金作者原文地址譯者插件是為應(yīng)用添加全局功能的一種強(qiáng)大而且簡單的方式。提供了與使用掌控異步前端掘金教你使用在行代碼內(nèi)優(yōu)雅的實現(xiàn)文件分片斷點續(xù)傳。 Vue.js 插件開發(fā) - 前端 - 掘金作者:Joshua Bemenderfer原文地址: creating-custom-plugins譯者:jeneser Vue.js插件是為應(yīng)用添加全局功能的一種強(qiáng)大而且簡單的方式。插....

    izhuhaodev 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<