溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

javaScript的主要引用類型

發(fā)布時(shí)間:2020-05-06 16:27:52 來(lái)源:億速云 閱讀:760 作者:Leah 欄目:web開(kāi)發(fā)

javaScript的主要引用類型有哪些?相信大部分人對(duì)javaScript的引用類型不了解,為了讓大家更加了解javaScript引用類型,小編給大家總結(jié)了以下詳細(xì)內(nèi)容,一起漲知識(shí)吧。

概念 : 引用類型是一種數(shù)據(jù)結(jié)構(gòu),用于將數(shù)據(jù)和功能組織在一起,也就是 類;
對(duì)象為特殊的引用類型實(shí)例。新對(duì)象由new后加一個(gè)構(gòu)造函數(shù)創(chuàng)建的。
構(gòu)造函數(shù):用于創(chuàng)建對(duì)象的函數(shù)。
例 : var person = new Object();
object為構(gòu)造函數(shù),為新對(duì)象提供默認(rèn)屬性與方法。

1、object類型

//普通方法

var person = new Object();
person.name = "syr";
person.age = 22;

//對(duì)象字面量

var person = {    
    name : "syr",    
    age : 22,    
    5 : true            //5自動(dòng)轉(zhuǎn)為"5"
}
* 數(shù)值屬性名會(huì)自動(dòng)轉(zhuǎn)為字符串;
* 對(duì)象字面量推薦只在屬性名可讀的情況下使用,也是向函數(shù)傳遞大量參數(shù)首選方式,必須使用命名參數(shù),對(duì)象字面量封裝多個(gè)可選參數(shù)。
* 訪問(wèn)對(duì)象一般用點(diǎn)表示法,js中也可以用方括號(hào)法,將要訪問(wèn)的屬性以字符串的形式放進(jìn)去。

例 : alert(person["name"]); // 等于 person.name

* 方括號(hào)法主要優(yōu)點(diǎn)是可以通過(guò)變量來(lái)訪問(wèn)屬性。
* 點(diǎn)表示法屬性名不能包含錯(cuò)誤的自負(fù)或者保留字和關(guān)鍵字,但方括號(hào)法可以。
* 通常,除非必須使用變量來(lái)訪問(wèn)屬性,否則推薦使用點(diǎn)表示法。

2、Array類型:

* 數(shù)組:數(shù)據(jù)的有序列表。

es中的數(shù)組每一項(xiàng)都可以保存任何類型的數(shù)據(jù),數(shù)組大小也可以動(dòng)態(tài)調(diào)整。

方法一 : new可以省略;
var colors = new Array();
方法二 : 數(shù)組字面量
var colors = ["red","blue","green"];

與對(duì)象一樣,字面量不會(huì)調(diào)用Array構(gòu)造函數(shù)。

var colors = ["red","blue","green"];
colors[0] // 顯示第一項(xiàng)
colors[2] = "black"; // 修改第二項(xiàng)
colors[3] = "brown" ; //增加第四項(xiàng)
colors.length = "black" ;  增加一項(xiàng)

length屬性可返回?cái)?shù)組的長(zhǎng)度,可增加和移除數(shù)組的項(xiàng)。

* 檢測(cè)數(shù)組

value instanceof Array // 判斷是否為數(shù)組
Array.isArray(value) // isArray確定到底是不是數(shù)組,不管在哪個(gè)環(huán)境中創(chuàng)建
* 轉(zhuǎn)換方法

所有對(duì)象都具有toLocalString()方法,后臺(tái)調(diào)用tostring(),null和undefined返回結(jié)果以空字符串表示。

* 棧方法 : 后進(jìn)先出(吃了吐)

push() : 接受任意數(shù)量參數(shù),添加到末尾;
pop() : 移除數(shù)組末尾一項(xiàng)。

* 隊(duì)列方法 : 先進(jìn)先出(吃了拉);

shift() : 前端移除項(xiàng)并返回該項(xiàng),長(zhǎng)度減1;
unshift() : 前端推入一項(xiàng);

* 重排序方法

reverse() : 逆序;
sort() : 順序;
比較的是字符串,會(huì)自動(dòng)轉(zhuǎn)為字符串。
如 "10" 位于"5"的前面,因此應(yīng)傳給sort一個(gè)比較函數(shù)。

function compare(value1,value2){    
    if(value1 < value2){        
        return -1;    
    }else if(value1 > value2){        
    return 1;    
    }else{        
    return 0;    
    }
    }
value = [0,1,5,10,15];value.sort(value);  //0,1,5,10,15
* 操作方法

