成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

高程(第五章) 引用類型

fxp / 487人閱讀

摘要:對數(shù)組中的每一項運行給定函數(shù),返回該函數(shù)會返回的項組成的數(shù)組。這些類型與其他引用類型相似,但同時也具有與各自的基本類型相應的特殊行為。此外,所有原生引用類型的構(gòu)造函數(shù),像和,也都是對象的屬性。

1 Object類型

創(chuàng)建對象實例:

new操作符后跟Object構(gòu)造函數(shù)

ver person = new Object();
person.name = "Nicolas";
person.age = 29;

對象字面量表示法

var person = {
    name : "Nicholas",
    age : 29
}

通過對象字面量定義對象時,實際上不會調(diào)用Object構(gòu)造函數(shù)

2 Array類型

創(chuàng)建數(shù)組:

使用Array構(gòu)造函數(shù)

var colors = new Array(20);    //new可以省略,20表示數(shù)組長度

數(shù)組字面量表示法

var colors = ["red", "blue", "green"];
2.1 檢測數(shù)組

使用instanceof操作符

console.log(value instanceof Array);    //只有一個全局作用域時使用

如果網(wǎng)頁中包含多個框架,那實際上就存在兩個以上不同的全局執(zhí)行環(huán)境,從而存在兩個以上不同版本的Array構(gòu)造函數(shù)

使用Array.isArray()方法

console.log(Array.isArray(value));    //確定value是否數(shù)值,不管它是在哪個全局執(zhí)行環(huán)境中創(chuàng)建的
2.2 轉(zhuǎn)換方法

toLocaleString()

toString()

valueOf()

join()

var colors = ["red", "green", "blue"];
console.log(colors.join("||"));        //red||green||blue
2.3 棧方法

push():在數(shù)組末尾添加項,返回數(shù)組長度

pop():移除數(shù)組最后一項,返回移除的項

2.3 隊列方法

shift():移除數(shù)組第一項,返回移除的項

unshift():在數(shù)組前端添加項,返回數(shù)組長度

2.5 重排序方法

reverse():反轉(zhuǎn)數(shù)組的順序

sort():按照升序排列數(shù)組項

sort()方法會調(diào)用每個數(shù)組項的toString()轉(zhuǎn)型方法,然后比較得到的字符串
可接收一個比較函數(shù)作為參數(shù),比較函數(shù)接收兩個參數(shù),如果第一個參數(shù)應該位于第二個之前則返回一個負數(shù),如果兩個參數(shù)相等則返回0,如果第一個參數(shù)應該位于第二個之后則返回一個正數(shù);如下:

function compare(value1, value2){
    return value2 - value1;    //降序排序
}
2.6 操作方法

concat():用于拼接數(shù)組

slice():用于獲取數(shù)組中的某幾個項

splice():主要用途是向數(shù)組的中部插入項

2.7 位置方法

indexOf():從數(shù)組的開頭查找某一項

lastIndexOf():從數(shù)組的末尾查找某一項

兩個方法都返回要查找的項在數(shù)組中的索引,沒找到的情況下返回-1

2.8 迭代方法

every():對數(shù)組中的每一項運行給定函數(shù),如果該函數(shù)對每一項都返回true,則返回true。

filter():對數(shù)組中的每一項運行給定函數(shù),返回該函數(shù)會返回true的項組成的數(shù)組。

forEach():對數(shù)組中的每一項運行給定函數(shù),這個方法沒有返回值。

map():對數(shù)組中的每一項運行給定函數(shù),返回每次函數(shù)條用的結(jié)果組成的數(shù)組

some():對數(shù)組中的每一項運行給定函數(shù),如果該函數(shù)對任一項返回true,則返回true。

以上方法都不會修改數(shù)組中的包含的值

2.9 歸并方法

