<h2 id="3.6">3.6 語句</h2>
<h3 id="3.6.1">3.6.1 if語句</h3>
- 語法:
if(condition) statement1 else statement2
- 注意:condition可以是任何值。ECMAScript會自動調(diào)用Boolean()轉(zhuǎn)換函數(shù)
<h3 id="3.6.2">3.6.2 do-while語句</h3>
<h3 id="3.6.3">3.6.3 while語句</h3>
<h3 id="3.6.4">3.6.4 for語句</h3>
注意:在循環(huán)內(nèi)部定義的變量可以在外部訪問
<h3 id="3.6.5">3.6.5 for-in語句</h3>
語法:
for (property in expression) statement
-
示例:
for (var proName in window) { ... }
在這個例子中焰宣,使用for-in循環(huán)來顯示BOM中window對象的所有屬性捕仔。每次執(zhí)行循環(huán)時,都會將對象中存在的一個屬性名賦值給變量proName盅粪。這個過程會一直持續(xù)到對象中的所有屬性都被枚舉一遍為止悄蕾。
ECMAScript對象的屬性沒有順序。因此for-in循環(huán)輸出的屬性名的順序不可預(yù)測
如果表示要迭代的對象的變量值為null或undefined奠骄,for-in語句會拋出錯誤。ECMAScript5更正了這一行為戚揭;對這種情況不再跑出錯誤(不執(zhí)行循環(huán)體)撵枢。嫁衣先檢測該對象的值是不是null或undefined
<h3 id="3.6.6">3.6.6 label語句</h3>
語法:label:statement
-
示例:
start:for(var i = 0; i < count; i++){ alert(i); }
<h3 id="3.6.7">3.6.7 break和continue語句</h3>
<h3 id="3.6.8">3.6.8 with語句</h3>
語法:with (expression) statement
作用:將代碼的作用域設(shè)置到一個特定的對象中
-
示例:
var qs = location.search.substring(1);
可以改為
with(location){
var qs = search.substring(1);
}
在with語句的代碼塊內(nèi)部锄禽,每個變量首先被認(rèn)為是一個局部變量,而如果在局部環(huán)境中找不到該變量的定義磁滚,就會查詢location對象中是否有同名的屬性宵晚。如果發(fā)現(xiàn)了同名屬性淤刃,則以location對象屬性的值作為變量的值。嚴(yán)格模式下不允許使用with語句陨仅。with語句會導(dǎo)致性能下降铝侵,不建議使用with語句灼伤。
<h3 id="3.6.9">3.6.9 switch語句</h3>
- expression可以使用任何數(shù)據(jù)類型
- case的值不一定是常量咪鲜,可以是變量甚至是表達(dá)式
- switch語句在比較時使用的是全等操作符嗜诀,因此不會發(fā)生類型轉(zhuǎn)換
<h2 id="3.7">3.7 函數(shù)</h2>
嚴(yán)格模式對函數(shù)的一些限制:1.不能把函數(shù)命名為eval或arguments;2.不能把參數(shù)命名為eval或arguments发皿;3.不能出現(xiàn)兩個明明參數(shù)同名的情況
<h3 id="3.7.1">3.7.1 理解參數(shù)</h3>
ECMAScript中的參數(shù)在內(nèi)部都是用一個數(shù)組來表示的穴墅。ECMAScript不介意傳幾個參數(shù)玄货,也不介意參數(shù)的數(shù)據(jù)類型。在函數(shù)體內(nèi)可以通過arguments對象來訪問這個參數(shù)數(shù)組夹界。
比如第一個參數(shù)就是arguments[0]
arguments對象的length屬性可以獲知有多少個參數(shù)傳遞給了函數(shù)
-
arguments的值永遠(yuǎn)和對應(yīng)明命名參數(shù)的值保持同步
function doAdd(num1, num2){ ... }
這里當(dāng)改變arguments[0]=1后可柿,num1就會自動改變复斥。但是在函數(shù)內(nèi)修改num1并不會使arguments[0]改變械媒。另外纷捞,如果只傳一個參數(shù)主儡,修改arguments[1]也不會改變num2的值
<h3 id="3.7.2">3.7.2 沒有重載</h3>
如果定義了兩個名字相同的函數(shù)。就以后定義的函數(shù)為準(zhǔn)
<h2 id="3.8">3.8 小結(jié)</h2>
- 基本數(shù)據(jù)類型:Undefined、Null臀玄、Boolean健无、Number累贤、String
- 沒有定義整數(shù)和浮點(diǎn)數(shù)臼膏。Number類型用于表示所有數(shù)值
- 復(fù)雜數(shù)據(jù)類型:Object
- 嚴(yán)格模式為這門語言中容易出錯的地方加了限制
- 算術(shù)操作符渗磅、布爾操作符始鱼。關(guān)系操作符、相等操作符起暮、賦值操作符
- if负懦、for密似、switch
- 無須指定函數(shù)返回值
- 未指定返回值的函數(shù)返回的是一個特殊的undefined值
- 沒有函數(shù)簽名的概念
- 可以向ECMAScript函數(shù)傳遞任意數(shù)量的參數(shù)残腌,通過arguments對象來訪問這些參數(shù)
- 不能重載
<h1 id="4">第4章 變量抛猫、作用域和內(nèi)存問題</h1>
<h2 id="4.1">4.1 基本類型和引用類型的值</h2>
<h3 id="4.1.2">4.1.2 復(fù)制變量值</h3>
- 如果一個變量向另一個變量復(fù)制基本類型的值闺金,會在變量對象上創(chuàng)建一個新值峰档,然后把該值復(fù)制到為新變量分配的位置上
- 如果是引用類型讥巡,兩個變量將引用同一個對象欢顷。
<h3 id="4.1.3">4.1.3 傳遞參數(shù)</h3>
所有參數(shù)都按值傳遞±虑桑基本類型的傳遞和基本類型變量的復(fù)制一樣陕悬,引用類型的傳遞和引用類型變量的復(fù)制一樣
<h3 id="4.1.4">4.1.4 檢測類型</h3>
- 檢測基本數(shù)據(jù)類型:typeof操作符
- 檢測引用類型:instanceof操作符
person instanceof Array;//變量person是Array嗎
person instanceof Object;//變量person是Object嗎
<h2 id="4.2">4.2 執(zhí)行環(huán)境及作用域</h2>
一個函數(shù)就是一個執(zhí)行環(huán)境
<h3 id="4.2.1">4.2.1 延長作用域鏈</h3>
- try-catch的catch語句塊:會創(chuàng)建一個新的變量對象墩莫,其中包含的是被拋出的錯誤對象的聲明
- with語句:會將指定的對象添加到作用域鏈中
<h3 id="4.2.2">4.2.2 沒有塊級作用域</h3>
注意不是像C語言那樣用{}來區(qū)分作用域
比如說for(var i = 0; i < 5; i++)
這里的i在外面也能訪問狂秦。
-
聲明變量
- 使用var聲明的變量會自動被添加到最接近的環(huán)境中裂问。在函數(shù)內(nèi)部就是局部環(huán)境堪簿,with語句中就是函數(shù)環(huán)境椭更。
- 不使用var聲明虑瀑,變量自動添加到全局環(huán)境
-
查詢標(biāo)識符
- 從作用域鏈前端開始,向上逐級查詢
<h2 id="4.3">4.3 垃圾收集</h2>
<h3 id="4.3.1">4.3.1 標(biāo)記清除</h3>
- 最常用的垃圾收集方式
- 給所有存儲在內(nèi)存中的變量加上標(biāo)記滴须,再去掉環(huán)境中的變量以及被環(huán)境中的變量引用的標(biāo)記
<h3 id="4.3.2">4.3.2 引用計數(shù)</h3>
- 不太常見
- 跟蹤記錄每個值被引用的次數(shù)
- 循環(huán)引用會導(dǎo)致錯誤
<h3 id="4.3.3">4.3.3 性能問題</h3>
- 確定垃圾收集的時間間隔
<h3 id="4.3.4">4.3.4 管理內(nèi)存</h3>
- 一旦數(shù)據(jù)不再有用扔水,最好通過將其值設(shè)置為null來釋放其因引用(適用于大多數(shù)全局變量和全局變量的屬性)
<h2 id="4.4">4.4 小結(jié)</h2>
基本類型和引用類型:
- 基本類型值保存在棧內(nèi)存中魔市,在內(nèi)存中占據(jù)固定大小的控件
- 從一個變量向另一個變量復(fù)制基本類型的值待德,會創(chuàng)建這個值的一個副本
- 引用類型的值是對象磅网,保存在堆內(nèi)存中
- 包含引用類型值的變量實際上包含的并不是對象本身涧偷,而是一個指向該對象的指針
- 從一個變量向另一個變量復(fù)制引用類型的值燎潮,復(fù)制的其實是指針确封。兩個變量最終都指向同一個對象
- typeof爪喘,instanceof
執(zhí)行環(huán)境:
- 全局執(zhí)行環(huán)境秉剑、函數(shù)執(zhí)行環(huán)境
- 每次進(jìn)入一個新執(zhí)行環(huán)境侦鹏,都會創(chuàng)建一個用于搜索變量和函數(shù)的作用域鏈
- 局部環(huán)境有權(quán)訪問其包含(父)環(huán)境
- 全局環(huán)境只能訪問全局環(huán)境
- 變量的執(zhí)行環(huán)境有助于確定應(yīng)該合適釋放內(nèi)存
垃圾收集:
- 離開作用域的值將被自動標(biāo)記為可以回收
- 標(biāo)記清除
- 引用計數(shù)略水。JavaScript引擎目前不再使用這種算法慎璧;但在IE中訪問非原生JavaScript對象(如DOM)時炸卑,這種算法仍然可能導(dǎo)致問題
- 循環(huán)引用
- 及時解除變量的引用
<h1 id="5">第5章 引用類型</h1>
<h2 id="5.1">5.1 Object類型</h2>
- 創(chuàng)建Object實例
new
-
對象字面量表示法
var person = { //花括號表示表達(dá)式的開始 name : "Nicholas", //逗號分隔不同的屬性 age : 29 //最后一個屬性不能加逗號 }
注意:
屬性名可以用字符串表示盖文。
-
可以留空:
var person = {}; //與new一個對象相同 person.name = "Nicholas"; person.age = 29;
最適合需要向函數(shù)傳入大量可選參數(shù)的情形
用這個方法時不會調(diào)用構(gòu)造函數(shù)
最好的做法是對那些必需值使用命名參數(shù)五续,使用對象字面量來封裝多個可選參數(shù)
- 訪問對象屬性:一般使用點(diǎn)表示法
- 方括號:
person["name"]
-
優(yōu)點(diǎn):可以通過變量來訪問屬性
var propertyName = "name"; alert(person[propertyName]);
屬性名中包含會導(dǎo)致語法錯誤的字符疙驾,或?qū)傩悦褂玫氖顷P(guān)鍵字或保留字
-
- 點(diǎn)表示法:
person.name
- 方括號:
<h2 id="5.2">5.2 Array類型</h2>
ECMAScript數(shù)組的每一項可以保存任何類型的數(shù)據(jù)
大小可以動態(tài)調(diào)整
創(chuàng)建數(shù)組:
- new
var colors = new Array();
var colors = new Array(20);
var colors = new Array("red","blue","green");
- 也可以省略new
- 數(shù)字字面量表示法
var colors = ["red","blue","green"];
var colors = [];
- 不要在最后加逗號
讀取和設(shè)置數(shù)組:
- 方括號:
colors[0];
length屬性:
不是只讀的。所以通過設(shè)置這個屬性傻挂〗鹁埽可以從數(shù)組的末尾移除項或向數(shù)組中添加新項
-
不存在的項是undefined
var colors = ["red","blue","green"]; colors[99] = "black";
這時候length會變成100幢码,colors[3]——colors[98]都是undefined
<h3 id="5.2.1">5.2.1 檢測數(shù)組</h3>
- Array.isArray()方法
- 一個全局作用域可以用instanceof操作符
<h3 id="5.2.2">5.2.2 轉(zhuǎn)換方法</h3>
- toString():返回由數(shù)組中每個值的字符串形式拼接而成的一個以逗號分隔的字符串。調(diào)用的是數(shù)組每一項的toString()
- valueOf():返回數(shù)組。
- toLocaleString():也是逗號分隔咕娄。調(diào)用的是每一項的toLocaleString()
注意:
- alert()調(diào)用的是每一項的toString()
- 想要改變分隔符可以用join()方法:
people.join("||");
<h3 id="5.2.3">5.2.3 棧方法</h3>
push()方法和pop()方法實現(xiàn)的是類似棧的行為(后進(jìn)先出,在頂部操作)
- push():可以接收任意數(shù)量的參數(shù)圣贸,并逐個添加到數(shù)組末尾吁峻,返回修改后的數(shù)組長度
- pop():從數(shù)組末尾移除最后一項,返回移除的項
<h3 id="5.2.4">5.2.4 隊列方法</h3>
隊列:在末端添加項用含,從前端移除項。shift()和push()模擬了隊列的行為痪寻。unshift()和pop()模擬的事相反方向的隊列
- shift():移除數(shù)組的第一個項并返回該項
- unshift():在數(shù)組前端添加任意個項并返回新數(shù)組長度
<h3 id="5.2.5">5.2.5 重排序方法</h3>
reserve():反轉(zhuǎn)數(shù)組原來的順序,返回排序后的數(shù)組
sort():先調(diào)用每一項的toString(),再比較得到的字符串佣蓉。返回排序后的數(shù)組
-
最佳方案:給sort()方法一個比較函數(shù)作為參數(shù)
var values = [0, 1, 5, 10, 15]; values.sort(compare); functiong compare(value1, value2){ return value2 - value1; //降序 }
<h3 id="5.2.6">5.2.6 操作方法</h3>
concat():先創(chuàng)建當(dāng)前數(shù)組的一個副本然后將接收到的參數(shù)添加到這個副本的末尾疚膊,返回新構(gòu)建的數(shù)組
-
slice():基于當(dāng)前數(shù)組的項創(chuàng)建新數(shù)組。接收兩個參數(shù):返回項的起始位置和結(jié)束位置。返回起始和結(jié)束位置之間的項(不包括結(jié)束位置的項)
- 如果參數(shù)出現(xiàn)負(fù)數(shù)善炫,則length+該參數(shù)
- 如果結(jié)束位置<起始位置,則返回空數(shù)組
-
splice():主要用途是向數(shù)組的中部插入項
- 刪除:2個參數(shù):要刪除的第一項的位置和要刪除的項數(shù)宪萄。
- 插入:3個參數(shù):起始位置静汤、0(要刪除的項數(shù))和要插入的任意數(shù)量的項。
splice(2,0,"red","green")
- 替換:3個參數(shù):起始位置、要刪除的項數(shù)和要插入的任意數(shù)量的項
- 返回一個數(shù)組嫁佳,包含從原數(shù)組中刪除的項湿弦。如果沒有刪除班利,則返回一個空數(shù)組
<h3 id="5.2.7">5.2.7 位置方法</h3>
- indexOf()和lastIndexOf()
- 參數(shù):要查找的項和表示查找起點(diǎn)位置(可選)的索引
- indexOf()從數(shù)組的開頭開始找,lastIndexOf()從末尾開始找
- 返回值:要查找的項在數(shù)組中的位置罗标。-1表示沒找到
- 參數(shù)與項嚴(yán)格相等(全等操作符)
<h3 id="5.2.8">5.2.8 迭代方法</h3>
5個迭代方法的參數(shù):要在每一項上運(yùn)行的函數(shù)和運(yùn)行該函數(shù)的作用域?qū)ο?br>
傳入函數(shù)接收的參數(shù):數(shù)組項的值庸队、該項在數(shù)組中的位置和數(shù)組對象本身
以下方法都不改變數(shù)組中包含的值
every():如果傳入的函數(shù)對每一項都返回true,則返回true
filter():返回 能返回true的項組成的 數(shù)組
forEach():數(shù)組的每一項都運(yùn)行給定函數(shù)闯割。沒有返回值
map():返回每次函數(shù)調(diào)用的結(jié)果組成的數(shù)組
-
some():給定函數(shù)對任一項返回true彻消,則返回true
var numbers = [1, 2, 3, 4, 5]; var everyResult = numbers.every(function(item, index, array){ return (item>2); });
<h3 id="5.2.9">5.2.9 縮小方法</h3>
reduce()和reduceRight()的參數(shù):一個在每一項上調(diào)用的函數(shù)和作為縮小基礎(chǔ)的初始值(可選)。ruduce()從第一項開始纽谒,reduceRight()從最后一項開始
傳入函數(shù)的參數(shù):前一個值证膨,當(dāng)前值,項的索引和數(shù)組對象鼓黔。這個函數(shù)返回的任何值都會作為第一個參數(shù)自動傳給下一項央勒。
var values=[1, 2, 3, 4, 5];
var sum = values.reduce(function(prev, cur, index, array){
return prev + cur;
});
<h2 id="5.3">5.3 Date類型</h2>
自1970.1.1開始經(jīng)過的毫秒數(shù)
創(chuàng)建日期對象:var now = new Date();//自動獲得當(dāng)前時間,是一個字符串
Date.parse():
- 參數(shù):表示日期的字符串
- 返回:相應(yīng)日期的毫秒數(shù)
- 格式:2/28/2017澳化、February 28,2017崔步、Tuesday February 28 2017 00:00:00 GMT-0700、2017-02-28T00:00:00
- 字符串不正確返回NaN
- 直接將字符串傳給Date()函數(shù)缎谷,后臺以同樣會調(diào)用Date.parse()
Date.UTC():
- 參數(shù):年份井濒、基于0的月份(0-11)、月中的哪一天(1-31)列林、小時數(shù)(0-23)瑞你、分鐘、秒希痴、毫秒者甲。年和月必須
- 默認(rèn)天數(shù)1,其他0
Date.now():返回調(diào)用這個方法時的日期和時間的毫秒數(shù)
還有一種方法是用+操作符與把Date()對象轉(zhuǎn)換成毫秒數(shù)
<h3 id="5.3.1">5.3.1 繼承的方法</h3>
- toLocaleString():按照與瀏覽器相適應(yīng)的格式返回日期和時間
- toString():通常返回帶有時區(qū)信息的日期和時間砌创,一般以軍用時間表示(小時是0-23)
- valueOf():返回毫秒數(shù)
<h3 id="5.3.2">5.3.2 日期格式化方法</h3>
- toDateString()
- toTimeString()
- toLocaleDateString()
- tolocalTimeString()
- toUTCString()
<h3 id="5.3.3">5.3.3 日期/時間組件方法</h3>
很多..很多..
<h2 id="5.4">5.4 RegExp類型</h2>
正則表達(dá)式的兩種創(chuàng)建方法
-
字面量
語法:
var expression = / pattern / flags ;
-
flag:
- g:global虏缸。全局模式
- i:case-insensitive鲫懒。不區(qū)分大小寫模式
- m:multiline:多行模式。
注意轉(zhuǎn)義
-
RegExp構(gòu)造函數(shù)
- 參數(shù):要匹配的字符串模式刽辙,可選的標(biāo)志字符串
- 要雙重轉(zhuǎn)義
正則表達(dá)式字面量始終共享同一個RegExp實例窥岩,而構(gòu)造函數(shù)創(chuàng)建的每一個新RegExp實例都是一個新實例。使用正則表達(dá)式字面量必須像直接調(diào)用RegExp一樣宰缤,每次都創(chuàng)建新的RegExp實例
<h3 id="5.4.1">5.4.1 RegExp實例屬性</h3>
- global:是否設(shè)置g
- ignoreCase:是否設(shè)置i
- lastIndex:整數(shù)颂翼,表示開始搜索下一個匹配項的起始位置
- multiline:是否設(shè)置m
- source:正則表達(dá)式的字符串表示,按照字面量形式
<h3 id="5.4.2">5.4.2 RegExp實例方法</h3>
-
exec()
- 參數(shù):要應(yīng)用模式的字符串
- 返回:包含第一個匹配項信息的數(shù)組慨灭。沒有匹配項則返回null
- 返回數(shù)組的兩個額外屬性:index(位置)疚鲤、input(輸入的字符串)
- 返回的書組中,第一項是與整個模式匹配的字符串缘挑,其他項是與模式中的捕獲組匹配的字符串
- 不設(shè)置g時,每次都從0開始查詢桶略。設(shè)置g時语淘,會接著上次查詢。但是都是只返回一個匹配項
-
test()
- 參數(shù):字符串
- 用來測試字符串和某個模式是否匹配
toLocaleString()/toString():返回正則表達(dá)式的字面量
valueOf():返回正則表達(dá)式本身
<h3 id="5.4.3">5.4.3 RegExp構(gòu)造函數(shù)屬性</h3>
- input:最近一次要匹配的字符串
- leftContext:字符串匹配項左邊的部分
- RightContext:字符串匹配項右邊的部分
- lastMatch:最近一次的匹配項
- lastParen:最近一次的匹配的捕獲組
- multiline:是否所有表達(dá)式都使用多行模式
- $1——$9:第1-9個匹配的捕獲組
<h3 id="5.4.4">5.4.4 模式的局限性</h3>
不支持許多高級正則表達(dá)式的特性
<h2 id="5.5">5.5 Function類型</h2>
函數(shù)是對象际歼,函數(shù)名是指針惶翻。每個函數(shù)都是Function類型的實例。一個函數(shù)可能會有多個名字
定義函數(shù):
- function sum (num1, num2){
...
} - var sum = function(num1, num2){
...
}
<h3 id="5.5.1">5.5.1 沒有重載</h3>
后定義的將覆蓋前面的
<h3 id="5.5.2">5.5.2 函數(shù)聲明與函數(shù)表達(dá)式</h3>
-
函數(shù)聲明:
- 形式:
function sum(num1, num2){...}
- 函數(shù)聲明會提前鹅心,解析器會將函數(shù)聲明提前添加到執(zhí)行環(huán)境
- 形式:
-
函數(shù)表達(dá)式:
- 形式:
var sum = function(num1, num2){...};
- 在執(zhí)行到函數(shù)所在語句之前吕粗,變量sum不會保存對函數(shù)的引用
- 形式:
<h3 id="5.5.3">5.5.3 作為值的函數(shù)</h3>
可以像傳遞參數(shù)一樣把一個函數(shù)傳遞給令一個函數(shù)⌒窭ⅲ可以將一個函數(shù)作為令一個函數(shù)的結(jié)果來返回
<h3 id="5.5.4">5.5.4 函數(shù)內(nèi)部屬性</h3>
-
arguments
- 類數(shù)組對象颅筋,包含著傳入函數(shù)中的所有參數(shù)
- callee:指向擁有這個arguments對象的函數(shù)
this
caller:保存調(diào)用當(dāng)前函數(shù)的函數(shù)的引用。如果在全局模式下输枯,則是null
<h3 id="5.5.5">5.5.5 函數(shù)屬性和方法</h3>
-
屬性
- length:表示函數(shù)希望接收的命名參數(shù)的個數(shù)
- prototype
-
方法
-
Functin.apply(obj, args)
- 參數(shù):
- obj:這個對象將代替Function類里的this對象
- args:這個是數(shù)組议泵,它將作為參數(shù)傳遞給Function(也可以是arguments)
- 參數(shù):
-
call()
- 與apply()類似。只是傳遞給函數(shù)的參數(shù)必須逐個列舉出來桃熄。比如
sum.call(this, num1, num2);
- 與apply()類似。只是傳遞給函數(shù)的參數(shù)必須逐個列舉出來桃熄。比如
作用:這兩種方法最主要的就是能擴(kuò)充函數(shù)的作用域先口。第一個參數(shù)可以是this、window等等
-
bind()
- 也是同理瞳收,設(shè)置函數(shù)的this值的
var oSayColor = sayColor.bind(o);
- 以上代碼會將函數(shù)oSayColor的this值設(shè)為對象o
toLocaleString()碉京、toString()、valueOf()返回函數(shù)的代碼
-
<h2 id="5.6">5.6 基本包裝類型</h2>
要從內(nèi)存中讀取字符串的值時螟深,后臺會自動:1.創(chuàng)建String類型的一個實例谐宙。2.在實例上調(diào)用指定的方法。3.銷毀這個實例
引用類型和基本包裝類型的主要區(qū)別就是對象的生存期血崭。new一個實例在執(zhí)行流離開作用域前一直保存在內(nèi)存中卧惜;而基本包裝類型的對象是自動創(chuàng)建的厘灼,只存在一行代碼的執(zhí)行瞬間,然后立即銷毀
<h3 id="5.6.1">5.6.1 Boolean類型</h3>
Boolean類型的實例咽瓷。valueOf()返回基本類型值true或false设凹。toString()返回字符串"true"或"false"
<h3 id="5.6.1">5.6.2 Number類型</h3>
- valueOf():返回基本類型的數(shù)值。另外兩個返回字符串類型的數(shù)值
- toFixed():按照指定的小數(shù)位返回數(shù)值的字符串表示(四舍五入)
- toExponential():返回e表示法表示的數(shù)值的字符串形式茅姜。接收一個小數(shù)位數(shù)的參數(shù)(四舍五入)
- toPercision():返回數(shù)值的最合適格式闪朱。接收一個表示數(shù)值的所有數(shù)字的位數(shù)的參數(shù)。也就是說會自動決定調(diào)用toFixed()還是toExponential()
<h3 id="5.6.3">5.6.3 String類型</h3>
toString()等三個方法都返回字符串值
屬性:length
-
字符方法
- charAt()钻洒、charCodeAt()
- 參數(shù):字符位置
- 返回:前者單字符字符串奋姿,后者返回字符編碼
- 方括號也可以訪問單個字符
- charAt()钻洒、charCodeAt()
-
字符串操作方法
-
concat()
- 參數(shù):任意多個字符串
- 作用:拼接字符串
- 返回:拼接得到的新字符串,原字符串保持不變
- 一般還是用+操作符
-
slice()素标、substr()称诗、substring()
- 參數(shù):第一個參數(shù)指定子字符串的開始位置。第二個參數(shù)(可選)slice()和substring()指定子字符串最后一個字符后面的位置头遭;substr()指定返回的字符個數(shù)
- 作用:基于字符串創(chuàng)建新字符串
- 返回:新的字符串寓免,原字符串不變
- 在傳入負(fù)值的情況下。slice()負(fù)值+length计维;substr()第一個參數(shù)+length袜香,第二個=0;substring()都=0
-
-
字符串位置方法
- indexOf()鲫惶、lastIndexOf()
- 參數(shù):要搜索的子字符串蜈首,從哪個位置搜索(可選)
- 返回:子字符串位置。沒有則返回-1
- 一個從前往后欠母,一個從后往前
- indexOf()鲫惶、lastIndexOf()
-
trim()
- 作用:創(chuàng)建一個字符串副本欢策,刪除前置和后置空格
- 返回:新字符串
- trimLeft()和trimRight()分別刪除開頭和結(jié)尾
字符串大小寫轉(zhuǎn)換方法
toLowerCase()、toLocaleLowerCase()艺蝴、toUpperCase()猬腰、toLocaleUpperCase()-
字符串的模式匹配方法
-
match()
- 參數(shù):一個。正則表達(dá)式或RegRxp對象
- 返回:和RegExp的exec()類似猜敢,返回一個數(shù)組
-
search()
- 參數(shù):一個姑荷。正則表達(dá)式或RegRxp對象
- 返回:第一個匹配項的索引。沒有則返回-1
- 始終從開頭向后查找
-
replace()
- 參數(shù):兩個缩擂。RegExp對象或字符串鼠冕,字符串或一個函數(shù)
- 如果第一個是字符串,那么只替換第一個字符串胯盯。
- 第一個參數(shù)提供一個正則表達(dá)式懈费,替換所有字符串,記得指定g
- 如果第二個參數(shù)是字符串博脑,可以使用一些特殊的字符序列憎乙,將正則表達(dá)式操作得到的值插入到結(jié)果字符串中
- 傳入的函數(shù)的參數(shù):模式的匹配項票罐,模式匹配項的位置,原始字符串泞边。返回字符串
-
split()
- 參數(shù):字符串或RegExp對象该押,數(shù)組的大小(可選)
- 作用:基于指定的分隔符將一個字符串分割成多個子字符串阵谚,將結(jié)果放在一個數(shù)組中
- 返回:數(shù)組
-
-
localeCompare()
- 如果字符串在字母表中排在字符串參數(shù)之前蚕礼,返回一個負(fù)數(shù)
- 如果相等,返回0
- 如股票在之后梢什,返回正數(shù)
-
fromCharCode()
- 參數(shù):一或多個字符編碼
- 返回:字符串
- 和charCodeAt()相反的操作
- 這是一個String本身的靜態(tài)方法
HTML方法
盡量不用
<h2 id="5.7">5.7 單體內(nèi)置對象</h2>
<h3 id="5.7.1">5.7.1 Global對象</h3>
-
URI編碼方法
- encodeURI()奠蹬、enceodeURIComponent()
- 前者主要用于整個URI,不會對本身屬于URI的特殊字符進(jìn)行編碼
- 后者主要用于URI的某一段嗡午,會對任何非標(biāo)準(zhǔn)字符進(jìn)行編碼
- decodeURI()囤躁、deceodeURIComponent()
-
eval()
- 在eval()中創(chuàng)建的任何變量或函數(shù)都不會被提升。
- eval()就是用來解析ECMAScript語句的荔睹。
Global對象的屬性
很多-
window對象
-
訪問Global對象的兩種方法
- 就是訪問window割以。在全局中聲明的所有變量和函數(shù),都是window對象的屬性
-
用this
var global = function(){ return this; }();
-
<h3 id="5.7.2">5.7.2 Math對象</h3>
Math對象的屬性
很多-
min()和max()方法
參數(shù):任意多個
-
數(shù)組中的最大值或最小值:
var values = [1, 2, 3, 4, 5]; var max = Math.max.apply(Math, values); //apply是一個很有用的東西应媚!
-
舍入方法
- Math.ceil():向上舍
- Math.floor():向下舍
- math.round():四舍五入
-
random()
- 返回0-1間的一個隨機(jī)數(shù),不包括0和1
- 值 = Math.floor(Math.random() * 可能值的總數(shù) + 第一個可能的值)
其他方法
很多
<h2 id="5.8">5.8 小結(jié)</h2>
引用類型與類相似猜极,但實現(xiàn)不同
Object
Array類型是一組值的有序列表中姜,同時提供了操作和轉(zhuǎn)換這些值的功能
Date
RegExp
函數(shù)實際上是Function類型的實例,因此函數(shù)也是對象
-
JavaScript中的基本類型值可以被當(dāng)作對象訪問跟伏。三種基本包裝類:Boolean丢胚、Number、String受扳。
- 每個包裝類型映射到同名的基本類型
- 讀取模式下訪問基本類型携龟,就會創(chuàng)建對應(yīng)基本包裝類型的一個對象
- 包裝對象會立即被銷毀
內(nèi)置對象:Global、Math