1-javascript基本類型總結

1,Javascript 簡介
    誕生於1995年,當時的主要目的是處理由以前服務器語言負責的一些沒有填寫的必填域,是否輸入了無效的值。在web日益流行的同事,人們對客戶端腳本語言的需求也越來越強烈,那時絕大多數因特網用戶使用的速度僅爲28.8kbit/s的貓上網,但網頁的大小和複雜性卻不斷增加,爲完成簡單的表單驗證而與服務器交換數據只會加重用戶的負擔。
    
    1995年2月 計劃在Netscape Navigator2開發名爲LiveSript的腳本語言,同時在瀏覽器和服務器中使用,爲了趕在發佈日期前完成LiveScript開發,Netscape和sun公司建立了一個開發聯盟,在Netscape Navigator2發佈的前夕,爲了搭上媒體上熱炒的java順風車,臨時把LiveScript改名爲javaScript。在Navigator3發佈不就,ie3就加入了名爲JScript的javaScript的實現。這意味着有兩個不同的javascript版本:javascript,jscript.當時並沒有標準規定JavaScript的語法和特性。

    1997年,JavaScript1.1 爲藍本的建議被提交給了ECMA(European Computer ManufacturersAssociation歐洲計算機製造商協會)。定義了ECMAScript新腳本語言的標準(ECMA-262)。第二年,ISO/IEC(International Organization for Standardization and International Electrotechnical Commission,國標標準化組織和國際電工委員會)也採用了ECMAScript作爲標準(ISO/IEC-16262),自此瀏覽器開發商就致力於將ECMAScript作爲各自JavaScript實現的基礎。

Js特點    
    1)腳本語言
        在html中執行

        
    2)解釋性語言
        JS  PHP
        瀏覽器
            ie            js解釋器  
            firefox        js解釋器
            google        js解釋器
        編譯型語言
        Java C
            (
                .java->.class    字節碼
                .c   ->.o        二進制
                    編譯:語法校驗
             )
    3)弱類型語言
        var a = 3;    // 數字類型
        a = false;    // 布爾類型

        強類型
        int a = 3;
        a = false;//報錯
        float b = 3.0;
        boolean f = false;
    4)從上往下順序解析執行
        
        

2,JavaScript的實現
      一個完整的JavaScript的實現應該包含:
        核心            ECMAScript
        文檔對象模型    DOM
        瀏覽器對象模型    BOM
      1) ECMAScript
        ECMA-262 定義的EMCAScript與Web瀏覽器沒有依賴關係。瀏覽器僅是ECMAScript實現可能的宿主環境之一,宿主環境不僅提供基本的ECMAScript實現同時也提供該語言的擴展,以便語言與環境之間對接交互。擴展如DOMECMA規定了這門語言的組成部分
        1,語法
        2,類型
        3,語句
        4,關鍵字
        5,保留字
        6,操作符
        7,對象
      2) DOM(文檔對象模型)
        DOM(Document Object Model) 是針對XML但經過擴展用於HTML的應用程序編程接口。DOM將整個頁面映射成一個多節點結構。
          html代碼:
        <html>
              <head>
                <title>hello</title>
              </head>
              <body>
                <p>nihao </p>
              </body>
        </html>
              dom模型
            html
            /    \
        head    body
         |         |
        title     p
         |         |
        'hello'    '你好'
      3) BOM(瀏覽器對象模型)
        BOM(Browser Object Model),開發人員可以使用BOM控制瀏覽器顯示的頁面以外的部分。彈出新瀏覽器窗口;移動,縮放,關閉瀏覽器的功能;提供瀏覽器詳細信息的navigator對象;提供瀏覽器所加載頁面的詳細信息的location對象;提供用戶顯示器分辨率詳細信息的screen對象;對cookies的支持;支持XMLHttpRequest,IE中的ActiveXObject自定義對象

3,兼容性
      JavaScript的三個組成部分,在當前五個主要瀏覽器(IE,Firefox,Chrom,Safari,Opera)中得到了不同程度支持,其中,所有瀏覽器對ECMAScript3支持大體都還不錯,對ECMAScript支持程度越來越高,但對DOM的支持彼此相差較多,對已經正式納入HTML5標準的BOM來說,儘管各瀏覽器都實現了某些總所周知的共同特性,但其他特性還因瀏覽器而異。