以下兩個方法都會迭代數(shù)組的所有項,然后構(gòu)建一個最終返回的值。這兩個方法都接收兩個參數(shù):一個在每一項上調(diào)用的函數(shù)和(可選的)作為歸并基礎(chǔ)的初始值。傳入的函數(shù)接收4個參數(shù):前一個值、當前值、項的索引和數(shù)組對象。這個函數(shù)的返回值會作為參數(shù)自動傳給下一項。

reduce():從數(shù)組第一項開始,逐個遍歷到最后

reduceRight():從數(shù)組的最后一項開始,向前遍歷到第一項

var values = [1,2,3,4,5];
var sum = values.reduce(function(prev, cur, index, array){
    return prev + cur;
});
alert(sum);     //15

reduceRight()除了遍歷方向的不同之外,與reduce()方法完全一致。

5 Function 類型

函數(shù)是對象,因此函數(shù)名實際上也是一個指向函數(shù)對象的指針,不會與某個函數(shù)綁定。

function sum(num1, num2){        //會先進行函數(shù)聲明提升
    return num1 + num2;
}

var sum = function(num1, num2){        //不會進行函數(shù)聲明提升
    return num1 + num2;
}

var sum = new Function("num1", "num2", "return num1 + num2");    //不推薦,會導致解析兩次代碼
5.3 作為值的函數(shù)

因為ECMAScript中的函數(shù)名本身就是變量,所以函數(shù)也可以作為值來使用。也就是說,不僅可以像傳遞參數(shù)一樣把一個函數(shù)傳遞給另一個函數(shù),也可以將一個函數(shù)作為另一個函數(shù)的結(jié)果返回。

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;
    };
}

var data = [{name : "Zachary", age : 28}, {name : "Nicholas", age : 29}];

data.sort(createComparisonFunction("name"));
console.log(data[0].name);        //Nicholas

data.sort(createComparisonFunction("age"));
console.log(data[0].name);        //Zachary
5.4 函數(shù)內(nèi)部屬性

在函數(shù)內(nèi)部,有兩個特殊的對象:arguments和this

arguments有一個名叫callee的屬性,該屬性是一個指針,指向擁有這個arguments對象的函數(shù)

function factorial(num){
    if(num <= 1){
        return 1;
    }else{
        return num * arguments.callee(num - 1);    //解除耦合
    }
}

函數(shù)內(nèi)部的另一個特殊對象是this,this引用的是函數(shù)執(zhí)行的環(huán)境對象——或者也可以說是this值(當在網(wǎng)頁全局作用域中調(diào)用函數(shù)時,this對象引用的就是window)

ECMAScript5也規(guī)范化了另一個函數(shù)對象的屬性:caller。這個屬性中保存著調(diào)用當前函數(shù)的函數(shù)的引用,如果是在全局作用域中調(diào)用當前函數(shù),它的值為null。

function outer(){
    inner();
}

function inner(){
    console.log(arguments.callee.caller);    //為了實現(xiàn)更松散的耦合
}

outer();

當函數(shù)在嚴格模式下運行是,訪問arguments.callee會導致錯誤。ECMAScript 5 還定義了arguments.caller屬性,但在嚴格模式下訪問它也會導致錯誤,而在非嚴格模式下這個屬性始終是undefined。定義arguments.callee屬性是為了分清arguments.caller和函數(shù)的caller屬性。以上變化都是為了加強這門語言的安全性,這樣第三方代碼就不能在相同的環(huán)境里窺視其他代碼了。
嚴格模式還有一個限制:不能為函數(shù)的caller屬性賦值,否則會導致錯誤。

5.5 函數(shù)屬性和方法

每個函數(shù)都包含兩個屬性:lengthprototype

length:表示函數(shù)希望接受的命名參數(shù)的個數(shù)

prototype:對于ECMAScript中的引用類型而言,prototype是保存它們所有實例方法的真正所在

諸如toStr()和valueOf()等方法實際上都保存在prototype名下,只不過是通過各自對象的實例訪問罷了。在ECMAScript 5 中,prototype屬性是不可枚舉的,因此使用for-in無法發(fā)現(xiàn)