concat()拼接 : 先把原數(shù)組復(fù)制一個(gè),然后把參數(shù)添加至末尾,原數(shù)組不變。slice(1,2) : 剪切:返回參數(shù)1起始位置,參數(shù)2為結(jié)束位置,包前不包后,原數(shù)組不變。solice() : 主要向數(shù)組中插入項(xiàng)。(數(shù)組操作最主要的方法):
-刪除 : 可刪除任意數(shù)量項(xiàng),制定兩個(gè)參數(shù): arg1位要?jiǎng)h除的位置,arg2為要?jiǎng)h除的項(xiàng)數(shù),例:splice(0,2) : 刪除前兩項(xiàng);
-插入 : 三個(gè)參數(shù)。起始位置,刪除項(xiàng)數(shù)和要插入的項(xiàng),可在后面插入多個(gè)項(xiàng)。例 : solice(2,0,"red","green");從位置2插入"red"和"green".
-替換 : 同上,插入項(xiàng)不必與刪除項(xiàng)數(shù)相等。
注意 : splice()會(huì)改變?cè)紨?shù)組;

* 位置方法

indexof() : 從頭查找
lastIndexof() : 從未查找
arg1表示要查找的項(xiàng),arg2為起始位置(可選參數(shù)),沒(méi)找到返回-1,比較時(shí)使用的是全等。

var number = [1,2,3,4,5,4,3,2,1];
number.indexof(4) ;  //返回5

* 迭代方法

every();
filter();
forEach();
map();

* 歸并方法

reduce() : 從頭
reduceRight ; 從尾
都會(huì)迭代數(shù)組所有項(xiàng),構(gòu)建一個(gè)最終返回項(xiàng)。

3、Date類型

var now = new Data();
date.parse("May 25,2004"); // 新建特定日期
* 繼承: 重寫(xiě)了3個(gè)方法

toLocalString() : 瀏覽器設(shè)置日期;
toString();
valueof();

* 日期格式化方法:

-toDateString() : 特定格式顯示星期、月、日、年;
-toTimeString() : 時(shí)分秒,時(shí)區(qū);
toLocalDateString() : 按地區(qū)顯示星期、月、日、年;
toLocalTimeString() : 時(shí)分秒;
toUTCString() : 特定格式顯示完整UTC日期,具體顯示因?yàn)g覽器而異。

4、RegExp類型: 正則表達(dá)式;

var expression = /pattern/flags;
標(biāo)志flags包括 :
g : 全局;
i : 不區(qū)分大小寫(xiě);
m : 多行模式;
例子 : var pattern = /at/g 全局找at
var pattern = /[bc]at/i ; 匹配第一個(gè)bat或cat,不區(qū)分大小寫(xiě)。
無(wú)意符須轉(zhuǎn)義;
* RegExp實(shí)例方法:

RegExp主要方法是
-exec():捕獲組,參數(shù)為一個(gè)字符串,返回?cái)?shù)組,無(wú)匹配返回null,返回多兩個(gè)額外屬性:index 和 input。
index : 位置 input:捕獲的字符串
-test():匹配則返回true,常用來(lái)驗(yàn)證用戶輸入。

5、function類型

* 概念

函數(shù)實(shí)際就是對(duì)象,與其他引用類型一樣,有屬性和方法,函數(shù)名就是只想對(duì)象的指針。

* 沒(méi)有重載

聲明相同函數(shù)時(shí),后面的會(huì)覆蓋前面的函數(shù)。

* 函數(shù)聲明和函數(shù)表達(dá)式
function sum(){    }    // 函數(shù)聲明
var sum = function(){    }      // 函數(shù)表達(dá)式函數(shù)聲明可以變量提升,任何時(shí)候任何位置都可以調(diào)用。
* 作為值的函數(shù)

把函數(shù)作為參數(shù)傳給另一個(gè)函數(shù),要訪問(wèn)函數(shù)而不執(zhí)行函數(shù),必須去掉函數(shù)名后面的那對(duì)圓括號(hào)
// 從一個(gè)函數(shù)返回另一個(gè)函數(shù)
// 根據(jù)某個(gè)對(duì)象數(shù)組排序
function compare(pro){

return function(obj1,obj2){        
var val1 = obj1[pro];        
var val2 = obj2[pro];        
if(val1 > val2){            
return 1;        
}else if(val1 < val2){  
          return -1;        
}else{
          return 0;        
}}}
var data = [{name:"AN:,"age":20},{name:"BN:,"age":30}]
data.sort(compare("name"));
* 函數(shù)的內(nèi)部屬性

內(nèi)部含有兩個(gè)特殊對(duì)象:this和argument
-argument:包含著傳入的所有參數(shù),內(nèi)有callee屬性,是一個(gè)指針,只想擁有此對(duì)象的函數(shù)。
// 遞歸算法算階乘
function fac(num){

if(num <= 1){
        return 1;    
        }else{
      return num * fac(num-1);   // 等同于 return num * argument.callee(num -1);
      }}
 方法一與函數(shù)名耦合嚴(yán)重,且只有名稱確定或不發(fā)生改變時(shí)使用。
 方法二更合適
