5.引用類型

前面講過统阿,根據(jù)內(nèi)存不同。變量分為:基本數(shù)據(jù)類型和引用類型
對象是某個特定引用的實例姥卢。新對象是使用new操作符卷要,緊跟一個構(gòu)造函數(shù)。

1.Object數(shù)據(jù)類型独榴。

1.創(chuàng)建Object實例方法僧叉。

//第一種:構(gòu)造函數(shù)創(chuàng)建
var obj = new Object();
obj.age = 12;
//第二種:字面量創(chuàng)建,不會調(diào)用Object構(gòu)造函數(shù)
var person = {
  age:12
}
var person1= {};
person.age = 12;

注意:字面量創(chuàng)建棺榔,索引會自動轉(zhuǎn)換為字符串瓶堕。
2.屬性訪問
1.一般來講,我們都是采用.屬性進行訪問屬性值的症歇。
2.但是捞烟,我們也可以采用[屬性]進行屬性值訪問。
使用方法區(qū)別:
一般我們使用.屬性当船。但是有些屬性里面包含了空格或者采用變量的方法進行訪問的時候题画,我們就使用[屬性]進行訪問。

2.Array類型

數(shù)組的每一項都可以保存不同的類型的值
1.創(chuàng)建數(shù)組的方法

//第一種方法:
var color = new Array();
//如果事先知道數(shù)組的大小德频,還可以傳入數(shù)組的大小苍息,或者值
var color1 = new Array(20);//每一個值都是undefined
var color2 = new Array("red", "blue", "green");

//第二種方法
var color3 = ["yellow", "white", "pink"];
//注意不要這樣
var color3 = ["yellow", "white", ];//很容易報錯

2.length屬性
數(shù)組的length屬性,可以返回數(shù)組的長度壹置。但是這個屬性并不是只讀的竞思,是可以設置的。

var color = ["yellow", "white", "pink"];
color[2]//pink
color.length = 2;
color[2]//undefined

如果length大于數(shù)組的值钞护,后面會添加empty值(undefined)盖喷,如果小于,那樣就會移除數(shù)組的值难咕。數(shù)組是有一定長度的课梳,超出了會影響性能并且發(fā)生異常距辆。
3.檢測數(shù)組
1.value instanceof Array
之前講過instanceof的原理:左邊的原型鏈上能否找到右面的prototype相對應的值。但是它有局限性暮刃。不同的全局環(huán)境跨算,構(gòu)造函數(shù)的prototype是不相同的。
2.Array.isArray(value)
4.轉(zhuǎn)換方法
1.所有對象都有toLocalString(),toString(),valueOf()方法椭懊。注意null和undefined沒有這些方法

[1, 2].toString(); //"1,2"
toLocalString(); //會調(diào)用數(shù)組每一項的toLocalString
toString();//會調(diào)用數(shù)組每一項的toString
alert是調(diào)用的toString

2.join方法
在數(shù)組的每一個項之間诸蚕,添加join方法傳入的參數(shù)。

var color = ["yellow", "white", "pink",,,,,];
color.join('||')//"yellow||white||pink||||||||"

3.棧方法氧猬,會返回數(shù)組長度
1.push方法背犯,在棧的頂部插入

var color = ["yellow", "white", "pink"];
color.push('blue');
color;  //["yellow", "white", "pink", "blue"]

2.pop方法
pop不接受傳值,在棧的頂部彈出

var color = ["yellow", "white", "pink"];
color.pop();
color;//["yellow", "white"];

4.隊列方法
1.shift

var color = ["yellow", "blue"];
color.shift();//"yellow"

2.unshift在我看來盅抚,和push的作用是一樣的媳板。

var color = ["yellow", "blue"];
color.unshift('green','black');
color// ["green",'black', "yellow", "blue"]

5.重排序方法
1.reverse():反轉(zhuǎn)數(shù)組