每個函數(shù)都包含兩個非繼承而來的方法:apply()call()。這兩個方法的用途都是在特定的作用域中調(diào)用函數(shù),實際上等于設(shè)置函數(shù)體內(nèi)this對象的值

apply():接收兩個參數(shù),第一個是在其中運行函數(shù)的作用域,第二個是參數(shù)數(shù)組

call():與apply()作用相同,變化在于傳遞給函數(shù)的參數(shù)必須逐個列舉出來

在不給函數(shù)傳遞參數(shù)的情況下,使用哪個方法都無所謂

window.color = "red";
var o = {color : "blue"};

function sayColor(){
    console.log(this.color);
}

sayColor();                //red

sayColor.call(this);    //red
sayColor.call(window);    //red
sayColor.call(o);        //blue

使用call()(或apply())來擴充作用域的最大好處,就是對象不需要與方法有任何耦合關(guān)系

ECMAScript還定義了一個方法:bind()。這個方法會創(chuàng)建一個函數(shù)的實例,其this值會被綁定到傳給bind()函數(shù)的值

window.color = "red";
var o = {color : "blue"};

function sayColor(){
    console.log(this.color);
}
var objectSayColor = sayColor.bind(o);
objectSayColor();        //blue

每個函數(shù)繼承的toLocaleString()、toString()valueOf()方法始終都返回函數(shù)的代碼

6 基本包裝類型

為了便于操作基本類型值,ECMAScript還提供了3個特殊的引用類型:Boolean、Number和String。這些類型與其他引用類型相似,但同時也具有與各自的基本類型相應的特殊行為。實際上,每當讀取一個基本類型值得時候,后臺就會創(chuàng)建一個對應的基本包裝類型的對象,從而讓我們能夠調(diào)用一些方法來操作這些數(shù)據(jù)

var s1 = "some text";
var s2 = s1.substring(2);

進行以上操作,后臺會自動完成以下一系列處理:

創(chuàng)建String類型的一個實例;

在實例上調(diào)用指定的方法;

銷毀這個實例。

可以將以上三個步驟想象成是執(zhí)行了下列ECMAScript代碼:

var s1 = new String("some text");
var s2 = s1.substring(2);
s1 = null;

除非必要時,否則不推薦顯式地調(diào)用Boolean、Number和String來創(chuàng)建基本包裝類型的對象,因為這種做法很容易讓人分不清自己是在處理基本類型還是引用類型的值。對基本包裝類型的實例調(diào)用typeof會返回"object",而且所有基本包裝類型的對象在轉(zhuǎn)換為布爾類型時值都是true

Object構(gòu)造函數(shù)也會像工廠方法一樣,根據(jù)傳入值的類型返回相應基本包裝類型的實例:

var obj = new Object("some text");
console.log(obj instanceof String);        //true

使用new調(diào)用基本包裝類型的構(gòu)造函數(shù),與直接調(diào)用同名的轉(zhuǎn)型函數(shù)時不一樣的:

var value = "25";
var number = Number(value);        //轉(zhuǎn)型函數(shù)
console.log(typeof number);        //"number"

var obj = new Number(value);    //構(gòu)造函數(shù)
console.log(typeof obj);        //"object"
6.1 Boolean類型

Boolean類型是與布爾值對應的引用類型

var booleanObject = new Boolean(true);

boolean類型的常見問題:

var falseObject = new Boolean(false);
var result = falseObject && true;
console.log(result);    //true

var falseValue = false;
result = falseValue && true;
console.log(result);    //false

console.log(typeof falseObject);        //object
console.log(typeof falseValue);            //boolean
console.log(falseObject instanceof Boolean);        //true
console.log(falseValue instanceof Boolean);        //false
6.2 Number 類型

Number類型是與數(shù)字值對應的引用類型

var numberobject = new Number(10);

可用toString()方法傳遞一個表示基數(shù)的參數(shù),告訴它返回幾進制數(shù)值的字符串形式

除了繼承的方法(valueOf()、toLocaleString()、toString())外,Number類型還提供了一些用于將數(shù)值格式化為字符串的方法:

toFixed():按照指定的小數(shù)位返回數(shù)值的字符串表示

toExponential():該方法返回以指數(shù)表示法(e表示法)表示的數(shù)值的字符串形式。toExponential()也接收一個參數(shù),指定輸出結(jié)果中的小數(shù)位數(shù)

toPrecision():該方法可能會返回固頂大小(fixed)格式,也可能返回指數(shù)(exponential)格式;具體規(guī)則是看哪種格式最合適。這個方法接收一個參數(shù),即表示數(shù)值的所有數(shù)字的位數(shù)(不包括指數(shù)部分)

6.3 String 類型

String類型是字符串的對象包裝類型

var stringObject = new String("hello world");

String類型的每個實例都有一個length屬性,表示字符串中包含多個字符

var stringValue = "杰神 ,shuai /" ";
console.log(stringValue.length);    //12

即使字符串中包含雙字節(jié)字符(不是占一個字節(jié)的ASCII字符),每個字符也仍然算一個字符

7 單體內(nèi)置對象

ECMA-262對內(nèi)置對象的定義是:“由ECMAScript實現(xiàn)提供的、不依賴于宿主環(huán)境的對象,這些對象在ECMAScript程序執(zhí)行之前就已經(jīng)存在。”意思就是說,開發(fā)人員不必顯式地實例化內(nèi)置對象,因為它們已經(jīng)實例化了。除了Object、Array和String等內(nèi)置對象,ECMA-262還定義了兩個單體內(nèi)置對象:Global和Math

JavaScript原生對象及擴展

7.1 Global對象

Global(全局)對象可以說是ECMAScript中最特別的一個對象了,因為不管從什么角度上看,這個對象都是不存在的。不屬于任何其他對象的屬性和方法,最終都是它的屬性和方法。諸如isNaN()、isFinite()parseInt()以及parseFloat(),實際上都是Global對象的方法

Global對象還包含其他一些方法:

Global對象的encodeURI()encodeURIComponent()方法可以對URI(Uniform Resource Identifiers,通用資源標識符)進行編碼,以便發(fā)送給瀏覽器

eval():該方法就像是一個完整的ECMAScript解析器,它只接受一個參數(shù),即要執(zhí)行的ECMAScript(或JavaScript)字符串

eval("alert("hi")");
//上行代碼的作用等價于下面這行代碼
alert("hi");

特殊的值undefined、NaN、以及Infinity都是Global對象的屬性。此外,所有原生引用類型的構(gòu)造函數(shù),像Object和Function,也都是Global對象的屬性。

ECMAScript 5 明確禁止給undefined、NaN和Infinity賦值,這樣做即使在非嚴格模式下也會導致錯誤

7.1.4 window對象

ECMAScript雖然沒有指出如何訪問Global對象,但Web瀏覽器都是將這個全局對象作為window對象的一部分加以實現(xiàn)的。因此,在全局作用域中聲明的所有變量和函數(shù),都成為了window對象的屬性

JavaScript中的window對象除了扮演ECMAScript規(guī)定的Global對象的角色外,還承擔了很多別的任務

另一種取得Global對象的方法是使用以下代碼:

var global = function(){
    return this;
}();
7.2 Math對象

ECMAScript還為保存數(shù)學公式和信息提供了一個公共位置,即Math對象。與我們在JavaScript直接編寫的計算功能相比,Math對象提供的計算功能執(zhí)行起來要快得多。Math對象中還提供了輔助完成這些計算的屬性和方法

7.2.1 Math對象的屬性

Math.PI:π的值

……

7.2.2 min()和max()方法