* this : 引用的是函數(shù)執(zhí)行的環(huán)境對(duì)象,函數(shù)的名稱僅為包含著指針的變量而已,所以在不同的環(huán)境中執(zhí)行引用的也是相同的函數(shù)。

* 函數(shù)的屬性和方法(重點(diǎn))

函數(shù)也是對(duì)象,因此有屬性和方法;

* -屬性 : length 和 prototype

-length 表示希望接收命名參數(shù)的個(gè)數(shù)。
-prototype 是保存所有勢(shì)力和方法的真正所在,如里面保存著tostring(),valueOf等,也可以用來(lái)繼承,極為重要。
prototype屬性不可枚舉,因此不能用for-in。

* -方法 : 非繼承而來(lái)的方法有兩個(gè): apply() 和 call().

作用為在特定的作用域中調(diào)用函數(shù),實(shí)際是設(shè)置函數(shù)體內(nèi)this對(duì)象的值。兩個(gè)方法的作用相同,區(qū)別為接收參數(shù)的方式不同。call() : 參數(shù)一一列舉
apply() : 參數(shù)為一個(gè)數(shù)組兩者的作用不止是傳遞參數(shù),真正的作用是擴(kuò)充函數(shù)的作用域。把訪問(wèn)不到的地方傳進(jìn)來(lái)。
bind():方法,創(chuàng)建函數(shù)實(shí)例,與this值綁定,全局作用域。

6、基本包裝類型 (也是對(duì)象)

為方便操作基本類型值,提供3個(gè)特殊引用類型:Boolean,Number和String.
每讀取值后臺(tái)都會(huì)創(chuàng)建對(duì)應(yīng)的基本包裝類型的對(duì)象,才可以用方法操作數(shù)據(jù)。
引用類型與基本包裝類型主要區(qū)別為對(duì)象生存期,用new創(chuàng)建引用累心實(shí)例一直保存在內(nèi)存中,自動(dòng)創(chuàng)建基本包裝類型存在執(zhí)行瞬間,然后立即銷毀,所以不能給基本類型添加屬性和方法。

* Boolean 類型

typeof 基本類型 // ‘boolean’typeof 引用類型 //  'object'建議永不要使用Boolean對(duì)象

* Number 類型

toFixed()方法 : 按照指定方法返回?cái)?shù)值的字符串表示。
var num = 10;num.tpFixed(2) // '10.00'
toExpoential() : 冪

* String 類型

屬性:length : 表示含多少個(gè)字符方法:
1)字符方法:charAt()和charCodeAt():查找某個(gè)字符在字符串中的位置。    charCodeAt():查找字符編碼
2)字符串操作方法:拼接用+號(hào)
-三個(gè)給予字符串創(chuàng)建新串:
slice():切片             // 第一個(gè)參數(shù)為起始位置,第二個(gè)參數(shù)為結(jié)束位置substr():子函數(shù)       // 第一個(gè)參數(shù)為起始位置,第二個(gè)參數(shù)為截取的個(gè)數(shù)substring():子串     // 第一個(gè)參數(shù)為起始位置,第二個(gè)參數(shù)為結(jié)束位置
以上方法都不會(huì)影響原始字符串
3)字符串位置方法:
indexof:從字符串中查找字符串,返回位置,查不到則返回-1.
indexOf:從頭查找lastIndexOf:從尾查找  返回第一次出現(xiàn)的位置
4)trim:創(chuàng)建字符串副本,刪除前后所有空格,原始字符串不變。
5)字符串大小寫(xiě)轉(zhuǎn)變:
toLocalUpperCase():轉(zhuǎn)大寫(xiě),針對(duì)特定地區(qū)
toLocalLowerCase():轉(zhuǎn)小寫(xiě),針對(duì)特定地區(qū)
toUpperCase():轉(zhuǎn)大寫(xiě)
toLowerCase():轉(zhuǎn)小寫(xiě)
6)字符串模式匹配方法:
match():與RegExp的exec方法相同,參數(shù)為正則表達(dá)式活RegExp對(duì)象。
search():從尾開(kāi)始查找,參數(shù)與match相同,找不到返回-1
replace():替換
split():切片,基于指定分隔符字符串為多個(gè)子字符串。第二個(gè)參數(shù)可選,返回幾個(gè)數(shù)組。

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

已自行實(shí)例化,可直接使用,Global和Math

* -Global對(duì)象,全局對(duì)象:所有全局作用域中屬性和方法都是它的。

--url編碼
--eval():解析字符串代碼并執(zhí)行

* -Math對(duì)象

--Math.ceil():向上取整。
--Math.floor():向下取整。
--Math.round():四舍五入。

* random()方法:隨機(jī)數(shù),返回0~1之間隨機(jī)數(shù)。

看完上訴內(nèi)容,你們對(duì)javaScript的主要引用類型大概了解了嗎?如果想了解更多,歡迎關(guān)注億速云行業(yè)資訊頻道哦!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI