JavaScript部分總結

來源:互聯網
上載者:User

標籤:src   ret   tostring   分享   總結   時間   desc   empty   valueof   

一、詞法結構

       1、js裡面區分大小寫

       2、注釋分為兩類:  // 單行注釋    /*多行注釋*/

       3、字面量(直接量 literal)

             12                               //數字 number

             "hello"   ‘hello‘             //字串 string

             true  false                   //布爾類型

             null                            //空類型

             /js/gi                         //正則

            {x:1,y:2}                   //字典

            [1,2,3,4]                     //數組

        4、標示符(變數)和保留字

        5、分號可以省略但是可能會產生問題,js會自動補全;

二、類型、值和變數

        1、原始類型: 數字、字串和布爾 、null空 undefined未定義

        2、物件類型

        3、類 Array Function Date RegExp Error

        4、js解析器  中整合了記憶體回收

        5、任意js的值都可以轉為布爾值

                  undefined

                  null

                  0

                  -0

                  NaN

                  ""                  都被轉換為false

        6、封裝對象

                  var s = "hello";             //原始類型(沒有方法)

                  s.len = 4;                     //當調用原始類型的屬性或方法的時候(原始類型是沒有屬性和方法的)

                                                     //只要引用了字串的屬性個方法,就會調用new String(s)把原始類型,封裝成對象

                                                     //以後調用s.len是調用String對象的屬性和方法,一旦引用結束,新建立的臨時對象會銷毀

                  var n = s.len;               //此時為undefined

                  alert(n);                       //調用字串 布爾 數位屬性或方法時,建立的臨時對象。是封裝對象  顯示定義封裝對象

                  var s = new String("hello");      

                  var s = "hello";              //兩個是不同的

        7、==和===

        8、類型轉換

                var n = 17;

                alert(n.toString(2));              //二進位  10001

                alert(n.toString(8));              // 021

                alert(n.toString(16));            //0x21

                alert(n.toString(10));

                alert(n.toString());

        9、toString()  value()

                 var date = new Date(2011,1,3);

                 date.valueOf()                      返回毫秒數代表的時間

        10、js是動態類型 var n = 10;     程式運行期間  才會確定變數的類型

        11、變數的範圍

                    函數的範圍和聲明提前

                    函數內定義的變數 聲明自動提前到函數頂部

        12、範圍鏈 scope chain

                     在不包括函數的函數體內範圍鏈有兩個對象,第一個是自訂函數,參數和布局變數的對象,第二個是全域對象

                     在一個嵌套函數體內,範圍鏈上至少有三個對象

                     定義一個函數時,它儲存了一個範圍鏈。調用函數時,它建立一個新的Object Storage Service它的局部變數,並將將這個對象添加到儲存的那個範圍鏈上,同時建立一個新的更長的表示函數調用範圍的"鏈"。對於嵌套函數每次調用外部函數時,內建函式會重新定義一遍。每次調用外部函數的時候範圍鏈是不同的。

         13、delete  in  eval  void

