Array對(duì)象
Array
是 JavaScript 的原生對(duì)象,同時(shí)也是一個(gè)構(gòu)造函數(shù)吠撮,可以用它生成新的數(shù)組隅很。Array
構(gòu)造函數(shù)有一個(gè)很大的缺陷忽冻,就是不同的參數(shù)遗遵,會(huì)導(dǎo)致它的行為不一致瘦材。所以不推薦用構(gòu)造函數(shù)來生成新數(shù)組尸疆,而是直接使用數(shù)組字面量來生成新數(shù)組臼膏。
var arr = new Array(2);
arr // [ empty x 2 ];
// 無參數(shù)時(shí)硼被,返回一個(gè)空數(shù)組
new Array() // []
// 單個(gè)正整數(shù)參數(shù),表示返回的新數(shù)組的長(zhǎng)度
new Array(1) // [ empty ]
new Array(2) // [ empty x 2 ]
// 非正整數(shù)的數(shù)值作為參數(shù)渗磅,會(huì)報(bào)錯(cuò)
new Array(3.2) // RangeError: Invalid array length
new Array(-3) // RangeError: Invalid array length
// 單個(gè)非數(shù)值(比如字符串嚷硫、布爾值、對(duì)象等)作為參數(shù)始鱼,
// 則該參數(shù)是返回的新數(shù)組的成員
new Array('abc') // ['abc']
new Array([1]) // [Array[1]]
// 多參數(shù)時(shí)仔掸,所有參數(shù)都是返回的新數(shù)組的成員
new Array(1, 2) // [1, 2]
new Array('a', 'b', 'c') // ['a', 'b', 'c']
//字面量方式
var arr = [1, 2];
Array的靜態(tài)方法和實(shí)例方法
-
Array.isArray()
方法返回一個(gè)布爾值,表示參數(shù)是否為數(shù)組风响。它可以彌補(bǔ)typeof
運(yùn)算符的不足嘉汰。(靜態(tài)方法) -
valueOf()
方法是一個(gè)所有對(duì)象都擁有的方法,表示對(duì)該對(duì)象求值状勤。不同對(duì)象的valueOf()
方法不盡一致鞋怀,數(shù)組的valueOf()
方法返回?cái)?shù)組本身。 -
toString()
方法也是對(duì)象的通用方法持搜,數(shù)組的toString
方法返回?cái)?shù)組的字符串形式密似。 -
push()
方法用于在數(shù)組的末端添加一個(gè)或多個(gè)元素,并返回添加新元素后的數(shù)組長(zhǎng)度葫盼。注意残腌,該方法會(huì)改變?cè)瓟?shù)組。 -
pop()
方法用于刪除數(shù)組的最后一個(gè)元素贫导,并返回該元素抛猫。注意,該方法會(huì)改變?cè)瓟?shù)組孩灯。push()
和pop()
結(jié)合使用闺金,就構(gòu)成了“后進(jìn)先出”的棧結(jié)構(gòu)(stack)。 -
unshift()
方法用于在數(shù)組的第一個(gè)位置添加元素峰档,并返回添加新元素后的數(shù)組長(zhǎng)度败匹。注意,該方法會(huì)改變?cè)瓟?shù)組讥巡。 -
shift()
方法用于刪除數(shù)組的第一個(gè)元素掀亩,并返回該元素。注意欢顷,該方法會(huì)改變?cè)瓟?shù)組槽棍。push()
和shift()
結(jié)合使用,就構(gòu)成了“先進(jìn)先出”的隊(duì)列結(jié)構(gòu)(queue)。 -
join()
方法以指定參數(shù)作為分隔符刹泄,將所有數(shù)組成員連接為一個(gè)字符串返回外里,如果不提供參數(shù),默認(rèn)用逗號(hào)分隔特石,原數(shù)組不變。通過call
方法鳖链,這個(gè)方法也可以用于字符串或類似數(shù)組的對(duì)象姆蘸。 -
concat()
方法用于多個(gè)數(shù)組的合并。它將新數(shù)組的成員芙委,添加到原數(shù)組成員的后部逞敷,然后返回一個(gè)新數(shù)組,原數(shù)組不變灌侣。如果數(shù)組成員包括對(duì)象推捐,concat
方法返回當(dāng)前數(shù)組的一個(gè)淺拷貝。所謂“淺拷貝”侧啼,指的是新數(shù)組拷貝的是對(duì)象的引用牛柒。 -
reverse()
方法用于顛倒排列數(shù)組元素,返回改變后的數(shù)組痊乾。注意皮壁,該方法將改變?cè)瓟?shù)組。 -
slice()
方法用于提取目標(biāo)數(shù)組的一部分哪审,返回一個(gè)新數(shù)組蛾魄,原數(shù)組不變。它的第一個(gè)參數(shù)為起始位置(從0開始)湿滓,第二個(gè)參數(shù)為終止位置(但該位置的元素本身不包括在內(nèi))滴须。如果省略第二個(gè)參數(shù),則一直返回到原數(shù)組的最后一個(gè)成員叽奥。如果參數(shù)是負(fù)數(shù)扔水,則表示倒數(shù)計(jì)算的位置。如果第一個(gè)參數(shù)大于等于數(shù)組長(zhǎng)度而线,或者第二個(gè)參數(shù)小于第一個(gè)參數(shù)铭污,則返回空數(shù)組。slice
方法的一個(gè)重要應(yīng)用膀篮,是將類似數(shù)組的對(duì)象轉(zhuǎn)為真正的數(shù)組嘹狞。 -
splice()
方法用于刪除原數(shù)組的一部分成員,并可以在刪除的位置添加新的數(shù)組成員誓竿,返回值是被刪除的元素磅网。注意,該方法會(huì)改變?cè)瓟?shù)組筷屡。splice
的第一個(gè)參數(shù)是刪除的起始位置(從0開始)涧偷,第二個(gè)參數(shù)是被刪除的元素個(gè)數(shù)簸喂。如果后面還有更多的參數(shù),則表示這些就是要被插入數(shù)組的新元素燎潮。起始位置如果是負(fù)數(shù)喻鳄,就表示從倒數(shù)位置開始刪除。如果只是單純地插入元素确封,splice
方法的第二個(gè)參數(shù)可以設(shè)為0
除呵。如果只提供第一個(gè)參數(shù),等同于將原數(shù)組在指定位置拆分成兩個(gè)數(shù)組爪喘。 -
sort()
方法對(duì)數(shù)組成員進(jìn)行排序颜曾,默認(rèn)是按照字典順序排序。排序后秉剑,原數(shù)組將被改變泛豪。如果想讓sort
方法按照自定義方式排序,可以傳入一個(gè)函數(shù)作為參數(shù)侦鹏。sort
的參數(shù)函數(shù)本身接受兩個(gè)參數(shù)诡曙,表示進(jìn)行比較的兩個(gè)數(shù)組成員。如果該函數(shù)的返回值大于0种柑,表示第一個(gè)成員排在第二個(gè)成員后面岗仑;其他情況下,都是第一個(gè)元素排在第二個(gè)元素前面聚请。 -
map()
方法將數(shù)組的所有成員依次傳入?yún)?shù)函數(shù)荠雕,然后把每一次的執(zhí)行結(jié)果組成一個(gè)新數(shù)組返回,改變?cè)瓟?shù)組驶赏。map
方法接受一個(gè)函數(shù)作為參數(shù)炸卑。該函數(shù)調(diào)用時(shí),map
方法向它傳入三個(gè)參數(shù):當(dāng)前成員煤傍、當(dāng)前位置和數(shù)組本身盖文。如果數(shù)組有空位,map
方法的回調(diào)函數(shù)在這個(gè)位置不會(huì)執(zhí)行蚯姆,會(huì)跳過數(shù)組的空位五续,不會(huì)跳過undefined
和null
。map
方法還可以接受第二個(gè)參數(shù)龄恋,用來綁定回調(diào)函數(shù)內(nèi)部的this
變量疙驾,下面代碼通過map
方法的第二個(gè)參數(shù),將回調(diào)函數(shù)內(nèi)部的this
對(duì)象郭毕,指向arr
數(shù)組它碎。
var arr = ['a', 'b', 'c'];
[1, 2].map(function (e) {
return this[e];
}, arr)
// ['b', 'c']
-
forEach()
方法與map
方法很相似,也是對(duì)數(shù)組的所有成員依次執(zhí)行參數(shù)函數(shù),將會(huì)改變?cè)瓟?shù)組扳肛。但是傻挂,forEach
方法不返回值,只用來操作數(shù)據(jù)挖息。這就是說金拒,如果數(shù)組遍歷的目的是為了得到返回值,那么使用map
方法旋讹,否則使用forEach
方法殖蚕。forEach
的用法與map
方法一致,參數(shù)用法和跳過空位都一致沉迹。 -
filter()
方法用于過濾數(shù)組成員,滿足條件的成員組成一個(gè)新數(shù)組返回害驹。它的參數(shù)是一個(gè)函數(shù)鞭呕,所有數(shù)組成員依次執(zhí)行該函數(shù),返回結(jié)果為true的成員組成一個(gè)新數(shù)組返回宛官。該方法不會(huì)改變?cè)瓟?shù)組葫松。filter
方法的參數(shù)函數(shù)可以接受三個(gè)參數(shù):當(dāng)前成員,當(dāng)前位置和整個(gè)數(shù)組底洗。filter
方法還可以接受第二個(gè)參數(shù)腋么,用來綁定參數(shù)函數(shù)內(nèi)部的this
變量。
[1, 2, 3, 4, 5].filter(function (elem) {
return (elem > 3);
})
// [4, 5] 滿足大于3的數(shù)組成員亥揖,作為一個(gè)新數(shù)組返回珊擂。
var arr = [0, 1, 'a', false];
arr.filter(Boolean)
// [1, "a"] 返回?cái)?shù)組arr里面所有布爾值為true的成員
var obj = { MAX: 3 };
var myFilter = function (item) {
if (item > this.MAX) return true;
};
var arr = [2, 8, 3, 4, 1, 3, 2, 9];
arr.filter(myFilter, obj) // [8, 4, 9]
//過濾器myFilter內(nèi)部有this變量,它可以被filter方法的第二個(gè)參數(shù)obj綁定费变,返回大于3的成員
-
some()
摧扇,every()
這兩個(gè)方法類似“斷言”(assert),返回一個(gè)布爾值挚歧,表示判斷數(shù)組成員是否符合某種條件扛稽。它們接受一個(gè)函數(shù)作為參數(shù),所有數(shù)組成員依次執(zhí)行該函數(shù)滑负。該函數(shù)接受三個(gè)參數(shù):當(dāng)前成員在张、當(dāng)前位置和整個(gè)數(shù)組,然后返回一個(gè)布爾值矮慕。-
some
方法是只要一個(gè)成員的返回值是true
帮匾,則整個(gè)some
方法的返回值就是true
,否則返回false
凡傅。 -
every
方法是所有成員的返回值都是true
辟狈,整個(gè)every
方法才返回true
,否則返回false
。 - 注意哼转,對(duì)于空數(shù)組明未,
some
方法返回false
,every
方法返回true
壹蔓,回調(diào)函數(shù)都不會(huì)執(zhí)行趟妥。
-
-
reduce()
,reduceRight()
方法依次處理數(shù)組的每個(gè)成員佣蓉,最終累計(jì)為一個(gè)值披摄。它們的差別是,reduce
是從左到右處理(從第一個(gè)成員到最后一個(gè)成員)勇凭,reduceRight
則是從右到左(從最后一個(gè)成員到第一個(gè)成員)疚膊,其他完全一樣。reduce
方法和reduceRight
方法的第一個(gè)參數(shù)都是一個(gè)函數(shù)虾标,該函數(shù)接受四個(gè)參數(shù):1寓盗、累積變量,默認(rèn)為數(shù)組的第一個(gè)成員璧函,2傀蚌、當(dāng)前變量,默認(rèn)為數(shù)組的第二個(gè)成員蘸吓,3善炫、當(dāng)前位置(從0開始),4库继、原數(shù)組箩艺。這四個(gè)參數(shù)之中,只有前兩個(gè)是必須的制跟,后兩個(gè)則是可選的舅桩。
[1, 2, 3, 4, 5].reduce(function (a, b) {
console.log(a, b);
return a + b;
})
// 1 2
// 3 3
// 6 4
// 10 5
//最后結(jié)果:15
如果要對(duì)累積變量指定初值,可以把它放在reduce方法和reduceRight方法的第二個(gè)參數(shù)雨膨。處理空數(shù)組很有用
[1, 2, 3, 4, 5].reduce(function (a, b) {
return a + b;
}, 10);
// 25 指定參數(shù)a的初值為10擂涛,所以數(shù)組從10開始累加,最終結(jié)果為25聊记。注意撒妈,這時(shí)b是從數(shù)組的第一個(gè)成員開始遍歷。
處理空數(shù)組
function add(prev, cur) {
return prev + cur;
}
[].reduce(add)
// TypeError: Reduce of empty array with no initial value
[].reduce(add, 1)
// 1 由于空數(shù)組取不到初始值排监,reduce方法會(huì)報(bào)錯(cuò)狰右。這時(shí),加上第二個(gè)參數(shù)舆床,就能保證總是會(huì)返回一個(gè)值棋蚌。
由于這兩個(gè)方法會(huì)遍歷數(shù)組嫁佳,所以實(shí)際上還可以用來做一些遍歷相關(guān)的操作。比如谷暮,找出字符長(zhǎng)度最長(zhǎng)的數(shù)組成員蒿往。
function findLongest(entries) {
return entries.reduce(function (longest, entry) {
return entry.length > longest.length ? entry : longest;
}, '');
}
findLongest(['aaa', 'bb', 'c']) // "aaa"
-
indexOf()
方法返回給定元素在數(shù)組中第一次出現(xiàn)的位置,如果沒有出現(xiàn)則返回-1
湿弦,還可以接受第二個(gè)參數(shù)瓤漏,表示搜索的開始位置。 -
lastIndexOf()
方法返回給定元素在數(shù)組中最后一次出現(xiàn)的位置颊埃,如果沒有出現(xiàn)則返回-1蔬充,indexOf,lastIndexOf
這兩個(gè)方法不能用來搜索NaN的位置班利,即它們無法確定數(shù)組成員是否包含NaN
饥漫,這是因?yàn)檫@兩個(gè)方法內(nèi)部,使用嚴(yán)格相等運(yùn)算符(===
)進(jìn)行比較罗标,而NaN
是唯一一個(gè)不等于自身的值趾浅。
上面這些數(shù)組方法之中,有不少返回的還是數(shù)組馒稍,所以可以鏈?zhǔn)绞褂谩?/li>
//上面代碼中,先產(chǎn)生一個(gè)所有 Email 地址組成的數(shù)組浅侨,然后再過濾出以t開頭的 Email 地址纽谒,最后將它打印出來。
var users = [
{name: 'tom', email: 'tom@example.com'},
{name: 'peter', email: 'peter@example.com'}
];
users
.map(function (user) {
return user.email;
})
.filter(function (email) {
return /^t/.test(email);
})
.forEach(function (email) {
console.log(email);
});
// "tom@example.com"
包裝對(duì)象
對(duì)象是 JavaScript 語言最主要的數(shù)據(jù)類型如输,三種原始類型的值——數(shù)值鼓黔、字符串、布爾值——在一定條件下不见,也會(huì)自動(dòng)轉(zhuǎn)為對(duì)象澳化,也就是原始類型的“包裝對(duì)象”。所謂“包裝對(duì)象”稳吮,就是分別與數(shù)值缎谷、字符串、布爾值相對(duì)應(yīng)的Number
灶似、String
列林、Boolean
三個(gè)原生對(duì)象。這三個(gè)原生對(duì)象可以把原始類型的值變成(包裝成)對(duì)象酪惭。包裝對(duì)象的最大目的希痴,首先是使得 JavaScript 的對(duì)象涵蓋所有的值,其次使得原始類型的值可以方便地調(diào)用某些方法春感。Number
砌创、String
和Boolean
如果不作為構(gòu)造函數(shù)調(diào)用(即調(diào)用時(shí)不加new
)虏缸,常常用于將任意類型的值轉(zhuǎn)為數(shù)值、字符串和布爾值嫩实。
//生成包裝對(duì)象
var v1 = new Number(123);
var v2 = new String('abc');
var v3 = new Boolean(true);
三種包裝對(duì)象各自提供了許多實(shí)例方法刽辙,它們共同具有、從Object
對(duì)象繼承的方法:valueOf
和toString
舶赔。valueOf
方法返回包裝對(duì)象實(shí)例對(duì)應(yīng)的原始類型的值扫倡。toString
方法返回對(duì)應(yīng)的字符串形式。
原始類型的值竟纳,可以自動(dòng)當(dāng)作包裝對(duì)象調(diào)用撵溃,即調(diào)用包裝對(duì)象的屬性和方法。這時(shí)锥累,JavaScript 引擎會(huì)自動(dòng)將原始類型的值轉(zhuǎn)為包裝對(duì)象實(shí)例缘挑,在使用后立刻銷毀實(shí)例。假如abc
是一個(gè)字符串桶略,本身不是對(duì)象语淘,不能調(diào)用length
屬性。JavaScript 引擎自動(dòng)將其轉(zhuǎn)為包裝對(duì)象际歼,在這個(gè)對(duì)象上調(diào)用length
屬性惶翻。調(diào)用結(jié)束后,這個(gè)臨時(shí)對(duì)象就會(huì)被銷毀鹅心。這就叫原始類型與實(shí)例對(duì)象的自動(dòng)轉(zhuǎn)換吕粗。自動(dòng)轉(zhuǎn)換生成的包裝對(duì)象是只讀的,無法修改旭愧。所以颅筋,字符串無法添加新屬性。除了原生的實(shí)例方法输枯,包裝對(duì)象還可以自定義方法和屬性议泵,供原始類型的值直接調(diào)用。
注意:調(diào)用結(jié)束后桃熄,包裝對(duì)象實(shí)例會(huì)自動(dòng)銷毀先口。這意味著,下一次調(diào)用字符串的屬性時(shí)蜻拨,實(shí)際是調(diào)用一個(gè)新生成的對(duì)象池充,而不是上一次調(diào)用時(shí)生成的那個(gè)對(duì)象,所以取不到賦值在上一個(gè)對(duì)象的屬性缎讼。如果要為字符串添加屬性收夸,只有在它的原型對(duì)象
String.prototype
上定義。
Boolean對(duì)象
Boolean
對(duì)象是 JavaScript 的三個(gè)包裝對(duì)象之一血崭。作為構(gòu)造函數(shù)卧惜,它主要用于生成布爾值的包裝對(duì)象實(shí)例厘灼。注意,false
對(duì)應(yīng)的包裝對(duì)象實(shí)例咽瓷,布爾運(yùn)算結(jié)果也是true
设凹。Boolean
對(duì)象除了可以作為構(gòu)造函數(shù),還可以單獨(dú)使用茅姜,將任意值轉(zhuǎn)為布爾值闪朱。這時(shí)Boolean
就是一個(gè)單純的工具方法。使用雙重的否運(yùn)算符(!
)也可以將任意值轉(zhuǎn)為對(duì)應(yīng)的布爾值钻洒。
Number對(duì)象
Number
對(duì)象是數(shù)值對(duì)應(yīng)的包裝對(duì)象奋姿,可以作為構(gòu)造函數(shù)使用,也可以作為工具函數(shù)使用素标。Number
對(duì)象擁有以下一些靜態(tài)屬性(即直接定義在Number
對(duì)象上的屬性称诗,而不是定義在實(shí)例上的屬性)。
-
Number.POSITIVE_INFINITY
:正的無限头遭,指向Infinity
寓免。 -
Number.NEGATIVE_INFINITY
:負(fù)的無限,指向-Infinity
计维。 -
Number.NaN
:表示非數(shù)值袜香,指向NaN
。 -
Number.MIN_VALUE
:表示最小的正數(shù)(即最接近0
的正數(shù)鲫惶,在64位浮點(diǎn)數(shù)體系中為5e-324
)困鸥,相應(yīng)的,最接近0的負(fù)數(shù)為-Number.MIN_VALUE
剑按。 -
Number.MAX_SAFE_INTEGER
:表示能夠精確表示的最大整數(shù),即9007199254740991
澜术。 -
Number.MIN_SAFE_INTEGER
:表示能夠精確表示的最小整數(shù)艺蝴,即-9007199254740991
。
Number
對(duì)象有4個(gè)實(shí)例方法鸟废,都跟將數(shù)值轉(zhuǎn)換成指定格式有關(guān)猜敢。
-
Number
對(duì)象部署了自己的toString
方法,用來將一個(gè)數(shù)值轉(zhuǎn)為字符串形式盒延。此方法只能將十進(jìn)制的數(shù)缩擂,轉(zhuǎn)為其他進(jìn)制的字符串。如果要將其他進(jìn)制的數(shù)添寺,轉(zhuǎn)回十進(jìn)制胯盯,需要使用parseInt
方法。
//toString方法可以接受一個(gè)參數(shù)计露,表示輸出的進(jìn)制博脑。
//如果省略這個(gè)參數(shù)憎乙,默認(rèn)將數(shù)值先轉(zhuǎn)為十進(jìn)制,再輸出字符串叉趣;否則泞边,就根據(jù)參數(shù)指定的進(jìn)制,將一個(gè)數(shù)字轉(zhuǎn)化成某個(gè)進(jìn)制的字符串疗杉。
(10).toString() // "10"
//10一定要放在括號(hào)里阵谚,這樣表明后面的點(diǎn)表示調(diào)用對(duì)象屬性。如果不加括號(hào)烟具,這個(gè)點(diǎn)會(huì)被 JavaScript 引擎解釋成小數(shù)點(diǎn)梢什,從而報(bào)錯(cuò)。
10.toString(2) // SyntaxError: Unexpected token ILLEGAL
//通過方括號(hào)運(yùn)算符也可以調(diào)用toString方法净赴。
10['toString'](2) // "1010"
-
toFixed
方法先將一個(gè)數(shù)轉(zhuǎn)為指定位數(shù)的小數(shù)绳矩,然后返回這個(gè)小數(shù)對(duì)應(yīng)的字符串。參數(shù)為小數(shù)位數(shù)玖翅,有效范圍為0到20翼馆,超出這個(gè)范圍將拋出 RangeError 錯(cuò)誤。 -
toExponential
方法用于將一個(gè)數(shù)轉(zhuǎn)為科學(xué)計(jì)數(shù)法形式金度。參數(shù)是小數(shù)點(diǎn)后有效數(shù)字的位數(shù)应媚,范圍為0到20,超出這個(gè)范圍猜极,會(huì)拋出一個(gè) RangeError 錯(cuò)誤中姜。 -
toPrecision
方法用于將一個(gè)數(shù)轉(zhuǎn)為指定位數(shù)的有效數(shù)字。參數(shù)為有效數(shù)字的位數(shù)跟伏,范圍是1到21丢胚,超出這個(gè)范圍會(huì)拋出 RangeError 錯(cuò)誤。 - 與其他對(duì)象一樣受扳,
Number.prototype
對(duì)象上面可以自定義方法携龟,被Number
的實(shí)例繼承。
String對(duì)象
String
對(duì)象是 JavaScript 原生提供的三個(gè)包裝對(duì)象之一勘高,用來生成字符串對(duì)象峡蟋。字符串對(duì)象是一個(gè)類似數(shù)組的對(duì)象(很像數(shù)組,但不是數(shù)組)华望。除了用作構(gòu)造函數(shù)蕊蝗,String
對(duì)象還可以當(dāng)作工具方法使用,將任意類型的值轉(zhuǎn)為字符串赖舟。
String的靜態(tài)方法和實(shí)例方法
-
String.fromCharCode()
靜態(tài)方法(即定義在對(duì)象本身蓬戚,而不是定義在對(duì)象實(shí)例的方法),該方法的參數(shù)是一個(gè)或多個(gè)數(shù)值宾抓,代表 Unicode 碼點(diǎn)碌更,返回值是這些碼點(diǎn)組成的字符串裕偿。注意,該方法不支持 Unicode 碼點(diǎn)大于0xFFFF
的字符痛单,即傳入的參數(shù)不能大于0xFFFF
(即十進(jìn)制的 65535)嘿棘。這種現(xiàn)象的根本原因在于,碼點(diǎn)大于0xFFFF
的字符占用四個(gè)字節(jié)旭绒,而 JavaScript 默認(rèn)支持兩個(gè)字節(jié)的字符鸟妙。這種情況下,必須把0x20BB7
拆成兩個(gè)字符表示挥吵。 - 字符串實(shí)例的
length
屬性返回字符串的長(zhǎng)度重父。 -
charAt()
方法返回指定位置的字符,參數(shù)是從0開始編號(hào)的位置忽匈。如果參數(shù)為負(fù)數(shù)房午,或大于等于字符串的長(zhǎng)度,charAt
返回空字符串丹允。 -
charCodeAt()
方法返回字符串指定位置的 Unicode 碼點(diǎn)(十進(jìn)制表示)郭厌,相當(dāng)于String.fromCharCode()
的逆操作。參數(shù)是字符串的下標(biāo)雕蔽,如果沒有任何參數(shù)折柠,charCodeAt
返回首字符的Unicode
碼點(diǎn)。如果參數(shù)為負(fù)數(shù)批狐,或大于等于字符串的長(zhǎng)度扇售,charCodeAt
返回NaN
。注意嚣艇,charCodeAt
方法返回的 Unicode 碼點(diǎn)不會(huì)大于65536(0xFFFF)承冰,也就是說,只返回兩個(gè)字節(jié)的字符的碼點(diǎn)食零。如果遇到碼點(diǎn)大于 65536 的字符(四個(gè)字節(jié)的字符)巷懈,必需連續(xù)使用兩次charCodeAt
,不僅讀入charCodeAt(i)
慌洪,還要讀入charCodeAt(i+1)
,將兩個(gè)值放在一起凑保,才能得到準(zhǔn)確的字符冈爹。 -
concat()
方法用于連接兩個(gè)字符串,返回一個(gè)新字符串欧引,不改變?cè)址?/strong>频伤。 -
slice()
方法用于從原字符串取出子字符串并返回,不改變?cè)址?/strong>芝此。它的第一個(gè)參數(shù)是子字符串的開始位置憋肖,第二個(gè)參數(shù)是子字符串的結(jié)束位置(不含該位置)因痛。如果省略第二個(gè)參數(shù),則表示子字符串一直到原字符串結(jié)束岸更。如果參數(shù)是負(fù)值鸵膏,表示從結(jié)尾開始倒數(shù)計(jì)算的位置,即該負(fù)值加上字符串長(zhǎng)度怎炊。如果第一個(gè)參數(shù)大于第二個(gè)參數(shù)谭企,slice
方法返回一個(gè)空字符串。 - substring方法用于從原字符串取出子字符串并返回评肆,不改變?cè)址?/strong>债查,跟
slice
方法很相像。它的第一個(gè)參數(shù)表示子字符串的開始位置瓜挽,第二個(gè)位置表示結(jié)束位置(返回結(jié)果不含該位置)盹廷。如果省略第二個(gè)參數(shù),則表示子字符串一直到原字符串的結(jié)束久橙。如果第一個(gè)參數(shù)大于第二個(gè)參數(shù)俄占,substring
方法會(huì)自動(dòng)更換兩個(gè)參數(shù)的位置。如果參數(shù)是負(fù)數(shù)剥汤,substring
方法會(huì)自動(dòng)將負(fù)數(shù)轉(zhuǎn)為0颠放。由于這些規(guī)則違反直覺,因此不建議使用substring
方法吭敢,應(yīng)該優(yōu)先使用slice
碰凶。 -
substr()
方法用于從原字符串取出子字符串并返回,不改變?cè)址雇眨?code>slice和substring
方法的作用相同欲低。第一個(gè)參數(shù)是子字符串的開始位置(從0開始計(jì)算),第二個(gè)參數(shù)是子字符串的長(zhǎng)度畜晰。如果省略第二個(gè)參數(shù)砾莱,則表示子字符串一直到原字符串的結(jié)束。如果第一個(gè)參數(shù)是負(fù)數(shù)凄鼻,表示倒數(shù)計(jì)算的字符位置腊瑟。如果第二個(gè)參數(shù)是負(fù)數(shù),將被自動(dòng)轉(zhuǎn)為0块蚌,因此會(huì)返回空字符串闰非。 -
indexOf()
方法用于確定一個(gè)字符串在另一個(gè)字符串中第一次出現(xiàn)的位置,返回結(jié)果是匹配開始的位置峭范。如果返回-1
财松,就表示不匹配。可以接受第二個(gè)參數(shù)辆毡,表示從該位置開始向后匹配菜秦。 -
lastIndexOf()
方法的用法跟indexOf
方法一致,主要的區(qū)別是lastIndexOf
從尾部開始匹配舶掖,indexOf
則是從頭部開始匹配球昨。第二個(gè)參數(shù)表示從該位置起向前匹配。 -
trim()
方法用于去除字符串兩端的空格访锻,返回一個(gè)新字符串褪尝,不改變?cè)址?/strong>。該方法去除的不僅是空格期犬,還包括制表符(\t
河哑、\v
)、換行符(\n
)和回車符(\r
)龟虎。 -
toLowerCase
方法用于將一個(gè)字符串全部轉(zhuǎn)為小寫璃谨,toUpperCase
則是全部轉(zhuǎn)為大寫。它們都返回一個(gè)新字符串鲤妥,不改變?cè)址?/strong>佳吞。 -
match()
方法用于確定原字符串是否匹配某個(gè)子字符串,返回一個(gè)數(shù)組棉安,成員為匹配的第一個(gè)字符串底扳。如果沒有找到匹配,則返回null贡耽。適用于正則 -
search()
方法的用法基本等同于match衷模,但是返回值為匹配的第一個(gè)位置。如果沒有找到匹配蒲赂,則返回-1
阱冶。適用于正則 -
replace()
方法用于替換匹配的子字符串,一般情況下只替換第一個(gè)匹配(除非使用帶有g(shù)修飾符的正則表達(dá)式)滥嘴。適用于正則 -
split()
方法按照給定規(guī)則分割字符串木蹬,返回一個(gè)由分割出來的子字符串組成的數(shù)組。適用于正則
如果分割規(guī)則為空字符串若皱,則返回?cái)?shù)組的成員是原字符串的每一個(gè)字符镊叁。
'a|b|c'.split('') // ["a", "|", "b", "|", "c"]
如果省略參數(shù),則返回?cái)?shù)組的唯一成員就是原字符串走触。
'a|b|c'.split() // ["a|b|c"]
如果滿足分割規(guī)則的兩個(gè)部分緊鄰著(即兩個(gè)分割符中間沒有其他字符)晦譬,則返回?cái)?shù)組之中會(huì)有一個(gè)空字符串。
'a||c'.split('|') // ['a', '', 'c']
如果滿足分割規(guī)則的部分處于字符串的開頭或結(jié)尾(即它的前面或后面沒有其他字符)饺汹,則返回?cái)?shù)組的第一個(gè)或最后一個(gè)成員是一個(gè)空字符串。
'|b|c'.split('|') // ["", "b", "c"]
'a|b|'.split('|') // ["a", "b", ""]
split方法還可以接受第二個(gè)參數(shù)痰催,限定返回?cái)?shù)組的最大成員數(shù)兜辞。
'a|b|c'.split('|', 0) // []
'a|b|c'.split('|', 1) // ["a"]
'a|b|c'.split('|', 2) // ["a", "b"]
'a|b|c'.split('|', 3) // ["a", "b", "c"]
'a|b|c'.split('|', 4) // ["a", "b", "c"]
-
localeCompare()
方法用于比較兩個(gè)字符串迎瞧。它返回一個(gè)整數(shù),如果小于0逸吵,表示第一個(gè)字符串小于第二個(gè)字符串凶硅;如果等于0,表示兩者相等扫皱;如果大于0足绅,表示第一個(gè)字符串大于第二個(gè)字符串。
Math對(duì)象
Math
是 JavaScript 的原生對(duì)象韩脑,提供各種數(shù)學(xué)功能氢妈。該對(duì)象不是構(gòu)造函數(shù),不能生成實(shí)例段多,所有的屬性和方法都必須在Math對(duì)象上調(diào)用首量。
Math的靜態(tài)屬性
-
Math.E
:常數(shù)e。 -
Math.LN2
:2 的自然對(duì)數(shù)进苍。 -
Math.LN10
:10 的自然對(duì)數(shù)加缘。 -
Math.LOG2E
:以 2 為底的e的對(duì)數(shù)。 -
Math.LOG10E
:以 10 為底的e的對(duì)數(shù)觉啊。 -
Math.PI
:常數(shù)π拣宏。 -
Math.SQRT1_2
:0.5 的平方根。 -
Math.SQRT2
:2 的平方根杠人。
Math的靜態(tài)方法
-
Math.abs()
:絕對(duì)值勋乾,返回參數(shù)值的絕對(duì)值。 -
Math.ceil()
:向上取整搜吧,返回大于參數(shù)值的最小整數(shù)(天花板值)市俊。 -
Math.floor()
:向下取整,返回小于參數(shù)值的最大整數(shù)(地板值)滤奈。 -
Math.max()
:最大值摆昧,返回參數(shù)之中最大的那個(gè)值 -
Math.min()
:最小值,返回參數(shù)之中最小的那個(gè)值 -
Math.pow()
:指數(shù)運(yùn)算蜒程,返回以第一個(gè)參數(shù)為底數(shù)绅你、第二個(gè)參數(shù)為冪的指數(shù)值。 -
Math.sqrt()
:平方根昭躺,返回參數(shù)值的平方根忌锯。如果參數(shù)是一個(gè)負(fù)值,則返回NaN
领炫。 -
Math.log()
:自然對(duì)數(shù)偶垮,返回以e
為底的自然對(duì)數(shù)值。 -
Math.exp()
:e的指數(shù),返回常數(shù)e的參數(shù)次方似舵。 -
Math.round()
:四舍五入 -
Math.random()
:隨機(jī)數(shù)脚猾,返回0到1之間的一個(gè)偽隨機(jī)數(shù),可能等于0砚哗,但是一定小于1龙助。
Math對(duì)象的三角函數(shù)方法
-
Math.sin()
:返回參數(shù)的正弦(參數(shù)為弧度值) -
Math.cos()
:返回參數(shù)的余弦(參數(shù)為弧度值) -
Math.tan()
:返回參數(shù)的正切(參數(shù)為弧度值) -
Math.asin()
:返回參數(shù)的反正弦(返回值為弧度值) -
Math.acos()
:返回參數(shù)的反余弦(返回值為弧度值) -
Math.atan()
:返回參數(shù)的反正切(返回值為弧度值)