<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        對JavaScript的引用類型講解

        來源:懂視網 責編:小采 時間:2020-11-27 20:16:42
        文檔

        對JavaScript的引用類型講解

        對JavaScript的引用類型講解:Object類型 1 //創建方式一 2 var person = new Object(); 3 person.name = "jack"; 4 person.age = 12; 5 6 //創建方式二 7 var person = { 8 name:"jack", 9 age:1210 }11 //創建
        推薦度:
        導讀對JavaScript的引用類型講解:Object類型 1 //創建方式一 2 var person = new Object(); 3 person.name = "jack"; 4 person.age = 12; 5 6 //創建方式二 7 var person = { 8 name:"jack", 9 age:1210 }11 //創建

        Object類型

         1 //創建方式一 2 var person = new Object(); 3 person.name = "jack"; 4 person.age = 12; 5 6 //創建方式二 7 var person = { 8 name:"jack", 9 age:1210 }11 //創建空對象12 var person = {};//與new Object()相同13 14 //訪問方式15 person["name"]; jack16 person.name; jack17 //以上兩種方式區別在于使用中括號方式可以通過變量訪問18 var propertyName="name";19 person[propertyName]; jack20 person["first name"] = "jack";//如果屬性名有空格

        Array類型  

        //定義var array = new Array();var array2 = new Array("a","b","c");var array3 = ["a","b","c"];//修改array3[2] = "d";//array3:a,b,d//新增array3[3] = "d";//array3:a,b,c,darray3[length] = "d";//array3:a,b,c,d第二種新增方式//末尾刪除元素//數組的length屬性不是只讀的,所以通過改變length可以從數組末尾移除array3.length=3;//array3:a,b,c

        檢測數組:

        確定一個值是哪種基本類型(Undefined,Null,Boolean,Number,String)使用typeof操作符,確定一個值是哪種引用類型使用instanceof操作符。

        之所以Array中新增了Array.isArray()方法,是因為instanceof操作符是在只有一個全局執行環境的情況下;如果包含多個框架,那就存在兩個以上不同的全局環境,就存在兩個以上的不同版本的Array構造函數。 棧方法(LIFO):Array通過push(接收任意數量的參數,逐個添加到數組末尾)和pop(從數組末尾移除最后一項,并減少length值,返回移除的項)兩個方法可以實現類似棧的行為。

        隊列方法(FIFO):Array通過shift(從數組前端取得項)和push或unshift(在數組前端添加任意個項并返回新數組的長度)和pop兩種都能實現模擬隊列的形式。

        重排序方法:reverse(反轉數組項的順序);sort(實現排序,接收一個自定義函數,通過負數,0,正數)

        操作方法:concat(基于接收的參數添加到副本數組中,并返回數組的副本);slice(返回起始和結束位置之間的項,但不包括結束位置的項);

             splice()方法:可以刪除任意數量的項splice(0,2)會刪除前兩項(要刪除第一項的位置和要刪除的項數);可以向指定位置插入多個項;可以向指定位置插入任意數量的項 同時刪除任意數量的項。

        位置方法:ECMAScript 5為數組實例添加了兩個位置方法:indexOf()和lastIndexOf()

        迭代方法

        1. every():接收一個函數,如果對于數組每一項都返回true,結果返回true。

        2. some():接收一個函數,如果對于數組中有返回true的項,結果就返回true,注意與every區別。

        3. filter():接收一個函數,返回滿足條件也就是true的項。

        4. forEach():對數組中每一項運行給定的函數。

        5. map():運行給定的函數,返回每次函數調用的 結果組成的數組。

        歸并方法:reduce(從數組第一項開始)和reduceRight(從數組最后一項開始)。

        Function類型

        函數實際上是對象,每個函數都是Function類型的實例,都與其他引用類型一樣具有屬性和方法。因此函數名實際上也是一個指向函數對象的指針。

         1 //使用函數聲明語法定義 2 function sum(num1,num2) 3 { 4 return num1+num2; 
         5 } 6 //使用函數表達式定義,注意結尾要加分號 7 var sum = function(num1,num2) 8 { 9 return num1+num2;10 };

        函數聲明與函數表達式是有區別的,解析器在向執行環境加載數據時,會率先讀取函數聲明,并使其在執行任何代碼之前可以訪問;而函數表達式則需要等到解析器執行到它所在的代碼行才會真正被解釋執行,也就是說函數表達式要寫在調用函數代碼的前面。

        函數可以作為值來使用,既可作為參數也可作為返回值,如下例子:

        //根據屬性名來創建一個比較函數,來指明按照哪個屬性來排序function createComparisonFunction(propertyName)
        {return function(object1,object2)
         { var value1 = object1[propertyName]; var value2 = object2[propertyName]; 
         if(value1<value2){ return -1;
         }else if(value1<value2){ return 1;
         }else{ 
         return 0;
         }
         }
        } 
        //利用數組data調用sort()方法data.sort(createComparisonFunction("name"));

        函數內部屬性:

        在函數內部,有兩個特殊對象:arguments和this。arguments的主要用途是保存函數參數,其中有個callee的屬性,該屬性是一個指針,指向擁有這個arguments對象的函數。

        //簡單的遞歸算法,但是函數內部的執行和函數名factorial耦合在一起function factorial(num)
        {if(num<=1)
         {return 1;
         }else{return num*factorial(num-1);
         }
        }//利用arguments.callee解決function factorial(num)
        {if(num<-1){return 1;
         }else{return num*arguments.callee(num-1);
         }
        }

        另外一個函數對象的屬性是:caller。其保存著調用當前函數的函數的引用。也就是誰調用的函數,caller就把它的引用保存下來。

        function outer()
        {
         inner();
        }function inner()
        {
         alert(inner.caller);//彈出outer()函數的源代碼
         alert(arguments.callee.caller);//和上一句一樣}

        函數屬性和方法:

        每個函數都包含兩個屬性:length(函數接收的命名參數的個數)和prototype。

        每個函數都包含兩個非繼承而來的方法:apply()和call(),在特定的作用域中調用函數,實際上等于設置函數體內this對象的值。apply()接收兩個參數,一個在其中運行函數的作用域,拎一個是參數數組(可以是array或arguments對象)。call()第一個參數和apply一樣,后面必須明確傳入每個參數。除了用法不同其他的沒什么不同。另外他們真正強大的地方是能夠擴充函數賴以運行的作用域。

        function sum(num1,num2)
        { return num1+num2; 
        }
        sum.apply(this, [num1,num2] );
        sum.call(this,num1, num2);//擴充函數作用域window.color = "red";var o = {color:"blue"};function showColor(){
         alert(this.color);
        }
        
        showColor();//redshowColor.call(this);//redshowColor.call(window);//redshowColor.call(o);//blue

        也可以使用bind()方法。

        基本包裝類型


        為了便于操作基本類型值,ECMAScript引入3個特殊的引用類型:Boolean,Number,String。所謂包裝類型,就是將基本類型包裝起來,放一些操作方法和屬性等。

        每當讀取一個基本類型值的時候,后臺就會創建與一個對應的基本包裝類型的對象,從而能讓我們可以調用某些方法操作這些數據。

        var s1 = "some text";var s2 = s1.substring(2);//后臺內部相當于如下代碼var s1 = new String("some text");var s2 = s1.substring(2);
        s1 = null;

        當第二行代碼訪問s1時,訪問過程處于一種讀取模式,也就是要從內存中讀取這個字符串的值,讀取模式訪問字符串時,后臺都會自動完成下列處理:

        1. 創建String類型的一個實例。

        2. 在實例上調用指定的方法。

        3. 銷毀這個實例。

        引用類型與基本包裝類型的主要區別就是對象的生存期。使用new 操作符在執行流離開當前作用域之前一直保存在內存中。而自動創建的基本包裝類型的對象,則只存在一行代碼的執行瞬間,然后立即銷毀。

        單體內置對象

        內置對象:

        由ECMAScript實現提供的,不依賴于宿主環境的對象,程序執行之前就已經存在,比如:Object,Array和String。另外還有Global和Math。

        Global對象:

      1. URI編碼方法:通過encodeURI()和encodeURICOMponent()方法對URI進行編碼,以便發送給瀏覽器。區別在于第一個不會對本身屬于URI的特殊字符進行編碼,例如冒號,正斜杠,問號和井號。而另一個則會對它發現的任何非標準字符進行編碼。與這兩個方法對應的是:decodeURI(只能對使用encodeURI()替換的字符進行解碼)和decodeURIComponent(針對encodeURIComponent()編碼的字符)。

      2. eval()方法像是一個解析器。比如eval("function say(){ alert(' Hi '); }");但是創建的任何變量或者函數都不會被提升,只有在eval執行時候才創建。

      3. window對象,全局作用域中聲明的所有變量和函數,都成為了window對象的屬性。

      4. 聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        對JavaScript的引用類型講解

        對JavaScript的引用類型講解:Object類型 1 //創建方式一 2 var person = new Object(); 3 person.name = "jack"; 4 person.age = 12; 5 6 //創建方式二 7 var person = { 8 name:"jack", 9 age:1210 }11 //創建
        推薦度:
        標簽: 講解 js 詳解
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 国产性生交xxxxx免费| 97在线观免费视频观看| 亚洲AV无码成人精品区大在线| 日本亚洲免费无线码| 国产香蕉九九久久精品免费| 亚洲国产成人久久99精品| 日本三级2019在线观看免费| 亚洲乱妇熟女爽到高潮的片| 成人国产mv免费视频| 免费人成在线观看播放a| 亚洲日本一区二区三区在线不卡| 一级**爱片免费视频| 亚洲精品制服丝袜四区| 一级毛片免费观看| 亚洲人xxx日本人18| 国产高清在线免费| 国产免费高清69式视频在线观看| 亚洲精品美女久久777777| 亚洲精品在线免费看| 亚洲精品久久久久无码AV片软件| 亚洲А∨精品天堂在线| 久久大香香蕉国产免费网站| 亚洲三级在线播放| 免费在线观看a级毛片| 国产一精品一av一免费爽爽 | 午夜一区二区免费视频| 国产一区二区三区亚洲综合| 自拍偷自拍亚洲精品第1页| 四虎影视成人永久免费观看视频 | 亚洲av丰满熟妇在线播放 | 亚洲一区视频在线播放| 国产精品免费观看调教网| 久久精品国产亚洲AV蜜臀色欲| 国产一区二区三区免费在线观看| a级大片免费观看| 亚洲AV无码成人专区| 国产亚洲精品成人a v小说| 嫖丰满老熟妇AAAA片免费看| 一个人晚上在线观看的免费视频| 亚洲精品国产免费| 亚洲精品老司机在线观看|