var color = ["yellow", "blue"];
color.reverse()//["blue", "yellow"]

2.sort():對數(shù)組進行排序
它是根據(jù)字符串編碼進行排序,因此不能直接使用這個方法泉哈。但是它提供了傳入一個函數(shù)作為參數(shù)蛉幸,便于我們判斷。這個函數(shù)需要傳入兩個參數(shù)丛晦,如果需要反轉(zhuǎn)則返回一個正數(shù)奕纫,否則返回一個負數(shù)。

var a = [2,6,4,7,3]; 
undefined
a.sort(function(a,b){
    if(a>b){
        return 1
    }else{
        return -1
    }
})
a;// [2, 3, 4, 6, 7]

//但是我們往往采用減的方法
a.sort(function(a,b){
    return a-b;
})//[2, 3, 4, 6, 7]

6.操作方法
1.concat方法烫沙∑ゲ悖基于當前數(shù)組,創(chuàng)建一個新數(shù)組锌蓄。
在沒有傳參的情況下升筏,只是復制當前數(shù)組并返回副本。如果傳入是一個或者多個數(shù)組瘸爽,會把數(shù)組的每一項您访,添加到當前數(shù)組的副本。不是數(shù)組剪决,會簡單的添加到末尾灵汪。

var a = [2,6,4,7,3]; 
a.concat('2',[1,2,3,[4,5]],{'name':'alen'});
a;//[2, 6, 4, 7, 3, "2", 1, 2, 3, Array(2), {…}]

2.slice方法「塘剩基于當前數(shù)組創(chuàng)建一個或者多個數(shù)組享言。接收一個或者兩個參數(shù)。當傳入一個參數(shù)渗鬼,表示返回當前位置開始到最后一個參數(shù)览露。傳入兩個參數(shù),表示返回第一個參數(shù)到第二個參數(shù)之間的數(shù)據(jù)譬胎。

var a = [2,6,4,7,3];
a.slice(1)//[6, 4, 7, 3]
a.slice(1,4)//[6, 4, 7]

3.splite()方法差牛∶可以插入,刪除多糠,替換等操作累舷。其中可以傳入浩考〖锌祝可以傳入多個參數(shù)(a,b,c,d,e)a代表開始位置,b表示刪除多少項析孽,c,d,f表示在a之后插入的參數(shù)

var a = [2,6,4,7,3]; 
a.splice(1,1)//返回刪除的項 刪除
a// [2, 4, 7, 3];
a.splice(1,0,10,20)//插入
a//[2, 10, 20, 4, 7, 3]
a.splice(1,1,60)//修改
a//[2, 60, 20, 4, 7, 3]

7.位置方法
1.indexOf()
2.lastIndexOf()
都可以接收兩個參數(shù)搭伤,要查找的項目(必須),起始位置(可選)袜瞬。使用===操作符
8.迭代方法
1.every():每一個返回true則返回true

var a = [2,6,4,7,3]; 
a.every(function(item,index,array){
    return item >= 2
})
//true

2.filter():返回為true的項怜俐,組成數(shù)組
3.forEach():運行給定函數(shù),沒有返回值邓尤。
4.map():調(diào)用結(jié)構(gòu)組成數(shù)組
5.some():有一個返回true則返回true
9.歸并方法
1.reduce():從第一項開始迭代
2.reduceRight():從最后一項開始迭代
這兩個方法都會迭代數(shù)組的所有項拍鲤,構(gòu)建一個最終返回值。都接收4個參數(shù)(a,b,c,d)a表示前一個值汞扎,b表示當前值季稳,c表示,項目索引澈魄,d表示數(shù)組對象

var num = a.reduce(function(pre,cur,index,arr){
    return pre+cur
})
num//22
3.Date類型

主要掌握獲取年月日的方法景鼠。可以自行查詢API

4.RegExp

1.創(chuàng)建方法

