摘要:所以語句也會常常用于終止函數的運行,還有也可以不寫語句,但是會默認返回函數內部的對象中,函數的內部都有一個對象,用來記錄在調用函數時所傳進來的參數,可以說是一個偽數組。里面使用了關鍵字,這個的指向就是使用構造函數創建的對象,也不需要返回對
今天好像是情人節?所以最適合面向對象,JavaScript 也有對象,我們也可以隨時面向對象,方便得很,那怎樣才有對象呢?下面告訴你!
1. 數組數組,字面意思就是一堆數的組合,但是它是有順序的,學了數組就不僅可以存儲一個數據,還可以存儲一堆數據,這就是我們為什么學了簡單數據類型之后還要學數組的原因。
1.1 聲明數組可以看到,數組里面的定義和 python 里的差不多,也可以存儲不同數據類型。獲取數組元素也是一樣通過下標獲取,下標從 0 開始,而且 JavaScript 的數組可以隨意根據下標進行賦值,不管你的數組長度,因為?JavaScript 的數組長度是動態的。
1.2 遍歷數組遍歷數組,根據數組長度可以輕易知道循環次數,所以可以使用 for 循環,獲取數組的長度可以通過?length?屬性進行獲取。
這里有個提高效率的地方,就是在獲取數組的長度時放在了 for 語句的初始化表達式里,而不是放在判斷表達式里,當你這個值需要運算才能獲得的時候,這樣做就可以不用在每次判斷時都需要通過運算獲得,減少運算,也就提高效率了,當然,數組的長度在這里只是一個屬性,不需要運算,放不放在初始化表達式都差不多。
1.3 清空數組JavaScript 這里清空數組簡單粗暴,直接將長度賦值為 0?即可。
1.4 數組小練習找出數組中最大的值
這個直接通過遍歷數組,然后將每個值進行比較即可,很容易。
翻轉數組
這個就是將數組中的元素前后互相替換,也不多說了。
2. 函數當我們需要在對多個數組進行上面的其中練習之一,比如進行尋找最大值,我們總不能每個數組都各自寫一段尋找最大值的代碼,否則這樣子的話代碼的復用性太低了。
函數的出現就是解決這個問題的,函數就是把一段相對獨立的具有特定功能的代碼抽取出來進行封裝,形成一個獨立的個體。當需要多次使用的時候,我們只需要使用函數名調用即可。
2.1 函數的定義函數定義這里有兩種方法,如下:
使用函數聲明,語法為
使用函數表達式,語法為:
上面只是函數的定義而已,并不會去執行,只有你調用函數的時候才會去執行。
2.2 函數調用調用函數的語法也比較簡單,就是函數加上一個括號就行了。
所以當需要多次使用這段功能的時候,就多次調用即可,不需要每次都寫一段相同的代碼。
2.3 函數參數不需要多次寫同一段代碼解決了,但是當有不同的數據內容參與運算時,好像我還需要重復寫呀!就比如前面說的求數組最大值。這個時候就需要我們的函數參數了,函數參數就是解決這個不確定的數據內容的。當我們需要對不確定數據內容進行操作時,只需要在調用函數的時候把數據內容當作參數傳進去即可。
函數的參數定義與調用語法:
形參:在聲明函數時,有些值是固定的,而有些值不是固定的,對于這些不固定的值,我們可以給它們設置參數,但是這個參數不是具體的值,只是一個形式而已,所以叫做形參
實參:在函數聲明設置的形參,我們調用函數就需要傳入對應的參數,而這個參數就是實參。
了解了這個之后,是不是很容易就可以寫出一個求數組最大值的函數了?
咦?上面的我都看明白了,但是?return?那個語句又是什么?return 后面跟的內容就是函數的返回值,當函數運行到這里的時候就會結束函數并且把該值返回給調用處,就相對于一段代碼執行之后的反饋。所以 return 語句也會常常用于終止函數的運行,還有也可以不寫 return 語句,但是會默認返回 undefined
2.4 函數內部的 arguments 對象JavaScript 中,函數的內部都有一個 arguments 對象,用來記錄在調用函數時所傳進來的參數,可以說是一個偽數組。
這個對象可以用于當我們需要傳進來的參數個數不確定時就可以使用這個,就比如求一堆數的和。
2.5 匿名函數匿名函數就是沒有名字的函數,當我們只需要只需要調用一次的話就可以使用匿名函數,或者需要回調函數的時候就會使用匿名函數,至于什么是回調函數,以后遇到了就說,匿名函數聲明如下:
這是將匿名函數賦值給一變量,然后可以通過該變量進行調用,也可以傳參的,除了這樣子調用匿名函數,匿名函數還可以進行自調用。
這里需要注意的是在自調用的時候別忘了定義函數的部分需要加括號括起來。這自調用的匿名函數就常用于防止全局被污染,就是當你寫的代碼量大了,難免會有些全局變量會有重名的可能,這時候使用匿名函數自調用就可以新開辟了一個作用域,不同作用域的變量就算同名也不怕了,至于具體的后面我也會應用到,到時再詳講。
2.6 函數其他函數也是一種數據類型,可以說是一個對象吧,至于具體的后面再詳講,現在了解就好。
函數不僅可以作為參數進行傳遞,還可以作為返回值,畢竟函數也是一種數據類型。作為參數傳遞主要就是我們所說的回調函數,遇到就會說,作為返回值的應用,閉包就是一個應用,也不多說,以后會講。
2.7. 作用域作用域就是變量可以起作用的范圍,在 JavaScript 中定義的變量符合詞法作用域,就是說變量的作用域是在定義時決定的,不是在執行時決定的,即變量作用域只需要通過源碼分析就知道了。
1. JavaScript 中 詞法作用域的規則為:
函數內部的變量允許訪問函數外部的。
整個代碼結構只能函數限定作用域,這就是為什么上文說使用自調用函數來開辟新的作用域的原因了。
作用域規則首先使用提升規則分析,下文說的預解析就是這個
如果當前作用域有該變量了,就不會考慮外面的了。
2. 下面再看看 JavaScript 中三種作用域
全局作用域:JavaScript 中認為在函數外部定義的變量就是全局變量,而這個全局變量所在的作用域就是全局作用域。
局部作用域:在函數內部就是局部作用域,在這里定義的內部變量也就是局部變量。
塊級作用域:這個是 ES6 才有的,簡單說下,就是只使用一對大括號{}?括起來的就是塊級作用域。
3. 作用域鏈
只有函數才可以限定作用域,那么在要有代碼,這里就至少存在一個全局作用域,而寫代碼難免又會有函數,這里的函數就會構成另一個作用域,如果函數中還有函數,則他還會構成一個新的作用域,等等。將上面的這些作用域列出來,就會形成一個結構,這個結構就是作用域鏈。如下面代碼:
按照全局作用域就是 0 級鏈,函數就是 1 級鏈,函數的函數就是 2級鏈,就會有下圖:
2.8 預解析JavaScript 的解釋器在執行代碼的時候有兩個過程,就是預解析和再從上往下執行代碼過程。預解析就是先把代碼中的變量提升,然后函數提升,接著再執行代碼。
變量提升:變量的聲明會被提升到作用域的最上面,注不會將賦值提升。
函數提升:把當前作用域的函數聲明提升到當前作用域的最上面。
如果你懂了再看看下面幾段代碼會不會報錯?
1.
解答:不會報錯,因為經過預解析后代碼成這樣
2.
解答:也不會報錯,不過 a 打印的值為 undefined
3.
解答:會報錯,原因可以結合上下兩張圖看即可。
3. 對象 object對象是一個具體的事物,比如你和我都是對象,但是汽車和手機不是事物,可以說它們是一個類別。
JavaScript 中的對象可以說是一個無序的屬性的集合,屬性可以包括基本值、對象或函數,也可以把 JavaScript 中的對象想像為一組鍵值對。
把現實中的事物抽象為代碼中的對象,其的特征可以作為對象的屬性,其的行為可以作為方法。
3.1 創建對象JavaScript 中創建對象的方法有四種,并不像其他語言中只能通過 new 來創建。
直接聲明一個鍵值對的集合
這個 obj 變量就是一個對象了里面有兩個屬性和一個方法。使用這種方法也只適合創建一個類,因為當需要創建大量同類型的對象時,使用這個方法就需要寫大量的方法。
使用 new Object() 創建
這個是先創建一個空對象,然后動態增加對象的屬性和方法,也是只適合創建只有一個對象的類型,還不如第一種,也不推薦。
使用工廠模式創建
這種方法就是使用一個模板函數,就相當于一個工廠,還有記得返回創建的對象。當需要創建對象的時候只需要調用一下函數傳參就可以了,就比上面兩種代碼的復用性提高了。
但是這有一個問題,我們在判斷對象類型的時候,結果都是 Object
判斷對象類型使用 instanceof,而使用 typeof 判斷對象,無論什么對象的結果都是 Object
自定義構造函數來創建
這個自定義構造函數名字需要首字母大寫,當然這只是個規范而已。
里面使用了 this 關鍵字,這個?this 的指向就是使用構造函數創建的對象,也不需要返回 對象了。
注意:創建對象也需要使用?new?關鍵字,如上圖,通過這種方法就既可以創建大量同類型的對象,也可以判斷所屬類型,非常方便。
這個?new 創建對象的過程為:
在內存中先創建一個空的對象
讓構造函數的 this 指向剛剛創建的對象
執行構造函數內部的屬性和方法定義
返回當前對象
3.2 對象屬性和方法的相關操作訪問屬性語法為對象.屬性,還可以?對象["屬性名"]?這樣, 當然也可以通過這兩個來修改對象屬性的值
當然,當對一個不存在的屬性訪問的時候就會返回 undefined,若是修改一個不存在的屬性就是向該對象動態增加一個新的屬性。
這兩種方法推薦第二種,因為有時我們得到的屬性是一個變量名,并不知道具體的名字,這時候就只能使用第二種方法
訪問方法直接使用?對象.函數名()?即可
遍歷對象成員
可以使用 for...in... 語句
刪除對象成員
使用?delete?關鍵字
3.3 簡單數據類型和復雜數據類型的區別基本類型又叫做值類型,復雜類型又叫做引用類型
值類型:簡單數據類型,基本數據類型,在存儲時,變量中存儲的是值本身,因此叫做值類型。
引用類型:復雜數據類型,在存儲時,變量中存儲的僅僅是地址(引用),因此叫做引用數據類型。
終于寫完了,下一篇常用內置對象走起。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/101687.html
摘要:為數值固定的表示法,用來表示整數和浮點數的。無論你寫何種進制,它的存儲還是以二進制來存儲的,所以這樣就弄成了浮點數的存儲精確度,浮點數只能精確到位小數。關系運算符關系運算符有和。賦值運算符賦值運算符有六個。 現在的爬蟲越來越難了,不再和之前的那樣,隨便抓個包就可以找到相關的 url ,然后 post 一下或者 get 一下數據就出來了。還有一個可能就是可能你以前用來學習的爬蟲網站太簡單...
摘要:未授權的爬蟲抓取程序是危害原創內容生態的一大元兇,因此要保護網站的內容,首先就要考慮如何反爬蟲。反爬蟲的銀彈目前的反抓取機器人檢查手段,最可靠的還是驗證碼技術。機器人協議除此之外,在爬蟲抓取技術領域還有一個白道的手段,叫做協議。 本文首發于我的個人博客,同步發布于SegmentFault專欄,非商業轉載請注明出處,商業轉載請閱讀原文鏈接里的法律聲明。 web是一個開放的平臺,這也奠定了...
摘要:本文是面向前端小白的,大手子可以跳過,寫的不好之處多多分鐘搞定常用基礎知識前端掘金基礎智商劃重點在實際開發中,已經非常普及了。 JavaScript字符串所有API全解密 - 掘金關于 我的博客:louis blog SF專欄:路易斯前端深度課 原文鏈接:JavaScript字符串所有API全解密 本文近 6k 字,讀完需 10 分鐘。 字符串作為基本的信息交流的橋梁,幾乎被所有的編程...
摘要:時間永遠都過得那么快,一晃從年注冊,到現在已經過去了年那些被我藏在收藏夾吃灰的文章,已經太多了,是時候把他們整理一下了。那是因為收藏夾太亂,橡皮擦給設置私密了,不收拾不好看呀。 ...
摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數式編程語言,它的代碼運行在之上。它通過編輯類工具,帶來了先進的編輯體驗,增強了語言服務。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經到來了,總結過去的 2017,相信小伙們一定有很多收獲...
閱讀 1382·2021-11-15 18:11
閱讀 2512·2021-08-19 10:56
閱讀 677·2021-08-09 13:42
閱讀 793·2019-08-30 15:53
閱讀 2086·2019-08-30 10:55
閱讀 3142·2019-08-29 17:18
閱讀 1435·2019-08-29 13:45
閱讀 545·2019-08-29 13:15