第五章 引用類型
- 新對象是使用new操作符后面跟一個構(gòu)造函數(shù)來創(chuàng)建的冗疮,該函數(shù)出于創(chuàng)建新對象的目的而定義
5.1 Object類型
- 創(chuàng)建方法:1、new 后面跟構(gòu)造函數(shù)蝌戒;2设凹、對象字面量
5.2 Array類型
- new Array(3)創(chuàng)建包含3項的數(shù)組
- 數(shù)組項省略或越界或訪問超出數(shù)組長度的索引,沒值的項都會保存undefined
- length屬性不只是可讀的庵寞,可以從數(shù)組的末尾移除項或添加新項
var colors = ["red","blue","green"];
colors[colors.length] = 'black';
- 當把一個值放在超出當前數(shù)組大小的位置上時狸相,數(shù)組就會重新計算其長度值,即長度值等于最后一項索引+1
常用方法:
- Array.isArray()
- toString()創(chuàng)建一個數(shù)組值以逗號分隔的字符串
- join(),接收一個參數(shù)捐川,使用不同分隔符構(gòu)建拼接字符串脓鹃,默認使用逗號
- 棧方法:
- push()方法接收任意數(shù)量的參數(shù)赌厅,逐個添加到數(shù)組末尾倘是,返回修改后數(shù)組長度
- pop()方法移除末尾最后一項午衰,減少length值控淡,返回移除的項
- 隊列方法:
- shift()癌蚁,移除數(shù)組第一項并返回該項
- unshift("red","green")入篮,能夠在數(shù)組前端添加任意個項并返回新數(shù)組長度贾惦,多項的話從左向右推入
- 重排序方法:
- reverse() 方法反轉(zhuǎn)數(shù)組
- sort() 默認按升序退腥,比較的是字符串
- 比較數(shù)值或其他類型接收一個比較函數(shù)纯衍,接收兩個參數(shù)栋齿,如果第一個參數(shù)應該位于第二個之前則返回一個負數(shù),如果兩個參數(shù)相等則返回0襟诸,如果第一個參數(shù)應該位于第二個參數(shù)之后則返回一個正數(shù)
// 數(shù)值比較 function compare(value1,value2) { return value2- value1; // 降序 }
- 兩個方法返回值都是排序之后的數(shù)組
- 操作方法:
- concat() 拼接數(shù)組瓦堵,返回新數(shù)組
- slice() 接收1或2參數(shù),返回數(shù)組切片歌亲,切片數(shù)組不包含第二個參數(shù)的索引位置菇用。如果傳入負數(shù),則用該負數(shù)+數(shù)組長度確定位置陷揪,可以實現(xiàn)從后向前切片
- splice(起始位置惋鸥,要刪除的項數(shù),(要插入的任意數(shù)量的項))
向數(shù)組中部插入項悍缠。始終返回一個數(shù)組卦绣,包含從原始數(shù)組刪除的項
- 位置方法:
- indexOf,lastIndexOf(要查找的項飞蚓,(查找起點位置索引))
前者從數(shù)組開頭向后查找滤港,后者反之,使用全等操作符比較
沒有找到返回-1
- indexOf,lastIndexOf(要查找的項飞蚓,(查找起點位置索引))
- 迭代方法:
- 每個方法接收兩個參數(shù)1.在每一項上運行的函數(shù)趴拧,2.(可選)運行該函數(shù)的作用域?qū)ο蠼ρ绊憈his值
- 傳入的函數(shù)接收三個參數(shù):1.數(shù)組項的值山叮;2.索引;3.數(shù)組對象本身
- every() 該函數(shù)對每一項返回true,則返回true
- filter() 返回該函數(shù)會返回true項組成的數(shù)組
- forEach(),沒返回值
- map(),返回每次函數(shù)調(diào)用的結(jié)果組成的數(shù)組
- some(). 如果該函數(shù)任一項返回true添履,則返回true
- 歸并方法
- reduce() reduceRight(),前者從頭返后遍歷屁倔,后者反之
- 迭代所有項,構(gòu)建一個最終返回的值
- 接收兩個參數(shù)暮胧,每一項上調(diào)用的函數(shù)和(可選)作為歸并基礎(chǔ)的初始值
- 第一次迭代發(fā)生在數(shù)組第二項上锐借,參數(shù)函數(shù)4個參數(shù):前一個值,當前值叔壤,索引瞎饲,數(shù)組對象。函數(shù)返回任何值都會作為第一參數(shù)自動傳給下一項
5.3 Date類型
- Date.parse() 接收一個表示日期的字符串參數(shù)炼绘,返回相應日期毫秒數(shù)
- Date.UTC() 同樣返回日期毫秒數(shù),但接受的是多個數(shù)值參數(shù)妄田,只有年和月俺亮,第1第2參數(shù)是必須的
- Date.now()
- toString(),toUTCString返回帶有時區(qū)信息的日期和時間
- valueOf() 返回日期毫秒數(shù)
5.4RegExp類型
- 貪婪匹配
- g\i\m 三個標志疟呐,全局脚曾,區(qū)分大小寫,多行模式
- 所有元字符都要轉(zhuǎn)義
- 兩種創(chuàng)建方式:1启具、字面量形式/.../gim;2本讥、RegExp構(gòu)造函數(shù),兩個參數(shù)鲁冯,一個是要匹配的字符串模型拷沸,第二個是可選的標志字符串(要對\進行轉(zhuǎn)義 -> \\)
實例屬性
- lastIndex: 表示開始搜索下一個匹配項的字符位置
實例方法
- exec()
為捕獲組設(shè)計,接收一個參數(shù)薯演,即要應用模式的字符串撞芍,返回包含第一個匹配項信息的數(shù)組,沒有匹配的情況下返回null跨扮。在數(shù)組中序无,第一項是與整個模式匹配的字符串,其他項是與模式中的捕獲組匹配的字符串- 每次只返回一個匹配項衡创,有g(shù)時多次調(diào)用exec都會在原字符串中繼續(xù)查找新匹配項帝嗡,沒有g(shù)則始終返回第一個匹配項信息
- test()
接收一個字符串參數(shù),在模式與該參數(shù)匹配的情況下返回true,否則返回false - toLocaleString(),toString()都會返回正則表達式字面量
構(gòu)造函數(shù)屬性
- RegExp.input/lastMatch/lastParen/leftContext/....
- ^和$表示匹配字符串的開頭和結(jié)尾
5.5 Function類型
- 函數(shù)實際上是對象璃氢,是Function類型的實例
- 函數(shù)是對象哟玷,函數(shù)名是指針
函數(shù)聲明與函數(shù)表達式
- 解析器會率先讀取函數(shù)聲明,并使其在執(zhí)行任何代碼之前可用(可以訪問)
- 函數(shù)表達式拔莱,則必須等到解析器執(zhí)行到它所在的代碼行
- 函數(shù)聲明提升:即使聲明函數(shù)的代碼在調(diào)用它的代碼后面碗降,js引擎也能把函數(shù)聲明提升到頂部
函數(shù)內(nèi)部屬性
- arguments主要用途是保存參數(shù)隘竭,但這個對象還有一個名叫callee的屬性,是一個指針讼渊,指向擁有arguments對象的函數(shù)动看,即指向這個函數(shù)自己。在遞歸調(diào)用時可以解除函數(shù)名的耦合
- this 是調(diào)用函數(shù)的作用域爪幻,不是函數(shù)內(nèi)部的作用域
this引用的是函數(shù)執(zhí)行的環(huán)境對象菱皆,在全局執(zhí)行就引用全局對象,在某一個對象內(nèi)部調(diào)用挨稿,就引用的是這個對象 - 函數(shù)名只是一個包含指針的變量
- caller
這個屬性保存著調(diào)用當前函數(shù)的函數(shù)的引用仇轻,即誰調(diào)用了這個函數(shù)就保存誰 - arguments.callee即函數(shù)自己,arguments.callee.caller即這個函數(shù)的調(diào)用者
函數(shù)屬性和方法
- length :希望接收的命名參數(shù)個數(shù)
- prototype :保存對象所有實例方法的真正所在
- prototype不可枚舉奶甘,for in 無法發(fā)現(xiàn)
- apply(this,參數(shù)數(shù)組)和call(this,參數(shù)1篷店,參數(shù)2,...) ,用途都是在特定作用域中調(diào)用函數(shù)臭家,實際上等于設(shè)置函數(shù)體內(nèi)this對象的值
- call()和apply()作用相同疲陕,區(qū)別僅在于接收參數(shù)的方式不同
-
sayColor.call(obj)
相當于改變了函數(shù)內(nèi)部this的值,this變成了obj - bind()钉赁,這個方法會創(chuàng)建一個函數(shù)實例蹄殃,其this值會被綁定到傳給bind()函數(shù)的值。
var objectSayColor = sayColor.bind(o); objectSaycolor()
基本包裝類型
- 三個:Boolean,Number,String
- 直接訪問基本類型的變量時你踩,后臺會創(chuàng)建一個實例诅岩,只存在于一行代碼的執(zhí)行瞬間,然后立即被銷毀
- 每次訪問都會創(chuàng)建一個新的實例
- 所有基本包裝類型在轉(zhuǎn)換為布爾值時都是true
Number類型
- toFixed() 方法带膜,保留小數(shù)點位數(shù)
- toExponential() ,返回指數(shù)表示法(e表示法)
- toPrecision(表示數(shù)值所有數(shù)字位數(shù)) 根據(jù)數(shù)值自動判斷格式
String類型
- 常用方法:
- charAt()吩谦、 charCodeAt()
- slice(),substr().substring()
都接受兩個參數(shù),第一個是子字符串開始的位置钱慢,第二個表示子字符串到哪里結(jié)束逮京。substr(),第二個參數(shù)表示返回的字符個數(shù) - indexOf(),lastIndexOf()束莫,從一個字符串中搜索給定字符串懒棉,沒找到返回-1,找到返回第一次出現(xiàn)索引位置
- match(),接收一個正則表達式或RegExp對象览绿,與調(diào)用RegExp的exec()方法相同
- search(),返回第一個匹配項索引
- replace(正則或字符串策严,字符串或函數(shù))
- split(),基于分隔符分隔子字符串,放到一個數(shù)組中返回
- localeCompare()
單體內(nèi)置對象
Global對象
- 所有全局作用域中定義的變量和函數(shù)饿敲,都是global對象的屬性
- encodeURI(),encodeURIComponent()
- decodeURI(),decodeURIComponent()
- 所有原生引用類型的構(gòu)造函數(shù)妻导,都是Global對象的屬性
Math對象
- Math.min(),max(),一組數(shù)中最大最小值
- 求一個數(shù)組的最大最小值:Math.max.apply(Math,array);
- Math.ceil(),floor(),round(),
- Math.random(),返回大于等于0小于1的隨機數(shù)
值 = Math.floor(Math.random() * 可能值的總數(shù) + 第一個可能的值)