pattern:表示匹配的方法
flags:匹配模式包含3種模式:
g:全局匹配痹扇,并非在找到一個后就返回
i:不分大小寫模式
m:多行匹配

var expression = / pattern / flags;
var expression = new RexExp(pattern, flags);//注意傳遞的兩個參數(shù)都是字符串

//eg:匹配所有有at的實例
var pattern1 = /at/g;

使用正則表達式字面量和RegExp構(gòu)造函數(shù)創(chuàng)建的正則表達式不一樣铛漓。
在ES3中,正則表達式的字面量會共享一個RexExp實例鲫构。使用構(gòu)造函數(shù)浓恶,每一次都會創(chuàng)建一個實例。

//eg:
var re = null;
      i;
for(i=0; i<10; i++){
  re = /cat/g;
  re.test('catastrophe');
}

for(i=0; i<10; i++){
  re = new RegExp('cat', 'g');
  re.test('catastrophe');
}

2.正則表達式的元字符

3.每個RegExp實例都有以下屬性
1.global:是否設置g標值
2.ignoreCase:是否設置i標值
3.multiline:是否設置m標值
4.lastIndex:開始搜索的下一個匹配字符位置结笨。
5.source:字符串模式
4.RegExp實例方法
1.exec():接收要匹配的字符串问顷。返回包含第一個匹配項信息的數(shù)組,沒有匹配的情況下返回null禀梳。它有額外的兩個屬性
index:匹配項在字符串中位置
input:應用正則表達式的字符串

//對于這個方法而言
//即使在模式中設置了g標志整胃,他每次都只會返回一個匹配項
//不設置全局標志的情況下
//在同一個字符上多次調(diào)用該方法,都只會返回第一個匹配項
//設置了g標志
//每次調(diào)用都會在字符串中繼續(xù)查找新的匹配項加矛。
//eg:
var text = 'cat, bat, sat, fat';
var pattern1 = /.at/;

var match1 = pattern1.exec(text)
console.log(match1[0]);//cat
var match2 = pattern1.exec(text)
console.log(match2[0]);//cat

var pattern2 = /.at/g;

var match3 = pattern2.exec(text)
console.log(match3[0]);//cat
var match4 = pattern2.exec(text)
console.log(match4[0]);//bat

2.test()
接受一個字符串作為參數(shù)隘梨。有匹配的情況下,返回true嘴瓤,否則返回false扫外。這里對于上面的/g就不太適用了莉钙。可能是瀏覽器升級的原因筛谚。理論上加上/g不能一直匹配磁玉。
還有一點。構(gòu)造函數(shù)形式使用toString()會轉(zhuǎn)化為字面量形式驾讲。

var pattern = new RegExp('\\[bc]\\]at','g')
pattern.toString()//"/\[bc]\]at/g"

掌握到這種程度已經(jīng)夠用了哈N蒙 !吮铭!

5.Function類型

1.每個函數(shù)都是Function對象的實例时迫。
2.創(chuàng)建函數(shù)的方式

//不能夠在聲明之前使用
var add =  function (add1, add2){
   return add1+add2;
}

//可以在聲明之前使用
function sum(sum1, sum2){
  return sum1+sum2;
}

var sum2 = new Function('sum1', 'sum2', 'return sum1+sum2');//建議不使用這種方法

3.函數(shù)名其實是一個指向函數(shù)對象的指針。不會與函數(shù)名綁定

function add(add1, add2){
    return add1+add2;
}
var sum = add(1,2);
console.log(sum);//3
var add2 = add;
add = null;
var sum2 = add2(3,4);
console.log(sum2);//7