4,在HTML中使用JavaScript
    1)通過<script>元素,有如下幾個屬性
        type     : 可看做是language的替代屬性,表示編寫代碼使用的腳本語言的內容類型,MIME這個屬性非必須,默認是text/javascript
          src     : 表示包含要執行代碼的外部文件

          async     :立刻下載腳本,但應妨礙頁面中其他操作(只針對外部腳本文件)
          charset : 指定src屬性指定的代碼的字符集,大多數瀏覽器會忽略這個值。
          defer     : 表示腳本可以延遲到文檔全部被解析和顯示之後再執行(只針對外部腳本文件)
          language: 已廢棄
          
    2)兩種方式:
          1. 直接嵌入在頁面中
        <script type="text/javascript">
            //javascript代碼
            function(){
          
            }
        </script>
          2. 包含外部的js文件
            <script type="text/javascript" src="test.js"></script>
             (後標籤不要省略,不符合html規範)
        【注意事項】
            1.不要在<script>標籤中再填寫其他js代碼,否則將會忽略
            2.src 可以跨域訪問 。例如:http://cdn.code.baidu.com/ 百度靜態資源公共庫
            3.標籤位置<head>標籤中:等到全部的js代碼都被下載,解釋和執行完成後才能開始呈現頁面的內容。可將代碼引用放到<body>元素放到內容後面。
            4.延遲腳本 defer="defer",延遲至瀏覽器遇到</html>標籤後再執行。如果有多個延遲腳本,並不會按照順序執行。最好包含一個延遲腳本,並且將其放在頁面最底部,該屬性適用於外部引用的js

5,<noscript>
      當瀏覽器不支持腳本或者瀏覽器支持腳本,腳本被禁用,可以讓頁面平穩的退化
    <noscript>
        本頁面需要瀏覽器支持(啓用)javascript
    </noscrpt>
6,基礎語法
      1) 區分大小寫
          typeof 關鍵字, typeOf 非關鍵字
      2) 標識符
      指變量,函數,屬性的名字或者函數的參數。標識符是按照以下規則組合起來的一或多個字符:
      1.字母,數字,下劃線,$組成。
      2.只能以字母,下劃線,$開頭。
      3.不能將關鍵字作爲標識符。
      4.命名採用駝峯式命名
      3) 註釋
        //單行註釋
        /*
          多行註釋
        */
      4) 語句
        每個語句以分號結尾,如果省略分號,由解析器確定語句的結尾,即分號可以省略,但是我們要求每個語句的末尾都應該有分號,

7,關鍵字保留字
    1) 關鍵字:(在js中有特殊功能)
        break        do         instanceof    typeof
        case        else    new,        var
        catch        finally    return,        void
        continue    for        switch,        while
        debugger    this    function    with
        default        if         throw        delete
        in             try

    2) 保留字:(將來可能成爲關鍵字)
        abstract    enum    int            short
        boolean        export    interface    static
        byte        extends    long        super
        char        final    native        synchronized
        class        float    package        throws
        const        goto    private        transient
        debugger    double    implements    protected
        volatile    import    public
8,變量
  ECMAScript的變量是弱類型(鬆散類型),可以用來保存任何類型的數據。定義變量時使用var操作符
    
    var 變量名;
    聲明             var message;
    初始化            message = "hello"
    聲明並初始化    var message = "hello";
    定義多個變量
                    var msg1 = "hello";
                    var msg2 = "world";

                      var message= "hello",found=false, age = 29;

    局部變量與全局變量:
        1) 使用var操作符定義的變量將成爲定義該變量的作用域中的局部變量。
              function test(){
                var message = "hello";  
              }
              test();
              alert(message); //錯誤
        2) 如果在函數中定義變量沒有加var,該變量爲全局變量
              function test(){
                message = "hello";  
             }
              test();
              alert(message); //可以訪問
