JavaScript基礎複習(一) 語言特性及數據類型

終於要開始寫JS系列了,目標列了很久,導圖也作了,但總沒有行動,近來無事,總結一下這個系列的學習。



零、是什麼

    JavaScript是前端必學語言,和HTML,CSS並稱爲前端三劍客,是一門運行在瀏覽器端的腳本語言,功能是操做DOM,處理數據,渲染特效等

1、語言特性

一、弱類型

    說白了就是類型定義,對應的就是強類型,好比Java,C等都是強類型語言,在使用變量的時候必須聲明是哪一種類型的,一旦被定義了數據類型,除非強制類型轉換,那麼它到銷燬的時候都是這個類型的,這樣固然是比較安全的。而弱類型就是不須要定義是什麼數據類型,它的值就表示了它是什麼類型的,以下

var asd1 = 'have a nice day'   //string
var asd2 = 20                  //number
var asd3 = new Date()          //object
var asd4 = ['1','3','4']       //object
var asd5 = true                //boolean
複製代碼

二、動態性

    能夠直接對用戶的操做作出相應,不須要經過Web服務器。採用事件驅動的方式進行,好比你點擊一個提交按鈕就是一個事件,也就是說你執行某種操做的動做,很是常見。當相關事件在觸發的時候就會自動執行須要響應的腳本或函數。

三、運行在瀏覽器端

    js腳本語言不容許訪問本地硬盤,也不能存儲在服務器上,因此它只能經過瀏覽器實現數據的展現和動態交互,正是由於這樣,保證了數據的安全性。

四、跨平臺性

    依賴於瀏覽器自己,與操做環境無關。只要能運行瀏覽器的計算機,並安裝了支持javascript的瀏覽器就能夠正確執行,從而實現了「編寫一次,走遍天下」的夢想。

五、腳本語言

    解釋性腳本語言,javascript不須要編譯,只須要嵌入到html代碼中,由瀏覽器逐行加載解釋執行

2、基本數據類型

    JavaScript的基本類型值是保存在棧內存中的簡單數據段,按值存儲,因此按值訪問。基本數據類型有:
    Number、String、Boolean、Null、Undefined、以及ES6的symbol(獨一無二的值)。
    用typeof 來檢驗基本類型,參考弱類型的舉例,能夠返回這些值:undefined、boolean、string、number、object、function
    這裏還有一些有意思的例子:

typeof undefined      //undefined
typeof null           //object
typeof ['1','2','3']  //object
typeof {asd:'sssss'}  //object複製代碼

因此不要使用typeof 來區分數組仍是對象,由於都返回object。

說說null和undefined的區別。

都表示 無,若是轉換爲數值     undefined => NaN             有聲明,但未賦值或者未初始化
                                               null => 0 (原型鏈的終點)     沒有,也沒有定義,不存在

typeof 未定義值     // undefined
typeof 未初始化值   // undefined複製代碼

3、進階

    JavaScript 的基本知識就是上述,你可能發現好像很簡單並很少,那只是基本類型,咱們經常使用到的Object尚未介紹呢,接下來講一下進階的知識。

一、引用類型

    和基本類型對應,引用類型是保存在堆內存中的對象,值是可變的,在棧中保存對應的指針(一個指向堆的引用地址),指向堆中實際的值。
    類型值:Object(在JS中除了基本數據類型之外的都是對象,數組是對象,函數是對象,正則表達式是對象)
    使用 instanceof 檢測引用類型

var a = [1,2]
var b = {'a':'asss'}
alert( a instanceof Array)   // true
alert( b instanceof Object)  // true 複製代碼

    ​那麼基本類型和引用類型有什麼區別呢。

var arr = [2,4,6];
var bcc = arr;//傳址 ,對象中傳給變量的數據是引用類型的,會存儲在堆中;
var cxx = arr[0];//傳值,把對象中的屬性/數組中的數組項賦值給變量,這時變量C是基本數據類型,存儲在棧內存中;改變棧中的數據不會影響堆中的數據
alert(bcc);//2,4,6
alert(cxx);//2
//改變數值 
bcc[1] = 6;
cxx = 7;
alert(arr[2]);//6
alert(arr[0]);//2
複製代碼

    從上面咱們能夠得知,當我改變bcc中的數據時,arr中數據也發生了變化;可是當我改變cxx的數據值時,arr卻沒有發生改變。
    這就是 傳值傳址的區別。由於arr是數組,屬於引用類型,因此它賦予給bcc的時候傳的是棧中的地址(至關於新建了一個不一樣名「指針」),而不是堆內存中的對象。而cxx僅僅是從arr堆內存中獲取的一個數據值,並保存在棧中。因此bcc修改的時候,會根據地址回到arr堆中修改,cxx則直接在棧中修改,而且不能指向arr堆內存中。
    接下來就涉及到比較經常使用的深拷貝和淺拷貝,咱們放在以後來講。

二、類型判斷

    在開發的過程當中常常會判斷值是否相等來進行下一步的操做,在js中有兩個方式判斷兩個值是否相等。
== 等於操做符
    js是弱類型語言,在使用 == 操做符的時候,會進行強制類型轉換

""           ==   "0"           // false
0            ==   ""            // true
0            ==   "0"           // true
false        ==   "false"       // false
false        ==   "0"           // true
false        ==   undefined     // false
false        ==   null          // false
null         ==   undefined     // true
" \t\r\n"    ==   0             // true
複製代碼

    由於在強制類型轉換的時候規則比較複雜,因此說使用 == 是一個很差的編程習慣,也會帶來性能消耗。
javascript

 === 全等操做符html

不會進行強制類型轉換,前端

""           ===   "0"           // false
0            ===   ""            // false
0            ===   "0"           // false
false        ===   "false"       // false
false        ===   "0"           // false
false        ===   undefined     // false
false        ===   null          // false
null         ===   undefined     // false
" \t\r\n"    ===   0             // false
複製代碼

因此推薦使用 === 操做符
java

三、類型轉換

因此已經使用了 === 操做符,可是仍是會產生不少問題,那麼否則咱們本身進行類型轉換。git

    轉換爲 字符類型: 將一個值加上空字符串能夠輕鬆轉換爲字符串類型github

'' + 10 === '10'; // true
複製代碼

    轉換爲 數字類型: 使用一元的加號操做符,能夠把字符串轉換爲數字。
正則表達式

+'10' === 10; // true
複製代碼

    轉換爲布爾值: 經過使用 操做符兩次,能夠把一個值轉換爲布爾型
編程

!!'foo';   // true
!!'';      // false
!!'0';     // true
!!'1';     // true
!!'-1'     // true
!!{};      // true
!!true;    // true複製代碼

over~

參考:bonsaiden.github.io/JavaScript-…
數組




    關注我獲取更多前端資源和經驗分享 關注後回覆 vivi 獲取個人微信號,望不吝賜教,pps:可輕撩哈哈 瀏覽器


 感謝大佬們閱讀,但願你們頭髮濃密,睡眠良好,情緒穩定,早日實現財富自由~ 

相關文章
相關標籤/搜索