4.在js中沒有函數(shù)重載谓晌,可以函數(shù)重寫掠拳。后面的函數(shù)會覆蓋前面的函數(shù)。
5.函數(shù)可以作為參數(shù)或者作為值纸肉。因為函數(shù)名本身就是一個引用溺欧。這個就涉及到閉包。后面繼續(xù)為大家講解柏肪。
6.函數(shù)內(nèi)部屬性
函數(shù)里面有兩個特殊對象姐刁。
1.arguments:這是一個類數(shù)組對象,保存函數(shù)傳入?yún)?shù)预吆。具有callee屬性龙填。指向當前的函數(shù)。

function factorial(a){
  if(a<=1){
    return 1;
  }else{
    return a*arguments.callee(a-1);
  }
}

factorial(4)//24

2.this:函數(shù)執(zhí)行的環(huán)境對象拐叉。誰調(diào)用就指向的誰岩遗。其中函數(shù)caller屬性保存this指向的對象。

arguments.callee.caller//函數(shù)的調(diào)用者凤瘦。

但是不同的瀏覽器可能可能運行結(jié)果不同宿礁,容易出錯。
并且嚴格模式下蔬芥,不能為caller屬性賦值梆靖。
7.函數(shù)屬性和方法
1.length。表示函數(shù)希望接收的參數(shù)笔诵。
2.prototype返吻。屬性不可枚舉。
3.call()//調(diào)用對象乎婿,參數(shù)1测僵,參數(shù)2,參數(shù)3......
4.apply()//調(diào)用對象,數(shù)組參數(shù)捍靠。
5.bind()//創(chuàng)建一個函數(shù)實例沐旨,this會綁定到傳給bind()函數(shù)的值

window.color = "red";
var o = {color : "blue"};
function sayColor(){
    alert(this.color);
}
var objSayColor = sayColor.bind(o);
objSayColor();//blue
6.基本包裝類型

Boolean,String,Number
這些其實是基本數(shù)據(jù)類型,但是我們發(fā)現(xiàn)可以使用很多方法榨婆。作為基本數(shù)據(jù)類型是沒有屬性的磁携,更不談有什么方法。但是我們?yōu)槭裁茨苁褂眠@些方法呢良风。因為它被包裝了谊迄。
eg

var s1 = "some text";
s1.substring(2)//me text
//其中完成了這樣的過程
//1.創(chuàng)建一個String類型的實例var s1 = new String("some text");
//2.在實例上調(diào)用這個方法s1.substring(2)//me text;
//3.銷毀這個實例s1 = null;
//當然,第二種方法如果不銷毀拖吼,會占用內(nèi)存等問題
//但是第一種方法會自動銷毀鳞上。所以这吻,建議使用第一種

1.Boolean
基本包裝類型吊档,使用typeof都是object類型。
注意:我們不建議這樣使用還有一個原因

var falseObj = new Boolean(false);
var result = falseObj&&true;//true;
//原因唾糯,對象只要不是null怠硼,轉(zhuǎn)為bool值都是true。

2.Number
1.里面包含之前講的一些方法移怯。
2.還有toFixd方法
3.toExponential(n)方法n表示數(shù)字部分的位數(shù)
3.String
它包含了很多方法

var stringValue = 'hello world';
stringValue.charAt(1);//e
stringValue.charCodeAt(1);//101
stringValue[1]//e
stringValue.concat(',' , 'I love you');//hello world,I love you
stringValue.slice(1,4)//ell
stringValue.substring(1,4)//ell
stringValue.substr(0,4)//ello

stringValue.slice(1)//ello world
stringValue.substring(1)//ello world
stringValue.substr(1)//ello world
//但是對于負數(shù)的情況注意
//slice把所有負數(shù)轉(zhuǎn)為正數(shù)香璃,方法:與字符串長度相加
//substr:第一個轉(zhuǎn)為正數(shù),第二個轉(zhuǎn)為0舟误,方法:與字符串長度相加
//substring:所有負數(shù)轉(zhuǎn)為0葡秒。

stringValue.indexOf('o');//4
stringValue.lastIndexOf('o');//7
stringValue.lastIndexOf('o',6);//4   表示6之后的字符串忽略
stringValue.indexOf('o',5);//7    表示從5之后開始查找