9, 數據類型
    《JavaScript高級程序設計》
      1)ECMAScript不支持自定義類型,只有6種數據類型:
        5中基本數據類型(簡單數據類型)
              Undefined    未定義    "undefined"
                var a ;
                var a = "undefined";//不做
              Null        空引用數據類型 "null"
                var a = null;
              Boolean        布爾類型 true/false
                var a = false;
              Number        數字類型
                整數
                浮點數
              String        字符串類型 "" ''
                var a ="true";
                var a ='hello';
                        
        1中引用數據類型(複雜數據類型)
              Object(本質由一組無序的鍵值對組成)
                var person= new Object();
                person.name = "terry";
                person.age = 12;

    
      2) typeof 操作符
          返回該變量名所指向數據的類型
        語法:
            typeof 變量名  
        可有取值如下
              "undefined"        未定義
              "boolean"        布爾類型
              "string"        字符串
              "number"        數值
              "object"        對象或者null
              "function"        函數

      3) 基本數據類型
    1. Undefiend
         該類型只有一個值undefined。對未聲明和未初始化的變量執行typeof操作符都返回undefined
        var a;
        console.log(a);            // undefined
        console.log(typeof a);    // undefined
        console.log(b);            //ReferenceError: b is not defined
        console.log(typeof b);    // undefined
    2. Null類型
         該類型只有一個值 null ,null可以表示一個空對象的指針。
        var car = null;
        console.log(typeof car )    //object  null被認爲是空對象的引用

        【使用情景】
             如果一個變量準備將來保存對象,可以將該變量初始化null而不是其他,這樣可以通過檢查null值就可以知道相應的變量是否已經保存了一個對象的引用。
               if(car !=null ){
                 //car對象執行某些操作
              }
         實際上 undefined 派生自null值。undefined == null 結果爲 true
        null與undefined用途不同,null可以用來表示一個空對象,但是沒有必要把一個變量的值顯式設置爲undefined

    3. Boolean類型
         該類型只有兩個值,true,false雖然boolean類型的取值只有兩個,但是ECMAScript中所有的類型的值都有與這兩個Boolean值等價的值
           
    4. Number
         該類型用來表示整數和浮點數
         1) 表示方法:
            1. 整數:
                
                   十進制數: 55    0~9
                   八進制數: 首位爲0,其他位爲(0~7 如果字面值超出了範圍,前導0將會被忽略)
                    070 (表示 7*8一次方 =  56)
                    079    (超過了範圍,表示79)
                   十六進制: 前兩位爲0x,其他位爲(0~9,A~F)
            2. 浮點數
                所謂浮點數值,就是該數值中必須包含一個小數點,並且小數點後必須至少有一位數字。浮點數值的最高精度是17位小數。
                    例如:    var f = 1.2;
                 科學計數法:e
                       var e = 3.125e7;        //31250000
        2) 數值範圍
            由於內存的限制,ECMAScript不能保存世界上所有的數值。ECMAScript能表示的最小數值保存在Number.MIN_VALUE中,能表示的最大的數值保存在Number.MAX_VALUE中。如果某次計算的結果超過了JavaScript數值範圍,將會返回Infinity(正無極)或者-Infinity(負無極)使用 isFinite()函數可以判斷參數是否在最大值和最小值之間,如果在,返回true

            在絕大數瀏覽器中:
                Number.MIN_VALUE : 5e-324
                   Number.MAX_VALUE :    1.7976931348623157e+308
            如果某次計算返回了正的或者負的Infinity,那麼該值無法繼續參與下一次計算。可以使用isFinite(para)函數判斷para 是否在最大數最小數之間
        3) 非數值 NaN (not a number)
               該數值表示一個本來要返回數值的操作數未返回數據的情況。
                var a = 10/'a';
                console.log(a);        //NaN
                
            任何涉及到NaN的操作都會返回NaN; NaN與任何值都不相等,包括NaN本身。
            isNaN,判斷參數是否“不是數值”,當參數para不是數值的時候返回true    
                isNaN(NaN);        true
                isNaN("blue");    true    無法轉換爲數值
                isNaN(10);        false    10
                isNaN("10");    false    10
                isNaN(true);    fase
        注意:
               1) 默認情況下,ECMAScript會將小數點後帶有6個零以上的浮點數轉化爲科學計數法。
                0.0000003 => 3e-7
            2) 在進行算術計算時,所有以八進制十六進制表示的數值都會被轉換成十進制數值。
                   
             3) 保存浮點數需要的內存是整數的兩倍,因此ECMAScript會不失時機將浮點轉換爲整數
                   例如:
                   var a = 1.;
                   var b = 1.0;  都將解析爲1
            4) 避免測試某個特點的浮點數值,是使用IEEE754數值的浮點計算的通病
                例如:    0.1+0.2結果不是0.3,而是0.30000000000000004
            
    5. String
         該類型表示由零個或者多個16位Unicode字符組成的字符序列,即字符串。字符串可以由雙引號或者單引號表示
         1)字符字面量
              \n    換行
              \t    製表
              \b    退格
              \r    回車
              \\    斜槓
              \'    單引號
              \"    雙引號
         2)字符長度     
             通過length屬性獲取字符長度
         
    6. Object(引用數據類型)又叫:複雜數據類型
         ECMAScript中的對象其實就是一組數據和功能的集合。對象可以通過執行"new 對象類型"來創建。
             var o = new Object();
        Object類型是所有它的實例的基礎,換句話說,Object類型所具有的任何屬性和方法,同樣存在於更具體的對象。
             constructor:                    保存用戶創建當前對象的函數
               hasOwnProperty(propertyName);    用於檢查給定的屬性是否在當前對象實例中
               isPrototypeOf(object);            用於檢查傳入的對象是否是原型
               propertyIsEnumerable(propertyName);    用於檢查給定的屬性在當前對象實例中是否存在
               toLocaleString();                返回對象的字符串表示,該字符串與執行環境的地區對應
       *    toString();                        返回對象的字符串表示
       *(暫時學這*兩種) valueOf();                        返回對象的字符串,數值,布爾值的表示。
       
