Chapter 5 引用類(lèi)型
Object類(lèi)型
-
創(chuàng)建Object實(shí)例
- new Object()
var person = new Object(); person.name = "Hello";- 使用對(duì)象字面量表示法(向函數(shù)傳遞大量參數(shù)的首選方式)
var person = { name: "Hello", age: 29 }; //屬性名可以使用字符串,效果相同 var person = { "name": "Hello", "age": 29 };- 使用空花括號(hào)(等價(jià)于new Object())
var person = {}; person.name = "Hello";- 訪問(wèn)對(duì)象可以使用點(diǎn)表示法也可以使用方括號(hào)表示法
alert(person["name"]); alert(person.name); var propertyName = "name"; alert(person[propertyName]);- 屬性名中包含會(huì)導(dǎo)致語(yǔ)法錯(cuò)誤的字符,或者屬性名使用的是關(guān)鍵字或保留字,可以使用方括號(hào)表示法。
- 通常,除非必須使用方括號(hào)表示法,否則推薦使用點(diǎn)表示法。
Array類(lèi)型
一個(gè)數(shù)組的每一項(xiàng)可以保存不同的數(shù)據(jù)類(lèi)型
-
創(chuàng)建Array實(shí)例
- var colors = new Array();
- var colors = new Array(20);
- var colors = new Array("red", "green", "blue");
- var colors = ["red", "green", "blue"];
- var names = [];
- var values = [1, 2,]; //這樣會(huì)創(chuàng)建不一定2或3個(gè)元素的數(shù)組。
- var opts = [ , , , , , ]; //這樣會(huì)創(chuàng)建不一定5或6個(gè)元素的數(shù)組。
-
數(shù)組的length屬性不是只讀的
var colors = ["red", "green", "blue"]; colors.length = 2; alert(colors[2]); //undefinedvar colors = ["red", "green", "blue"]; colors.length = 4; alert(colors[3]); //undefined -
數(shù)組元素個(gè)數(shù)變化后,其length屬性會(huì)自動(dòng)更新
var colors = ["red", "green", "blue"]; colors[colors.length] = "black";var colors = ["red", "green", "blue"]; colors[99] = "black"; alert(colors.length); //100 -
可以使用檢測(cè)數(shù)組
- values instanceof Array
-
ES5+之后,使用Array.isArray()方法也可以檢測(cè)數(shù)組
- Array.isArray(values);
-
轉(zhuǎn)換方法
- toString(): 得到一個(gè)以逗號(hào)分隔的字符串
- valueOf(): 返回?cái)?shù)組
- alert(valueOf())會(huì)后臺(tái)調(diào)用toString()
- toLocaleString()通常返回和toString()同樣的值,但是允許分別定義toString()與toLocaleString以達(dá)到不同的輸出
var person1 = { toLocaleString: function() { return "Nikolaos"; }, toString: function() { return "Nicholas"; } }; var person2 = { toLocaleString: function() { return "Grigorios"; }, toString: function() { return "Greg"; } };- join(): 使用不同的分隔符連接數(shù)組元素
var colors = ["red", "green", "blue"]; alert(colors.join(",")); alert(colors.join("||")); -
棧方法
- colors.push(arg1, arg2, ...); //在colors數(shù)組末尾逐個(gè)添加元素,返回值是推入個(gè)數(shù)
- colors.pop(); //彈出數(shù)組末尾的元素,并同時(shí)將數(shù)組長(zhǎng)度減1
-
隊(duì)列方法
- colors.shift(); //取得第一項(xiàng),并同時(shí)將數(shù)組長(zhǎng)度減1
- colors.unshift(arg1, arg2, ...); //在數(shù)組的前端添加項(xiàng),返回值是推入個(gè)數(shù)
var colors = new Array(); var count = colors.unshift("red", "green"); count = colors.unshift("black"); alert(colors.pop()); // "green" -
重排序方法
- values.reverse(); //將數(shù)組元素順序顛倒
- values.sort(); //將數(shù)組按照一定規(guī)則排序(可以接收一個(gè)比較函數(shù),默認(rèn)升序)
- 返回值是經(jīng)過(guò)排序后的數(shù)組
function compare(value1, value2) { if(value1 < value2) { return -1; } else if (value1 > value2) { return 1; } else { return 0; } } var values = [0, 1, 5, 10, 15]; values.sort(compare); alert(values);function compare(value1, value2) { return value1 - value2; } -
操作方法
- concat()
var colors = ["red", "green", "blue"]; var colors2 = colors.concat("yellow", ["black", "brown"]); //傳入一個(gè)值元素yellow和一個(gè)包含兩個(gè)值(black, brown)的數(shù)組元素 alert(colors2); //red, green, blue, yellow, black, brown- slice()
var colors = ["red", "green", "blue", "yellow", "purple"]; var colors2 = colors.slice(1); var colors3 = colors.slice(1, 4); alert(colors2); //green, blue, yellow, purple alert(colors3); //green, blue, yellow- splice() 向數(shù)組的中部插入項(xiàng)
- 刪除:splice(0, 2)刪除數(shù)組中的前兩項(xiàng)
- 插入:splice(2, 0, "red", "green")從當(dāng)前數(shù)組的位置2開(kāi)始插入字符串"red"和"green"。
- 替換:splice(2, 1, "red", "green")刪除當(dāng)前數(shù)組位置2的項(xiàng),并從位置2開(kāi)始插入字符串"red"和"green"。
- 始終返回一個(gè)數(shù)組,包含從原數(shù)組中刪除的項(xiàng)(如果沒(méi)有刪除的項(xiàng),則返回空數(shù)組)。
-
位置方法
- indexOf() 從數(shù)組的開(kāi)頭(位置0)開(kāi)始向后查找
- lastIndexOf() 從數(shù)組的末尾開(kāi)始向前查找
- 接收兩個(gè)參數(shù):要查找的項(xiàng)、查找起點(diǎn)位置的索引(可選)
- 返回 要查找的項(xiàng)在數(shù)組中的位置/不存在時(shí)返回-1
-
迭代方法
- every() 對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),如果該函數(shù)對(duì)每一項(xiàng)都返回true,則返回true
- filter() 對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),返回該函數(shù)會(huì)返回true的項(xiàng)組成的數(shù)組
- forEach() 對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),無(wú)返回值
- map() 對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),返回每次函數(shù)調(diào)用的結(jié)果組成的數(shù)組
- some() 對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),如果該函數(shù)對(duì)任一項(xiàng)返回true,則返回true
- 傳入這些方法中的函數(shù)會(huì)接收三個(gè)參數(shù):數(shù)組項(xiàng)的值、該項(xiàng)在數(shù)組中的位置、數(shù)組對(duì)象本身
- 以上方法都不會(huì)修改數(shù)組中的包含的值
- Example
var numbers = [1, 2, 3, 4]; var everyResult = numbers.every(function(item, index, array) { return (item > 2); }); alert(everyResult); //false -
歸并方法
- reduce() 從數(shù)組的第一項(xiàng)開(kāi)始,逐個(gè)遍歷到最后,并構(gòu)建一個(gè)返回值
- reduceRight() 從數(shù)組的最后一項(xiàng)開(kāi)始,向前遍歷到第一項(xiàng),并構(gòu)建一個(gè)返回值
- 以上方法都接收兩個(gè)參數(shù):在每一項(xiàng)上調(diào)用的函數(shù)、作為歸并基礎(chǔ)的初始值(可選);調(diào)用函數(shù)接收4個(gè)參數(shù):前一個(gè)值、當(dāng)前值、項(xiàng)的索引和數(shù)組對(duì)象本身。
- Example
var values = [1, 2, 3, 4, 5]; var sum = values.reduce(function(prev, cur, index, array) { return prev + cur; }); alert(sum); //15
Date類(lèi)型
- 使用UTC時(shí)間1970年1月1日0時(shí)開(kāi)始經(jīng)過(guò)的毫秒數(shù)來(lái)保存日期,能精確到1970.1.1之前或之后的100 000 000年。
- 初始化
- var now = new Date(); // 自動(dòng)獲取當(dāng)前的日期和時(shí)間
- var time = new Date(1000) // 傳入指定日期的毫秒數(shù)以初始化為指定日期
- 為了簡(jiǎn)化這個(gè)計(jì)算過(guò)程,ES提供了兩個(gè)方法:Date.parse()和Date.UTC();
- Date.parse() 接收一個(gè)表字符串參數(shù),然后嘗試根據(jù)這個(gè)字符串返回相應(yīng)時(shí)期的毫秒數(shù)。
- Date.UTC() 接收年份、基于0的月份(0-11)、月中的哪一天(1-31)、時(shí)、分、秒、毫秒,只有年月是必須的。
- Date.UTC()的日期和時(shí)間都基于本地時(shí)區(qū)創(chuàng)建。
- Date.now() 返回調(diào)用該方法時(shí)的日期和時(shí)間的毫秒數(shù)
- 繼承的方法
- toLocaleString() 按照與瀏覽器設(shè)置的地區(qū)相適應(yīng)的格式返回日期和時(shí)間
- toString() 通常返回帶有時(shí)區(qū)信息的日期和時(shí)間,時(shí)間一般以軍用時(shí)間(0-23小時(shí))表示
- valueOf() 不返回字符串,返回日期的毫秒表示
- 格式化方法
- toDateString() 以特定于實(shí)現(xiàn)的格式顯示星期、月、日、年
- toTimeString() 以特定于實(shí)現(xiàn)的格式顯示時(shí)、分、秒、時(shí)區(qū)
- toLocaleDateString() 以特定于地區(qū)的格式顯示星期、月、日、年
- toLocaleTimeString() 以特定于實(shí)現(xiàn)的格式顯示時(shí)、分、秒
- toUTCString() 以特定于實(shí)現(xiàn)的格式顯示完整的UTC日期
- 日期/時(shí)間組件方法
- 查閱手冊(cè)
RegExp類(lèi)型
通過(guò)RegExp類(lèi)型來(lái)支持正則表達(dá)式
-
字面量形式創(chuàng)建正則表達(dá)式:var expression = / pattern / flags;
- pattern 模式部分:可以是任何簡(jiǎn)單或復(fù)雜的正則表達(dá)式,可以包含字符串、限定符、分組、向前查找以及反向引用。每個(gè)正則表達(dá)式都可以帶有一個(gè)或多個(gè)標(biāo)志(flags),用以表明正則表達(dá)式的行為。
- flags 標(biāo)志:
- g: 表示全局模式,即模式將被應(yīng)用于所有字符串,而非在發(fā)現(xiàn)第一個(gè)匹配項(xiàng)時(shí)立即停止。
- i: 表示不區(qū)分大小寫(xiě)模式,即在確定匹配項(xiàng)時(shí)忽略模式與字符串的大小寫(xiě)。
- m: 表示多行模式,即在到達(dá)一行文本末尾時(shí)還會(huì)繼續(xù)查找下一行中是否存在與模式匹配的項(xiàng)。
- Examples
- var pattern1 = /at/g; 匹配字符串中所有的"at"實(shí)例
- var pattern2 = /[bc]at/i; 匹配第一個(gè)"bat"或"cat",不區(qū)分大小寫(xiě)
- var pattern3 = /.at/gi; 匹配所有以"at"結(jié)尾的3個(gè)字符的組合,不區(qū)分大小寫(xiě)
- 模式中使用的所有元字符必須轉(zhuǎn)義。包括:( [ { \ ^ & | ? * + . ] )
- var pattern4 = /[bc]at/i; 匹配第一個(gè)"[bc]at",不區(qū)分大小寫(xiě)
- var pattern5 = /.at/gi; 匹配所有".at",不區(qū)分大小寫(xiě)
-
使用RegExp構(gòu)造函數(shù)創(chuàng)建正則表達(dá)式
-
接收兩個(gè)參數(shù):要匹配的字符串模式、標(biāo)志字符串(可選)
- var pattern1 = /[bc]at/i;
- var pattern2 = new RegExp("bc[at]", "i");
不能把正則表達(dá)式的字面量直接傳給RegExp構(gòu)造函數(shù)。
-
需要雙重轉(zhuǎn)義
字面量模式 等價(jià)的字符串 /[bc]at/ "\[bc\]at" /.at/ "\.at" /name/age/ "name\/age" /\d.\d{1,2}/ "\d.\d{1,2}" /\w\hello\123/ "\w\\hello\\123" Example
var re = null; for(i = 0; i < 10; i++) { re = /cat/g; // 即便是循環(huán)也只創(chuàng)建一次RegExp實(shí)例,所以只有第一次調(diào)用test()的時(shí)候會(huì)成功,這是因?yàn)榈谝淮握{(diào)用test()時(shí)找到了"cat",但第二次調(diào)用是從索引為3的字符(上一次匹配的末尾)開(kāi)始的。 re.test("catastrophe"); } for(i = 0; i < 10; i++) { re = new RegExp("cat", "g"); // 每一次迭代都會(huì)創(chuàng)建新的RegExp實(shí)例,所以每次循環(huán)都會(huì)創(chuàng)建一個(gè)新的正則表達(dá)式。 re.test("catastrophe"); } -
-
RegExp實(shí)例屬性
- global: 布爾值,表示是否設(shè)置了g標(biāo)志。
- ignoreCase: 布爾值,表示是否設(shè)置了i標(biāo)志。
- lastIndex: 整數(shù),表示開(kāi)始搜索下一個(gè)匹配項(xiàng)的字符位置,從0算起。
- multiline: 布爾值,表示是否設(shè)置了m標(biāo)志。
- source: 正則表達(dá)式的字符串表示,按照字面量形式而非傳入構(gòu)造函數(shù)中的字符串模式返回。
-
RegExp實(shí)例方法
-
exec() 專(zhuān)門(mén)為捕獲組設(shè)計(jì),接受一個(gè)參數(shù):要應(yīng)用模式的字符串;返回:包含第一個(gè)匹配項(xiàng)信息的數(shù)組|沒(méi)有匹配項(xiàng)返回null。
- 返回的數(shù)組是Array實(shí)例,但是包含兩個(gè)額外的屬性:index(表示匹配項(xiàng)在字符串中的位置)、input(表示應(yīng)用的正則表達(dá)式的字符串)。在數(shù)組中,第一項(xiàng)是與整個(gè)模式匹配的字符串,其他項(xiàng)是與模式中捕獲組普配的字符串(如果沒(méi)有捕獲組,則該數(shù)組只包含一項(xiàng))。
- Example
var text = "mom and dad and baby"; var pattern = /mom( and dad( and baby)?)?/gi; var matches = pattern.exec(text); alert(matches.index); // 0; alert(matches.input); // "mom and dad and baby" alert(matches[0]); // "mom and dad and baby" alert(matches[1]); // " and dad and baby" alert(matches[2]); // " and baby"- 對(duì)于exec()方法而言,即使在模式中設(shè)置了全局標(biāo)志(g),它每次也只會(huì)返回一個(gè)匹配項(xiàng)。在不設(shè)全局標(biāo)志的情況下,在同一個(gè)字符串上多次調(diào)用exec()將始終返回第一個(gè)匹配項(xiàng)的信息;而設(shè)置全局標(biāo)志后,每次調(diào)用exec()則會(huì)在字符串中繼續(xù)查找新的匹配項(xiàng)。(IE除外)
test() 接受一個(gè)字符串參數(shù),在模式與該參數(shù)匹配的情況下返回true,否則返回false。
toString()和toLocaleString() 返回正則表達(dá)式的字面量。
-
-
構(gòu)造函數(shù)屬性
- 查閱手冊(cè)
-
局限性 (JS不支持的高級(jí)正則表達(dá)式)
- 匹配字符串開(kāi)始和結(jié)尾的\A和\Z錨。
- 向后查找
- 并集和交集類(lèi)
- 原子組
- Unicode支持(單個(gè)字符除外)
- 命名的捕獲組
- s(單行)標(biāo)志和x(無(wú)間隔)標(biāo)志匹配模式
- 條件匹配
- 正則表達(dá)式注釋
Function類(lèi)型
每個(gè)函數(shù)都是Function類(lèi)型的實(shí)例,并且與其他引用類(lèi)型一樣具有屬性和方法。
-
定義
function sum (num1, num2) { return num1 + num2; } var sum = function(num1, num2) { return num1 + num2; }; var sum = new Function("num1", "num2", "return num1 + num2"); //接收任意參數(shù),但最后一個(gè)參數(shù)始終被作為函數(shù)體。不推薦。 -
沒(méi)有重載
- 使用相同名稱(chēng)定義的函數(shù),后一個(gè)會(huì)覆蓋前一個(gè)。
-
函數(shù)的聲明與函數(shù)表達(dá)式
-
解析器會(huì)率先讀取函數(shù)聲明,使其在執(zhí)行任何代碼之前可用。但是函數(shù)表達(dá)式必須等到解析器執(zhí)行到它所在的代碼行才能被解釋執(zhí)行。
alert(sum(10, 10)); function sum (num1, num2) { return num1 + num2; } // 可以正確執(zhí)行alert(sum(10, 10)); var sum = function(num1, num2) { return num1 + num2; }; // 無(wú)法正確執(zhí)行,因?yàn)楹瘮?shù)在一個(gè)初始化語(yǔ)句中,而不是聲明。會(huì)導(dǎo)致第一行代碼出現(xiàn)unexpected indentifier錯(cuò)誤。
-
-
作為值的函數(shù)
- 函數(shù)名本身是變量,所以可以被當(dāng)做參數(shù)傳遞,但是要去掉圓括號(hào)。也可以當(dāng)做返回值被傳遞出去。
-
函數(shù)內(nèi)部屬性
- arguments: 有一個(gè)callee屬性,是一個(gè)指針,指向擁有這個(gè)arguments對(duì)象的函數(shù)。
function factorial(num) { if (num <= 1) { return 1; } else { return num * arguments.callee(num - 1); } }- this: 引用函數(shù)執(zhí)行的環(huán)境對(duì)象。
- caller: 保存著調(diào)用當(dāng)前函數(shù)的引用,如果在全局作用域調(diào)用當(dāng)前函數(shù),則它的值為null。
-
函數(shù)的屬性和方法
-
屬性
- length: 表示函數(shù)希望接收的命名參數(shù)的個(gè)數(shù)
- prototype: 保存他們所有實(shí)例方法的真正所在。
-
方法
- apply(): 接收兩個(gè)參數(shù):在其中運(yùn)行函數(shù)的作用域、參數(shù)數(shù)組(可以是Array實(shí)例,也可以是arguments對(duì)象)
function sum(num1, num2) { return num1 + num2; } function callSum(num1, num2) { return sum.apply(this, arguments); } function callSum_1(num1, num2) { return sum.apply(this, [num1, num2]); }- call(): 第一個(gè)參數(shù)是this沒(méi)有變化,其與參數(shù)直接傳遞給函數(shù)
function sum(num1, num2) { return num1 + num2; } function callSum(num1, num2) { return sum.call(this, num1, num2); }- 真正作用:擴(kuò)充函數(shù)賴(lài)以運(yùn)行的作用域。
window.color = "red"; var o = { color: "blue"}; function sayColor() { alert(this.color); } sayColor(); sayColor().call(this); // "red" sayColor().call(window); // "red" sayColor().call(o); // "blue"- apply和call在特定的作用域中調(diào)用函數(shù),實(shí)際等于設(shè)置函數(shù)體內(nèi)this對(duì)象的值。
- bind(): 創(chuàng)建一個(gè)函數(shù)的實(shí)例,其this值會(huì)被綁定到傳給bind()函數(shù)的值
window.color = "red"; var o = { color: "blue" }; function sayColor() { alert(this.color); } var objectSayColor = sayColor.bind(o); objectSayColor(); // "blue"
-
基本包裝類(lèi)型
特殊的引用類(lèi)型:Boolean Number String (基本包裝類(lèi)型)
-
基本類(lèi)型值不是對(duì)象,所以不應(yīng)該有方法。為了實(shí)現(xiàn)與訪問(wèn)對(duì)象一樣的方法,系統(tǒng)進(jìn)行了一系列處理,對(duì)于代碼:
var s1 = "some text"; var s2 = s1.substring(2);系統(tǒng)進(jìn)行了如下處理:
- 創(chuàng)建String類(lèi)型的一個(gè)實(shí)例
- 在實(shí)例上調(diào)用指定方法
- 銷(xiāo)毀這個(gè)實(shí)例
-
引用類(lèi)型與基本包裝類(lèi)型的主要區(qū)別:對(duì)象的生存期
- 使用new操作符創(chuàng)建的引用類(lèi)型的實(shí)例,在執(zhí)行流離開(kāi)當(dāng)前作用域之前都一直保存在內(nèi)存中;自動(dòng)創(chuàng)建的基本包裝類(lèi)型的對(duì)象,則只存在于一行代碼的執(zhí)行瞬間,然后被立即銷(xiāo)毀。
- 所以,不能在運(yùn)行時(shí)為基本類(lèi)型值添加屬性和方法。
- 可以顯式地調(diào)用Boolean Number String來(lái)創(chuàng)建基本包裝類(lèi)型的對(duì)象,但是不推薦。對(duì)基本包裝類(lèi)型的實(shí)例調(diào)用typeof會(huì)返回"object",而且所有基本包裝類(lèi)型的對(duì)象都會(huì)被轉(zhuǎn)換為布爾值true。
-
Boolean類(lèi)型
- var booleanObject = new Boolean(true);
- 在布爾表達(dá)式中使用Boolean對(duì)象會(huì)出現(xiàn)問(wèn)題:
var falseObject = new Boolean(false); var result = falseObject && true; alert(result); // truevar falseValue = false; var result = falseValue && true; alert(result); // false -
Number類(lèi)型
- var numberObject = new Number(10);
- 可以為toString方法傳遞一個(gè)表示基數(shù)的參數(shù),告訴他返回幾進(jìn)制數(shù)值的字符串形式
var num = 10; alert(num.toString(2)); // "1010"-
提供了一些用于將數(shù)值格式化為字符串的方法
- toFixed() 按照指定的小數(shù)位返回值的字符串表示
var num = 10; alert(num.toFixed(2)); // "10.00"var num = 10.005; alert(num.toFixed(2)); // "10.01"- toExponential() 返回以指定指數(shù)表示法表示的數(shù)值的字符串形式
var num = 10; alert(num.toExponential(1)); // "1.0e+1"- toPrecision() 得到表示某個(gè)數(shù)值最合適的格式,接收一個(gè)參數(shù),表示數(shù)值的所有數(shù)字的位數(shù)(不包括指數(shù)部分)
var num = 99; alert(num.toPrecision(1)); // "1e+2" alert(num.toPrecision(2)); // "99" alert(num.toPrecision(3)); //"99.0"
-
String類(lèi)型
var stringObject = new String("Hello World!");
-
實(shí)例方法
- charAt()/charCodeAt() 用于訪問(wèn)字符串中的特定字符,接收一個(gè)參數(shù),即基于0的字符位置,以 單字符字符串/字符編碼 的形式,返回那個(gè)字符。
- concat() 用于將一個(gè)或多個(gè)字符串拼接起來(lái),返回拼接得到的字符串
var stringValue = "hello "; var result = stringValue.concat("world"); alert(result); // "hello world"- slice() substr() substring() 接收兩個(gè)參數(shù):指定字符串開(kāi)始的位置、(可選)表示字符串到哪里結(jié)束/要返回的字符個(gè)數(shù)
var stringValue = "hello world"; alert(stringValue.slice(3)); // "lo world" alert(stringValue.substring(3)); // "lo world" alert(stringValue.substr(3)); // "lo world" alert(stringValue.slice(3, 7)); // "lo w" alert(stringValue.substring(3, 7)); // "lo w" alert(stringValue.substr(3, 7)); // "lo worl"var stringValue = "hello world"; alert(stringValue.slice(-3)); // "rld" -3 會(huì)被轉(zhuǎn)換成 8 (-3 + 字符串長(zhǎng)度11 = 8) alert(stringValue.substring(-3)); // "hello world" alert(stringValue.substr(-3)); // "rld" alert(stringValue.slice(3, -4)); // "lo w" alert(stringValue.substring(3, -4)); // "hel" alert(stringValue.substr(3, -4)); // ""- indexOf() lastIndexOf() 從頭/從末尾搜索給定的字符串,然后返回該字符串的位置(未找到返回-1);可選參數(shù),表示從哪個(gè)位置開(kāi)始搜索。
var stringValue = "hello world"; alert(stringValue.indexOf("o")); // 4 alert(stringValue.lastIndexOf("o")); // 7var stringValue = "hello world"; alert(stringValue.indexOf("o", 6)); // 7 alert(stringValue.lastIndexOf("o", 6)); // 4 (IMPORTANT)- trim() 創(chuàng)建一個(gè)字符串副本,刪除前置及后綴的所有空格,然后返回結(jié)果。
- toLowerCase() toLocaleLowerCase() toUpperCase() toLocaleUpperCase() 帶Locale的會(huì)進(jìn)行地區(qū)優(yōu)化
- 字符串模式匹配(基于String) match() search()(返回字符串中第一個(gè)匹配的索引/沒(méi)找到返回-1)
var text = "cat, bat, sat, fat"; var pattern = /.at/; var matches = text.match(pattern); // 等同于 var matches = pattern.exec(text); alert(matches.index); // 0 alert(matches[0]); // "cat" alert(pattern.lastIndex) // 0var text = "cat, bat, sat, fat"; var pos = text.search(/at/); alert(pos); // 1- replace() 字符串替換 第一個(gè)參數(shù)是一個(gè)RegExp對(duì)象或者一個(gè)字符串,第二個(gè)參數(shù)是一個(gè)字符串或者一個(gè)函數(shù)(參數(shù):模式的匹配項(xiàng)、模式匹配項(xiàng)在字符串中的位置、原始字符串),為了實(shí)現(xiàn)插入的效果,ES提供了一些特殊字符序列(查閱手冊(cè))
var text = "cat, bat, sat, fat"; var result = text.replace("at", "ond"); // 只替換找到的第一個(gè) var result = text.replace(/at/g, "ond"); // 按照正則規(guī)則,替換全部function htmlEscape(text) { return text.replace(/[<>"&]/g, function(match, pos, originalText) { switch(match) { case "<" return "\<"; case ">" return "\>"; case "&" return "\&"; case "\" return "\"";s } }); } alert(htmlEscape("<p class=\"greeting\">Hello World!</p>")); // <p class="greeting">Hello World!</p>- split() 基于指定分隔符將一個(gè)字符串分割成多個(gè)子字符串,并將結(jié)果放在一個(gè)數(shù)組中。分隔符可以是一個(gè)字符串,也可以是一個(gè)RegExp對(duì)象。split()可以接受可選的第二個(gè)參數(shù),用于指定數(shù)組的大小,以確保返回的數(shù)組不會(huì)超過(guò)既定大小。
var colorText = "red, blue, green, yellow"; var color = colorText.split(/[^\,]+/); // ["", ",", ",", ",", ""]- localeCompare() 比較兩個(gè)字符串,并返回下列值中的一個(gè)
- 如果字符串在字母表中應(yīng)該排在字符串參數(shù)之前,則返回一個(gè)負(fù)數(shù)
- 如果字符串等于字符串參數(shù),則返回0
- 如果字符串在字母表中應(yīng)該排在字符串參數(shù)之后,則返回一個(gè)正數(shù)
var stringValue = "yellow"; alert(stringValue).localeCompare("brick"); // 1- fromCharCode() 靜態(tài)方法,接收一或多個(gè)字符編碼,然后將它們轉(zhuǎn)換成一個(gè)字符串。
alert(String.fromCharCode(104, 101, 108, 111)); // "hello"- HTML方法 查閱手冊(cè)
單體內(nèi)置對(duì)象
由ES實(shí)現(xiàn)提供的、不依賴(lài)于宿主環(huán)境的對(duì)象,如:Object Array String..
-
Global對(duì)象
- 不屬于任何其他對(duì)象的屬性和方法,最終都是它的屬性和方法。
- URI編碼方法:使用encodeURI()和encodeURIComponent()方法可以對(duì)URI進(jìn)行編碼,以便發(fā)送給瀏覽器。encodeURI()不會(huì)對(duì)本身屬于URI的特殊字符編碼,而encodeURIComponent()會(huì)對(duì)它發(fā)現(xiàn)的任何非標(biāo)準(zhǔn)字符進(jìn)行編碼。
- URI解碼方法:decodeURI()和decodeURIComponent()
- eval()方法 完整的ES解析器,接收一個(gè)參數(shù):要執(zhí)行的ES字符串。
- eval("alert('hi')"); // 等價(jià)于 alert("hi");
- 在嚴(yán)格模式下,在外部訪問(wèn)不到eval()中創(chuàng)建的任何變量或者函數(shù)。
- 屬性 查閱手冊(cè)
- window對(duì)象:Global對(duì)象作為window對(duì)象的一部分加以實(shí)現(xiàn);因此,在全局作用域中聲明的所有變量和函數(shù),都成為了window對(duì)象的屬性。
- 取得global對(duì)象:
var global = function() { return this; }(); -
Math對(duì)象
- 為保存數(shù)學(xué)公式和信息提供
- Math.random() 返回一個(gè) 0 - 1 的隨機(jī)數(shù)
- 查閱手冊(cè)