var stringValue2 = '    hello world      ';
stringValue2.trim();//hello world
stringValue2.toUpperCase()//"    HELLO WORLD      "
stringValue2.toLowerCase()//"    hello world      "

//match方法
var stringValue3 = '    hello world   ell   '
stringValue3.match(/.ell/g);//["hell", " ell"]   有index和lastIndex屬性
//search方法
stringValue3.search(/.ello/g);//4始終從頭開始查找
stringValue3.search(/.ello/g);//4

//replace方法
var stringValue4 = 'cat, bat, hat';
stringValue4.replace(/at/g , 'ond');//"cond, bond, hond"
stringValue4.replace(/at/ , 'ond');//"cond, bat, hat"
7.單體內(nèi)置對象

1.Global對象
2.Math對象

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市嵌溢,隨后出現(xiàn)的幾起案子眯牧,更是在濱河造成了極大的恐慌,老刑警劉巖赖草,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件学少,死亡現(xiàn)場離奇詭異,居然都是意外死亡秧骑,警方通過查閱死者的電腦和手機版确,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來乎折,“玉大人绒疗,你說我怎么就攤上這事÷畛危” “怎么了吓蘑?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長酗洒。 經(jīng)常有香客問我士修,道長枷遂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任棋嘲,我火速辦了婚禮酒唉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘沸移。我一直安慰自己痪伦,他們只是感情好,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布雹锣。 她就那樣靜靜地躺著网沾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蕊爵。 梳的紋絲不亂的頭發(fā)上辉哥,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機與錄音攒射,去河邊找鬼醋旦。 笑死,一個胖子當著我的面吹牛会放,可吹牛的內(nèi)容都是我干的饲齐。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼咧最,長吁一口氣:“原來是場噩夢啊……” “哼捂人!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起矢沿,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤滥搭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后咨察,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體论熙,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年摄狱,在試婚紗的時候發(fā)現(xiàn)自己被綠了脓诡。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡媒役,死狀恐怖祝谚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情酣衷,我是刑警寧澤交惯,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響席爽,放射性物質(zhì)發(fā)生泄漏意荤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一只锻、第九天 我趴在偏房一處隱蔽的房頂上張望玖像。 院中可真熱鬧,春花似錦齐饮、人聲如沸捐寥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽握恳。三九已至,卻和暖如春捺僻,著一層夾襖步出監(jiān)牢的瞬間乡洼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工陵像, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留就珠,地道東北人寇壳。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓醒颖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親壳炎。 傳聞我的和親對象是個殘疾皇子泞歉,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容

  • ??引用類型的值(對象)是引用類型的一個實例腰耙。 ??在 ECMAscript 中,引用類型是一種數(shù)據(jù)結(jié)構(gòu)铲球,用于將數(shù)...
    霜天曉閱讀 1,042評論 0 1
  • 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的 JavaScript 類型 使用基本類型和基本包裝類型 引用類型的...
    悶油瓶小張閱讀 677評論 0 0
  • 你如果有一點概率的知識挺庞,你可能會有這樣的判斷: 彩票不應該買,因為中獎的概率太小了稼病!不要怕做飛機选侨,因為出事的概率也...
    AaronWu閱讀 280評論 0 0
  • 敏感肌膚就會出現(xiàn)紅血絲的情況,也可能是皮膚角質(zhì)層比較薄的原因然走,也會誘發(fā)紅血絲援制,還有就是皮膚過敏等等,都會導致皮膚疾...
    卡植蓮2閱讀 461評論 0 0
  • 昨天上午拔完牙后芍瑞,下午就接著發(fā)燒了晨仑,拔牙處又腫又疼,中午也沒敢吃喝任何東西『榧海回來后妥凳,忍痛去提了兩桶水,然后就躺床上...
    goldfish2017閱讀 259評論 0 0