10. 類型轉換
    1) 其他數據類型到Boolean類型轉換
        通過Boolean() 函數轉換
            Boolean        true        false
            String        非空字符串    ""
            Number        任何非0        0和NaN
            Object        任何對象    null
            Undefined    n/a            undefined    (n/a not applicable 不適用)
        
    2) 其他數據類型到數值類型轉換
           1)Number()
            如果是Boolean類型 , true false 分別轉化爲 1,0
            如果是數字值,只是簡單的傳入和返回
            如果是null值,返回0
            如果是字符串:
                  只包含整數數字,轉換爲整數
                只包含小數數字,轉換爲小數
                  只包含十六進制格式,轉爲爲對應的十進制的值
                 空字符串,轉換爲0
                  包含其他字符,NaN
                如果是對象,則調用該對象的valueof()方法,然後按照上面的規則轉換返回的值,如果返回NaN,再調用對象的toString()方法,然後再次按照上面的規則轉換返回的字符串的值
           2)parseInt()
            如果是字符串
                  第一個字符不是數字字符或者負號,返回NaN
                  第一個字符是數字字符或者負號,繼續解析第二個字符,直到解析完或者遇到第一個非數字字符
                parseInt(true);     //NaN
                parseInt("true");     //NaN
                parseInt("1234blue"); //1234
            如果是數字,返回對應的十進制值
            如果是boolean ,返回NaN
            可以使用第二個參數用於指定轉換時應該採用什麼進制。
                parseInt("AF");    //NaN
                parseInt("AF",16);    //175  轉換爲16進制
           3)parseFloat()
             與parseInt() 類似,但是也有不同:
                1.字符串中的第一個小數點是有效的,而第二個小數點則無效其後的內容會被省略
                2.始終忽略前導0
                parseFloat("22.3.4")    //22.3
                parseFloat("022.34");    //22.34
    3) 其他數據類型到字符串類型轉換
        1. toString()函數
            默認情況下,toString()是以十進制格式返回數值的字符串表示,通過傳遞參數,可以輸入以二進制,八進制,十六進制乃至任意有效進制格式的字符串值
                var num = 10;
                num.toString();        "10"
                num.toString(2);    "1010"
                num.toString(8);    "12"
                num.toString(16);    "a"
            但是null ,undefined 沒有toString() 方法
                  null.toString()            //報錯 TypeError: null has no properties    
                   undefined.toString();    //報錯 TypeError: undefined has no properties
        2. String() 構造函數
                   String(null)        "null"
                   String(undefined);     "undefined"


      


       

發佈了55 篇原創文章 · 獲贊 35 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章