三、對象

          1、對象的基本操作 create  set  query  delete  test  enumetare

          2、對象的屬性特性  可寫 可枚舉 課配置 (是否可刪除)

          3、對象的對象特徵

                     對象的原型 prototype

                     對象的類    標記物件類型的字串

                     隊對象的擴充標記  是否可添加新屬性             //建立的擴充的三種方法

          4、對象直接量

                  var empty = {};

                  var point = {x:0,y:0};

          5、new建立對象

                  var o = new Object();               //Null 物件 和{}一樣

                  var a = new  Array();

          6、Object.create()

                   var o1 = Object.create({x:1,y:2});                //o1繼承自對象原型{x:1,y:2}

                   var o2 = Object.cteate(null);                         //o2不能繼承任何屬性個方法

                   var o3 = Object.create(Objec.prototype);       //Null 物件和{}new Object()一樣

           7、屬性的操作  作為關聯陣列的對象

                    object.property

                    object["property"]    散列   映射   字典    關聯陣列

           8、繼承

                  繼承對象book為null或undefined

                       book.subtitle.length 會報錯

                 解決方案

                      var len = book&&book.subtitle&&book.subtitle.lenghth;

                 刪除屬性

                       delete book,subtitle

                 檢測屬性   in hasOwnpreperty() propertyIsEnumerable()

                       var o = {x:1};

                        "x" in o

                        "toString" in o

                 hasOwnPreperty();判斷屬性是否是自己的。繼承屬性返回false

                 propertyIsEnumerable()只有是自有屬性,並可枚舉

                 擷取所有的屬性

                 Object.keys()

                 Object.getOwnPropertyNames()

        9、屬性getter和setter

                  var o = {

                         x:o,

                         y:1,

                         set r(value){value = this.r;},

                         get r(){return this.x + this.y;}

                     };

                   x 資料屬性,r存取器屬性

        10、屬性的特徵  ecmascript5  老的ie不支援如下用法

               資料屬性的特性:值value可寫性writable

                           可枚舉 enumerable

                           可配置 configurable

                存取器屬性特性:  get  set

                           可枚舉 enumerable

                           可配置 configurable

                 //返回{value:1,writable:true,emunerable:true,configurable:true}

                 Object.getOwnPropertyDescriptor{{x:1},x}

                 //查不到屬性 返回 undefined 

                   

                  設定屬性的特性  不能修改繼承的屬性特性

                  Object.defineProperty()

                  //設定不可枚舉屬性

                   var o = {};

                   Object.defineProperty(o,"x",{

                                  value:1,

                                  writable:true,

                                  emunerable:false,

                                   configurable:true

                              })

                    //設定唯讀

                    Object.defineProperty(o,"x",{writable:false})

                     //修改多個屬性特性

                     Object.defineProperties()

        11、對象的三個屬性

               prototype  class  extensible attribute

               查詢對象的原型

               ecmascript5  中  Object.getPrototypeOf(o1)

               ecmascript3  中  o1.constructor.prototype

               通過對象直接量或 new Object()方式建立的對象

               包含一個 constructor 的屬性,指Object()的建構函式

               constructor.prototype 才能真正的原型

               p.isPrototypeOf()檢測對象p是否是o的原型

              //擷取對象的類型 字串

              Object.prototype.toString.call(o1).slice(8,-1)

        12、對象的可擴充性

               對象是否可以新加屬性

               Object.preventExtensions() 設定對象不可擴充 

               Object.isExtensible() 

               Object.seal()  除了將對象設定為不可擴充,還將屬性設定為不可配置 

               Object.freeze()

               除了將對象設定為不可擴充,將屬性設定為不可配置,還把屬性設定為唯讀、

四、函數           

        1、函數調用,方法調用

               function t(){ }

               t();  函數調用  this是全域對象  strict 模式下是undefined

               var o = {a:function(){}};

               o.a()  方法調用  this是當前調用的對象

         2、建構函式調用 

               var o = new Object();  var o= new Object;

               o繼承自建構函式的prototype屬性  內部的this是此對象

               var r = new o.m();中的this不是o

          3、P184 函數的執行用到了範圍鏈,這個範圍鏈是函數定義的時候建立的。

               嵌套的函數f()定義在這個範圍鏈裡,其中的變數scope是局部變數

               範圍鏈                 

               調用s()將建立函數s的執行環境(調用對象),並將該對象置於鏈表開頭,

               然後將函數t的調用對象連結在之後,最後是全域對象。然後從鏈表開頭尋找變數name   

               調用ss()     ss() ==>  t()  ==> window

                name="lwy"; 

                   function t(){ 

                       var name="tlwy"; 

                            function s(){ 

                            var name="slwy";  

                            console.log(name);  

                     }  

                     function ss(){  

                          console.log(name);  

                     } 

                     s();  

                     ss();  

                 }  

                 t();  

                  每次調用函數,都會產生一個新的範圍鏈。包括新的內部變數  

 

 

                     

 

 

 

  

 

             

JavaScript部分總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.