min()和Max()方法用于確定一組數(shù)值中的最小值和最大值。這兩個方法都可以接收任意多個數(shù)值參數(shù)

7.2.3 舍入方法

Math.ceil()

Math.floor()

Math.round()

7.2.4 random()方法

random()方法返回大于等于0小于1的一個隨機數(shù)。
套用下面的公式,就可以利用Math.random()從某個整數(shù)范圍內(nèi)隨機選擇一個值

值 = Math.floor(Math.random()) * 可能值的總數(shù) + 第一個可能的值

var num = Math.floor(Math.random() * 9 + 2);    //介于2到10之間的值
function selectFrom(lowerValue, upperValue){
    var choices = upperValue - lowerValue + 1;
    return Math.floor(Math.random() * choices + lowerValue);

    var num = selectFrom(2, 10);
    console.log(num);    //介于2到10之間的值
}


var colors = ["red", "green", "blue"];
var color = colors[selectFrom(0, colors.lenght-1)];
console.log(color);        //可能是數(shù)組中包含的任何一個字符串

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/82431.html

相關(guān)文章

  • JS高程讀書筆記--五章引用類型

    摘要:高程讀書筆記第五章類型創(chuàng)建實例的方式有兩種。第一種是使用操作符后跟構(gòu)造函數(shù),另一種方式是使用對象字面量表示法。 JS高程讀書筆記--第五章 Object類型 創(chuàng)建Object實例的方式有兩種。第一種是使用new操作符后跟Object構(gòu)造函數(shù),另一種方式是使用對象字面量表示法。 在通過對象字面量定義對象時,實際上不會調(diào)用Object構(gòu)造函數(shù) 訪問對象屬性時可以使用點表示法和方括號表示法。...

    anRui 評論0 收藏0
  • 《Javascript高級程序設(shè)計 (第三版)》五章 引用類型

    摘要:類型沒有重載聲明了兩個同名函數(shù),而結(jié)果則是后面的函數(shù)覆蓋了前面的函數(shù)。引用的是函數(shù)據(jù)以執(zhí)行的環(huán)境對象函數(shù)屬性和方法表示函數(shù)希望接收的命名參數(shù)的個數(shù)。而自動創(chuàng)建的基本包裝類型的對象,則只存在于一行代碼的執(zhí)行瞬間,然后立即被銷毀。 Function類型 沒有重載 聲明了兩個同名函數(shù),而結(jié)果則是后面的函數(shù)覆蓋了前面的函數(shù)。 var addSomeNumber = function (num)...

    GeekGhc 評論0 收藏0
  • 五章-Java修飾符#yyds干貨盤點#

    摘要:修飾符包包的概述和使用其實就是文件夾作用對類進行分類管理包的定義格式格式包名多級包用分開范例帶包的類編譯和執(zhí)行手動建包按照以前的格式編譯文件手動創(chuàng)建包建立文件夾然后在下建立文件夾把文件放到包的最里面把文件放到下的這個文件夾下帶包 1 修飾符1.1 包1.1.1 包的概述和使用其實就是文件夾作用:對類進行分類管理...

    caspar 評論0 收藏0
  • 《 JavaScript程序設(shè)計》—— 五章 函數(shù)總結(jié)及練習

    摘要:在編寫處理對象的函數(shù)時,必須做出決定是希望這個函數(shù)修改其對象實參的的屬性,還是返回新對象。高階函數(shù)就是以形參或者返回函數(shù)的函數(shù),他們可以簡化集中程序設(shè)計任務,可以減少腳本中的共同代碼數(shù)量。編寫一個函數(shù),返回一個給定字符在字符串中的出現(xiàn)次數(shù)。 主要總結(jié): 函數(shù)值是一個帶有參數(shù)的代碼塊,可以根據(jù)需要任意運行(調(diào)用) 調(diào)用一個函數(shù),我們會向它的形參傳送實參。多余的形參會被轉(zhuǎn)換為undefi...

    genefy 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<