欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript高級(jí)程序設(shè)計(jì)(第三版)學(xué)習(xí)筆記1~5章

 更新時(shí)間:2016年03月11日 09:19:03   作者:平凡世界平凡人  
這篇文章主要介紹了JavaScript高級(jí)程序設(shè)計(jì)(第三版)學(xué)習(xí)筆記1~5章 的相關(guān)資料,需要的朋友可以參考下

第2章,在html中使用JavaScript

Html引入外部js腳本

<script type="text/javascript" src="test.js">兩個(gè)</script>之間不應(yīng)放腳本,因?yàn)椴⒉粫?huì)被執(zhí)行</script>


<script>標(biāo)簽有一個(gè)defer屬性可以延遲腳本執(zhí)行,但是并不保證會(huì)按腳本排列順序執(zhí)行

建議:將腳本引入放在<body>標(biāo)簽的所有內(nèi)容之后,而不放在<head>標(biāo)簽中進(jìn)行引入,加快頁面響應(yīng)

<noscript></noscript>標(biāo)簽中的內(nèi)容會(huì)在瀏覽器不支持腳本或腳本被禁用的時(shí)候輸出,啟用了腳本的瀏覽器將不會(huì)看到標(biāo)簽中的

內(nèi)容

第3章,基本概念

標(biāo)識(shí)符

第一個(gè)字符必須是字母,下劃線(_)或美元符號(hào)($),有效命名為字母、數(shù)字、下劃線和美元符號(hào)構(gòu)成的

采用駝峰命名法:第一個(gè)字母小寫,后面的每個(gè)單詞首字母大寫

單行注釋:

//這是單行注釋

多行注釋:

/*這是
多行
注釋
*/

typeof 操作符

typeof – 判斷給定變量的數(shù)據(jù)類型

返回:

“undefined” – 未定義的數(shù)據(jù)類型

“boolean” – 布爾值

“string” – 字符串

“number” – 數(shù)值

“object” – 對(duì)象或者NULL

“function” – 函數(shù)

注:函數(shù)在js中是對(duì)象,不是數(shù)據(jù)類型,因此使用typeof區(qū)分函數(shù)和對(duì)象是有必要的

  typeof在有些時(shí)候會(huì)返回令人迷惑但技術(shù)上確是正確的值,例如,null和對(duì)象,兩者都會(huì)返回“object”

  null與undefined是相等的,null == undefined 將返回true

進(jìn)行算術(shù)計(jì)算時(shí),所有的八進(jìn)制和十六進(jìn)制都將轉(zhuǎn)換成十進(jìn)制

Infinity 無窮大,有正負(fù)無窮大,可以使用isFinite()判斷是否無窮大

Number.MAX_VALUE,Number.MIN_VALUE分別保存著數(shù)值類型的最大值和最小值

Number.NEGATIVE_INFINITY和Number.POSITIVE_INFINITY分別保存著負(fù)和正無窮大

NaN 非數(shù)值,可以使用isNaN判斷一個(gè)變量是否非數(shù)值

數(shù)值轉(zhuǎn)換

強(qiáng)制轉(zhuǎn)換Number(),但是結(jié)果并不合理,建議使用parseInt()函數(shù),并帶入需要轉(zhuǎn)換的基數(shù)

例:

parseInt(“10”,2); //以二進(jìn)制解析
parseInt(“10”,8); //以八進(jìn)制解析

 不帶入基數(shù)意味著讓parseInt自己決定如何解析字符串,這會(huì)在某些時(shí)候造成錯(cuò)誤

parseFloat()與parseInt()基本相同,將字符串解析成浮點(diǎn)數(shù),始終忽略前導(dǎo)零,只解析十進(jìn)制值,十六進(jìn)制將被解析成0,因此

他沒有第二個(gè)參數(shù)

字符串類型

字符串類型變量是不可變,亦即字符串變量是為一個(gè)常量,可以使用單引號(hào)('),也可以使用雙引號(hào)(”)定義字符串變量,但必須匹配,如果需要混用,建議加上轉(zhuǎn)義字符(\)

使用toString()函數(shù)將一個(gè)值轉(zhuǎn)換為字符串,數(shù)值則可以使用基數(shù)值進(jìn)行轉(zhuǎn)換

例:

var num = 10;
num.toString(“2”); //”1010”
num.toString(“8”); //”12”

 也可以使用String()進(jìn)行強(qiáng)制轉(zhuǎn)換

Object類型

constructor:構(gòu)造函數(shù)

hasOwnProperty(propertyName):檢查給定的屬性在當(dāng)前對(duì)象中是否存在

isPrototypeOf(object):檢查傳入的對(duì)象是否是傳入對(duì)象的原型

propertyIsEnumerable(propertyName):檢查給定的屬性是否能夠使用for-in語句來枚舉,與hasOwnProperty一樣,給定的屬性名必須以字符串的形式指定

toLocalString():返回對(duì)象的字符串表示,與執(zhí)行環(huán)境的地區(qū)對(duì)應(yīng)

toString():返回對(duì)象的字符串表示

valueOf():返回對(duì)象的字符串、數(shù)值或布爾值表示。通常與toString返回相同

操作符

按位非:~,按位與:&,按位或:|,按位異或:^,左移:<<,有符號(hào)右移:>>(以符號(hào)位填充),無符號(hào)右移:>>>(以零填充),邏輯非:!,邏輯與:&&,邏輯或:||

關(guān)系操作符:<,>,<=,>=

相等和不相等:==,!=,先轉(zhuǎn)換再比較

全等和不全等:===,!==,只比較,不轉(zhuǎn)換,類型不同則不同

條件操作符:? :,三目運(yùn)算符

逗號(hào)操作符:(,),返回最后一個(gè)表達(dá)式的值:var num = (3,5,6,2),num = 2

語句

if{},do{}while();,while(){},for(;;){}

for-in語句:

精準(zhǔn)的迭代語句,可以用來枚舉對(duì)象的屬性

for(property in expression) statement

例:

for(var propName in window){
document.write(propName);
} 

注:當(dāng)對(duì)象的變量值為null或者為undefined時(shí),for-in會(huì)發(fā)生錯(cuò)誤,雖然ECMAScript5更改了這一錯(cuò)誤,不過,為了最大限度的保證兼容性,在使用for-in循環(huán)之前,先檢測(cè)該對(duì)象的值不是null或者undefined

label語句:標(biāo)簽語句

start:for(var I = 0;i<count;i++){
statement
} 

這個(gè)start標(biāo)簽可以在之后的break和continue語句中使用,標(biāo)簽語句一般與循環(huán)語句一起使用

with語句:

將代碼的作用域設(shè)置到一個(gè)特定的對(duì)象中

with(expression) statement;

嚴(yán)格模式下不允許使用with語句,否則將被視為語法錯(cuò)誤

大量使用with語句會(huì)導(dǎo)致性能下降以及代碼調(diào)試?yán)щy,建議大型應(yīng)用程序的開發(fā)不使用with語句

switch語句

switch(expression){
case selection:statement;
break;
……
default:statement;
break;
}

函數(shù)

嚴(yán)格模式對(duì)函數(shù)限制:

函數(shù)不能命名為eval和arguments

參數(shù)不能命名為eval和arguments

不能出現(xiàn)兩個(gè)命名參數(shù)同名的情況

理解函數(shù)參數(shù)

js中的函數(shù)并不介意傳進(jìn)來多少個(gè)函數(shù)參數(shù),即使與定義的情況不同,因?yàn)樵诤瘮?shù)接收到的永遠(yuǎn)都是一個(gè)類似數(shù)組形式的參數(shù),函數(shù)并不關(guān)心數(shù)組包含的參數(shù)。可以在函數(shù)體內(nèi)通過arguments對(duì)象來訪問這個(gè)參數(shù)數(shù)組。

arguments只是與數(shù)組類似,因?yàn)榭梢允褂梅嚼ㄌ?hào)來訪問它的元素,使用length來確定傳進(jìn)來的參數(shù)個(gè)數(shù)。arguments中的參數(shù)順序與傳進(jìn)來的參數(shù)順序一致,并且是同步改變的。

注:沒有傳遞值的命名參數(shù),將會(huì)被賦值為undefined值。

  嚴(yán)格模式對(duì)arguments對(duì)象作出了一些限制:在函數(shù)中對(duì)arguments進(jìn)行賦值將會(huì)變得無效,重寫arguments值將會(huì)導(dǎo)致語法錯(cuò)誤

  使用arguments對(duì)參數(shù)的類型和數(shù)量進(jìn)行判斷,可以模仿重載

第4章,變量、作用域和內(nèi)存問題

注:js中所有函數(shù)的參數(shù)都是按值傳遞的

檢測(cè)類型:instanceof

instanceof操作符,只能操作引用類型,即對(duì)象,對(duì)基本數(shù)據(jù)類型的測(cè)試始終返回true,因?yàn)榛緮?shù)據(jù)類型不是對(duì)象

result = variable instanceof constructor

若變量是給定的引用類型,則返回true

例:

person instanceof Object; //person是Object類型嗎?
color instanceof Array; //color是Array類型嗎?

沒有塊級(jí)作用域

if(true){
var j = “blue”;
}
alert(j);
//將會(huì)得到輸出blue 

如果在C/C++中將會(huì)出現(xiàn)錯(cuò)誤,而js并不會(huì)出現(xiàn)錯(cuò)誤,在塊里面定義的變量將會(huì)添加到當(dāng)前的花括號(hào)之外的作用域中。

垃圾收集

標(biāo)記清除

引用計(jì)數(shù)

第5章,引用類型

Object類型

兩種創(chuàng)建實(shí)例方式:

一、使用new操作符后跟Object構(gòu)造函數(shù)

var obj = new Object();
obj.name = “name”;
obj.age = 23; 

二、使用對(duì)象字面量(通過對(duì)象字面量定義對(duì)象時(shí),實(shí)際上并不會(huì)調(diào)用Object構(gòu)造函數(shù))

var obj = {
name : “name”;
age : 23
}

可以使用點(diǎn)表示法和方括號(hào)表示法訪問對(duì)象的屬性

點(diǎn)表示法: 方括號(hào)表示法:(必須以字符串的形式表示要訪問的屬性名)

obj.name obj[“name”]

注:當(dāng)屬性名包含會(huì)導(dǎo)致語法錯(cuò)誤的字符,或?qū)傩悦褂玫氖顷P(guān)鍵字或保留字時(shí),可以使用方括號(hào)表示法,還可以通過變量訪問屬性

建議:除非必須使用變量訪問屬性,否則最好使用點(diǎn)表示法

Array類型

創(chuàng)建方式:

一、使用Array構(gòu)造函數(shù)

var arr = new Array(); //創(chuàng)建一個(gè)空數(shù)組
var arr = new Array(20); //創(chuàng)建一個(gè)包含20個(gè)項(xiàng)的數(shù)組
var arr = new Array(“one”,”two”,”three”); //創(chuàng)建包含one,two,three三項(xiàng)的數(shù)組 
還可以將new操作符省略

二、使用數(shù)組字面量表示法

var color = [“red”,”blue”]; //創(chuàng)建包含兩個(gè)項(xiàng)的數(shù)組
var color = [“yellow”,”green”,]; //不要這樣創(chuàng)建數(shù)組,瀏覽器的解析不同,結(jié)果會(huì)不同 

注:使用數(shù)組字面量創(chuàng)建數(shù)組時(shí),也不會(huì)調(diào)用Array構(gòu)造函數(shù)

arr.length,將會(huì)返回?cái)?shù)組的項(xiàng)數(shù),即將返回?cái)?shù)組的大小

對(duì)arr.length進(jìn)行賦值,將會(huì)動(dòng)態(tài)改表數(shù)組大小,賦值大于原數(shù)組大小將擴(kuò)大數(shù)組,新增項(xiàng)獲得undefined的值,小于原數(shù)組大小,將保留前面的數(shù)值,多的數(shù)值將被移除

數(shù)組檢測(cè):

對(duì)于只有一個(gè)全局作用域而言,instanceof可以很方便的檢測(cè)某個(gè)變量是否是數(shù)組,但對(duì)于多個(gè)框架的網(wǎng)頁而言,則存在多個(gè)不同的版本的Array構(gòu)造函數(shù),instanceof將不能夠滿足要求,為此引入Array.isArray(value)方法,這個(gè)方法可以最終確定某個(gè)值是否是數(shù)組,而不管是哪個(gè)框架構(gòu)造的。支持的瀏覽器為:IE9+,F(xiàn)irefox4+,Safari5+,Opera10.5+,chrome。

轉(zhuǎn)換方法:

調(diào)用數(shù)組的toString()方法,將會(huì)返回由數(shù)組中每個(gè)值的字符串形式拼接而成的以逗號(hào)分隔的字符串,valueOf()方法返回的還是數(shù)組,與toString()是一樣的結(jié)果

toLocaleString()返回的通常與toString()和valueOf()返回結(jié)果是一樣的,但并不總是如此,使用toLocaleString()方法,則會(huì)去調(diào)用數(shù)組中每一項(xiàng)的toLocaleString()方法,而不是toString()方法。

join方法

join方法接受一個(gè)參數(shù),即作為分隔符的字符串

例:

var arr = [“one”,”two”];
arr.join(“|”); //one|two 

如果不給join傳遞參數(shù),則返回以逗號(hào)作為分隔的字符串

注:如果數(shù)組中某一項(xiàng)的值為null或者undefined,則調(diào)用join,toLocaleString(),toString(),valueOf()返回的結(jié)果則使用空字符串表示

數(shù)組的棧方法

var arr = new Array();

arr.push(),在數(shù)組末尾添加數(shù)據(jù),可以傳入多個(gè)參數(shù),并返回修改后的數(shù)組長度

arr.pop(),從數(shù)組末尾移除最后一個(gè)數(shù)據(jù),減少數(shù)組的length值,并返回該項(xiàng)的值

數(shù)組的隊(duì)列方法

var arr = new array();

arr.shift(),移除數(shù)組的第一項(xiàng),減少數(shù)組的length值,并返回該項(xiàng)的值

arr.unshift(),在數(shù)組的前端添加任意個(gè)項(xiàng),并返回修改后的數(shù)組長度

使用shift和push結(jié)合,可以模擬隊(duì)列操作

使用unshift和pop結(jié)合,可以從相反方向模擬隊(duì)列

重排序方法:

var arr = new Array();

arr.reverse(),翻轉(zhuǎn)數(shù)組的項(xiàng),即首尾順序調(diào)轉(zhuǎn)

arr.sort(),默認(rèn)情況下升序排列,注:排列順序是數(shù)組值轉(zhuǎn)換成字符串之后的升序排列,通常不是所需要的排序

sort方法可以接受一個(gè)比較函數(shù)作為參數(shù),實(shí)現(xiàn)所需的排序方法,方法返回負(fù)數(shù)則按升序排列,返回整數(shù)則按降序排列,注:可以適應(yīng)大多數(shù)排序情況

操作方法:

var arr = new Array();

arr.concat(),進(jìn)行數(shù)組連接,并返回連接后的數(shù)組,可傳入多個(gè)參數(shù)

arr.slice(),可以基于當(dāng)前數(shù)組中的一個(gè)或多個(gè)值創(chuàng)建一個(gè)新數(shù)組返回,接受一個(gè)或兩個(gè)參數(shù),即返回原數(shù)組的起始位置和結(jié)束位置之間的所有項(xiàng),不包含結(jié)束位置的項(xiàng),只有一個(gè)參數(shù)則返回從該參數(shù)指定位置到末尾的所有項(xiàng)。

注:如果參數(shù)是負(fù)數(shù),則會(huì)將數(shù)組的長度加上這個(gè)負(fù)數(shù)得到的結(jié)果來確定位置。結(jié)束位置小于起始位置則返回空

splice()方法:

刪除:指定兩個(gè)參數(shù),要?jiǎng)h除的起始位置和要?jiǎng)h除的項(xiàng)數(shù),例:splice(0,2);

插入:指定三個(gè)參數(shù),起始位置,要?jiǎng)h除的項(xiàng)數(shù)(0),要插入的項(xiàng),插入的項(xiàng)可以是多個(gè)項(xiàng)

例:splice(2,0,”red”,”green”); //從位置2插入red,green

替換:與插入相同,第二個(gè)參數(shù)有變化,起始位置,要?jiǎng)h除的項(xiàng)數(shù),要插入的項(xiàng),插入的項(xiàng)數(shù)可以是多個(gè)項(xiàng)

位置方法:

indexOf(),lastIndexOf(),都接收兩個(gè)參數(shù),要查找的項(xiàng)和查找起點(diǎn)位置索引indexOf從數(shù)組頭開始查找,lastIndexOf從數(shù)組末尾開始查找。若沒有找到則返回-1.

注:查找時(shí)進(jìn)行的比較使用的是全等操作符,就像使用“===”一樣

迭代方法:

ECMAScript5定義了5個(gè)迭代方法,全部接收兩個(gè)參數(shù):每一項(xiàng)上運(yùn)行的函數(shù),運(yùn)行該函數(shù)的作用域?qū)ο蟆绊憈his的值。函數(shù)則接收三個(gè)參數(shù):數(shù)組項(xiàng)的值,該項(xiàng)在數(shù)組中的位置,和數(shù)組對(duì)象本身

var arr = new Array();

every(),對(duì)數(shù)組中每一項(xiàng)運(yùn)行給定函數(shù),每一項(xiàng)都返回true,則返回true

filter(),對(duì)數(shù)組每一項(xiàng)運(yùn)行給定函數(shù),返回該執(zhí)行函數(shù)返回true的項(xiàng)組成的數(shù)組

例:

var num = [1,2,3,4,5,4,3,2,1];
var filter = num.filter(function(item,index,array){
return item > 2;
}); //[3,4,5,4,3] 

forEach(),對(duì)數(shù)組中每一項(xiàng)運(yùn)行給定函數(shù),沒有返回值,本質(zhì)上與for循環(huán)迭代數(shù)組一致

map(),對(duì)數(shù)組中每一項(xiàng)運(yùn)行給定函數(shù),返回每次函數(shù)調(diào)用的結(jié)果組成的結(jié)果

some(),對(duì)數(shù)組中每一項(xiàng)運(yùn)行給定函數(shù),只要任一項(xiàng)的函數(shù)結(jié)果是true,則返回true

注:以上所有函數(shù)并不會(huì)對(duì)數(shù)組進(jìn)行修改

例:

var num = [1,2,3,4,5,4,3,2,1];
var mapResult = num.map(function(item,index,array(){
return item * 2;
});
//以上代碼返回?cái)?shù)組每一項(xiàng)都乘2以后的數(shù)組 

歸并方法:

reduce()和reduceRight()

兩個(gè)函數(shù)都會(huì)迭代數(shù)組的所有項(xiàng),然后構(gòu)建一個(gè)最終返回的值,其中reduce從數(shù)組第一項(xiàng)開始,reduceRight從數(shù)組最后一項(xiàng)開始

這兩個(gè)方法都接收2個(gè)參數(shù):一個(gè)在每一項(xiàng)上都調(diào)用的函數(shù)和(可選的)作為歸并基礎(chǔ)的初始值。傳遞的函數(shù)需要接收4個(gè)參數(shù):前一個(gè)值,當(dāng)前值,項(xiàng)的索引和數(shù)組對(duì)象。這個(gè)函數(shù)的返回值會(huì)作為第一個(gè)參數(shù)傳遞給下一項(xiàng),第一次迭代發(fā)生在數(shù)組的第二項(xiàng)上,因此第一個(gè)參數(shù)是數(shù)組的第一項(xiàng),第二個(gè)參數(shù)是數(shù)組的第二項(xiàng)。

例:

var value = [1,2,3,4,5];
var sum = value.reduce(function(prev,cur,index,array){
return prev + cur;
}); //sum = 15

//第一次執(zhí)行回調(diào)函數(shù),prev = 1,cur = 2,第二次,prev = 3(第一次函數(shù)返回結(jié)果1+2),cur = 3(當(dāng)前數(shù)組項(xiàng))。這個(gè)過程會(huì)把數(shù)組每一項(xiàng)都訪問一遍。

reduceRight除了方向不一樣,其他都一樣。

Date類型

Date類型使用自UTC1970.1.1午夜零時(shí)開始經(jīng)過的毫秒數(shù)來保存日期,可以將日期精確到1970.1.1之前或之后100 000 000(一億)年。

使用Date構(gòu)造函數(shù)而不傳參數(shù),新對(duì)象會(huì)獲得當(dāng)前日期和時(shí)間,要?jiǎng)?chuàng)建特定日期時(shí)間,必須傳入表示該日期的毫秒數(shù),ECMAScript提供了兩個(gè)方法Date.parse和Date.UTC方法來簡(jiǎn)化操作。

Date.parse方法接收一個(gè)表示日期的字符串參數(shù)。這個(gè)方法因?qū)崿F(xiàn)而異,而且通常因地區(qū)而異。美國地區(qū)的瀏覽器支持以下格式:

月/日/年,如6/13/2004

英文月名 日,年,如January 12,2004

英文名星期幾 英文月名 日 年 時(shí):分:秒 時(shí)區(qū),如Tue May 25 2004 00:00:00 GMT-0700

ISO 8601擴(kuò)展格式Y(jié)YYY-MM-DDTHH:mm:ss.sssZ,如2004-05-25T00:00:00,只有支持js5的實(shí)現(xiàn)支持這種格式

Date.UTC也同樣返回表示日期毫秒數(shù),參數(shù)分別為:年份、基于0的月份(一月份是0)、月中哪一天(1-31)、小時(shí)數(shù)(0-23)、分鐘、秒及毫秒數(shù),其中只有前兩個(gè)參數(shù)是必須的。

例:

var someDate = new Date(Date.UTC(2000,0)); //2000年1月1日0時(shí)0分0秒
var someDate = new Date(Date.UTC (2000,0,1,15,23,23)); //2000年1月1日15時(shí)23分23秒 

Date構(gòu)造函數(shù)會(huì)模仿Date.parse和Date.UTC函數(shù)。

Date.now方法返回調(diào)用這個(gè)函數(shù)時(shí)的日期和時(shí)間毫秒數(shù)。在不支持的瀏覽器上面,可以使用+操作符獲取Date對(duì)象時(shí)間戳

var start = +new Date();
var stop = +new Date();

日格式化方法

toDateString—以特定于實(shí)現(xiàn)的格式顯示星期幾、月、日、年

toTimeString—以特定于實(shí)現(xiàn)的格式顯示時(shí)、分、秒和時(shí)區(qū)

toLocaleDateString—以特定于地區(qū)的格式顯示星期幾、月、日、年

toLocaleTimeString—以特定于實(shí)現(xiàn)的格式顯示時(shí)、分、秒

toUTCString—以特定于實(shí)現(xiàn)的格式完整的UTC時(shí)間

與toLocaleString和toString一樣,以上方法沒有一個(gè)能夠用來在用戶界面中顯示一致的日期信息。

RegExp類型,正則

語法:類似于Perl語法

var expression = / pattern /flags;
模式(pattern)部分可以是簡(jiǎn)單或復(fù)雜的正則表達(dá)式,每個(gè)表達(dá)式可以使用一個(gè)或多個(gè)標(biāo)識(shí)符,支持以下3個(gè)標(biāo)識(shí)符

g:全局模式,將被應(yīng)用于所有字符串,而不是在匹配到第一個(gè)字符串后就停止,

i:表示不區(qū)分大小寫,

m:表示多行模式,即達(dá)到一行文本末尾時(shí),會(huì)繼續(xù)查找下一行

注:模式中所有元字符都需要轉(zhuǎn)義

元字符:( [ { \ ^ $ | } ? * + . ] )

以上方法是以字面量模式創(chuàng)建正則表達(dá)式

使用RegExp構(gòu)造正則表達(dá)式

var partten = new RegExp(“bat”,”I”);

注:使用RegExp構(gòu)造函數(shù),所有元字符必須雙重轉(zhuǎn)義

例:/\[bc\]at/ ===> “\\[bc\\]at”

RegExp實(shí)例屬性

global:布爾值,表示是否設(shè)置了g標(biāo)志

ignoreCase:布爾值,表示是否設(shè)置了i標(biāo)志

lastIndex:整數(shù),表示開始搜索的下一個(gè)匹配項(xiàng)的字符位置,從0算起

multiline:布爾值,表示是否設(shè)置了m標(biāo)志

source:正則表達(dá)式的字符串表示,按照字面量形式,而非傳入構(gòu)造函數(shù)中的字符串模式返回

RegExp對(duì)象的主要方法是exec(),exec()接收一個(gè)參數(shù),即要應(yīng)用模式的字符串,返回一個(gè)匹配項(xiàng)(即使設(shè)置了g標(biāo)志),有沒有設(shè)置g標(biāo)志的差別在于,沒有設(shè)置則總是返回同一個(gè)結(jié)果,設(shè)置了則返回下一個(gè)匹配
test方法,接收一個(gè)字符串,只返回是否匹配,不返回結(jié)果

Function類型

函數(shù)是對(duì)象,函數(shù)名是指針

定義方法:

//函數(shù)聲明的形式
function sum(num1,num2){
return num1 + num2;
}
//函數(shù)表達(dá)式的形式
var sum = function(num1,num2){
return num2 + num2;
}
var sum = new Function(“num2”,”num2”,”return num1 + num2”); //不建議,性能渣,但能更好的理解函數(shù)是對(duì)象的思想。 
function add(num){
return num + 100;
}
function add(num1,num2){
return num + 200;
}
//實(shí)際如同下面的代碼
function add(num){
return num + 100;
}
add = function(num){
return num + 200;
}

所以函數(shù)沒有重載。

函數(shù)內(nèi)部屬性

函數(shù)內(nèi)部有兩個(gè)特殊對(duì)象,arguments和this

arguments有一個(gè)屬性callee,指向擁有這個(gè)arguments的函數(shù)

定義遞歸函數(shù)時(shí),最好使用arguments.callee()來代替函數(shù)名,降低耦合,減少問題的出現(xiàn)

例:

function factorial(num){
if(num<1)
return 1;
else
return num * factorial(num – 1);
}
function factorial(num){
if(num<1)
return 1;
else
return num * arguments.callee(num – 1);
}

this對(duì)象

函數(shù)的this對(duì)象引用的是函數(shù)據(jù)以執(zhí)行的環(huán)境對(duì)象

ECMAScript5規(guī)范定義了另一個(gè)函數(shù)對(duì)象的屬性:caller,保存著調(diào)用當(dāng)前函數(shù)的函數(shù)的引用

函數(shù)包含了兩個(gè)屬性:length(希望接收的函數(shù)個(gè)數(shù))和prototype,prototype不可枚舉,所以for-in無法發(fā)現(xiàn)他。prototype是所有引用類型保存其所有實(shí)例方法的真正所在

包含兩個(gè)非繼承而來的方法:apply和call

apply方法接收兩個(gè)參數(shù):一個(gè)是在其中運(yùn)行函數(shù)的作用域,也就是this對(duì)象,一個(gè)是參數(shù)數(shù)組,可以是Array實(shí)例,也可以是arguments對(duì)象

call與apply基本相同,區(qū)別在于,使用call函數(shù),參數(shù)必須逐個(gè)列舉出來

傳遞參數(shù)并非apply和call真正用武之地,真正強(qiáng)大的地方在于能夠擴(kuò)充函數(shù)的作用域

例:

window.color = “red”;
var o = {color:”blue”};
function sayColor(){
alert(this.color);
}
sayColor(); //red
sayColor.call(this); //red
sayColor.call(window); //red
sayColor.call(o); //blue 

不需要再將sayColor函數(shù)放到o對(duì)象中,就可以使o對(duì)象能夠使用sayColor函數(shù)

ECMAScript5還定義了另一個(gè)方法:bind,這個(gè)方法會(huì)創(chuàng)建一個(gè)函數(shù)實(shí)例,其this值會(huì)被綁定到傳給bind函數(shù)的值

window.color = “red”;
var o = {color:”blue”};
function sayColor(){
alert(this.color);
}
var objSayColor = sayColor.bind(o);
objSayColor(); //blue 

toLocaleString和toString始終返回函數(shù)代碼,但由于瀏覽器差異,并沒有辦法根據(jù)返回結(jié)果實(shí)現(xiàn)任何重要功能,valueOf也只返回函數(shù)代碼

基本包裝類型

Boolean、Number、String

對(duì)基本包裝類型的實(shí)例調(diào)用typeof會(huì)返回object,而且所有的基本包裝類型的實(shí)例都會(huì)返回true,

Object構(gòu)造函數(shù)也會(huì)像工廠方法一樣,根據(jù)傳入的值的類型返回響應(yīng)的基本包裝類型的實(shí)例

例:

var obj = new Object(“some text”);
alert(obj instanceof String); //true 

使用new調(diào)用基本包裝類型和直接使用同名的轉(zhuǎn)型函數(shù)是不一樣的。例:

var value = “25”;
var num = Number(value); //轉(zhuǎn)型函數(shù)
alert(typeof num); //”number”
var obj = new Number(value); //構(gòu)造函數(shù)
alert(typeof obj); //”object” 

Number類型

另外提供的方法

toFixed();接收一個(gè)參數(shù),表示要以幾位小數(shù)表示當(dāng)前值,當(dāng)前小數(shù)位過長則四舍五入,此方法可以表示帶有0到20個(gè)小數(shù)位的數(shù)值,這只是標(biāo)準(zhǔn)實(shí)現(xiàn)范圍

toExponential();接收一個(gè)參數(shù),返回指數(shù)形式表示,參數(shù)指定返回的結(jié)果中的小數(shù)位數(shù)

toPrecision();接收一個(gè)參數(shù),表示所有數(shù)字的位數(shù),不包括指數(shù)部分

string類型

var str = “hello world”;
str.charAt(1); //”e”,返回字符
str.charCodeAt(1); //”101”,返回字符編碼
str.concat();//連接字符串,可以接收任意個(gè)字符串 
slice(),substring(),substr(),都接收一或兩個(gè)參數(shù),接收的第一個(gè)參數(shù)均代表起始位置,slice(),substring()接收的第二個(gè)參數(shù)表示終止位置,substr()的第二個(gè)參數(shù)表示返回的字符個(gè)數(shù),若不給第二個(gè)參數(shù),則返回從起始位置到字符串結(jié)束位置的字符

帶入負(fù)數(shù)表現(xiàn)不同:slice會(huì)將所有帶入的負(fù)數(shù)與字符串長度相加,substr會(huì)將第一參數(shù)加上字符串長度,第二個(gè)參數(shù)轉(zhuǎn)換為0,substring()將所有負(fù)值轉(zhuǎn)為0

indexOf,lastIndexOf方法都返回子字符串的位置,indexOf從頭查找,lastIndexOf從末尾查找,沒有找到返回-1,兩個(gè)方法都可以接收第二個(gè)可選參數(shù),表示字符從哪里開始搜索

trim(),返回源字符串刪除前后綴所有空格的結(jié)果

toLowerCase,toLocaleLowerCase,toUpperCase,toLocaleUpperCase,帶有Locale的方法是針對(duì)特定地區(qū)的實(shí)現(xiàn)。通常而言是沒有什么差別,但少數(shù)語言會(huì)為Unicode大小寫轉(zhuǎn)換應(yīng)用特殊規(guī)則,這就必須使用針對(duì)特定地區(qū)的實(shí)現(xiàn)

match(),search()這兩個(gè)方法均接收一個(gè)參數(shù),字符串或者RegExp對(duì)象指定的一個(gè)正則表達(dá)式

replace()方法,接收兩個(gè)參數(shù),第一個(gè)參數(shù)可以是一個(gè)RegExp對(duì)象或字符串(不會(huì)被轉(zhuǎn)換成正則表達(dá)式),第二個(gè)參數(shù)可以是一個(gè)字符串或函數(shù),若要替換所有字符串,則必須使用正則表達(dá)式,并加全局(g)標(biāo)志

split(),接收一個(gè)參數(shù)作為字符串的分隔符,返回由分隔符分隔得到的數(shù)組,可以接收第二個(gè)可選參數(shù),作為返回結(jié)果的數(shù)組大小

localeCompare(),比較兩個(gè)字符串,關(guān)于是否區(qū)分大小寫,視地區(qū)而定

1、源字符串應(yīng)排在參數(shù)字符串之前,返回負(fù)數(shù)(具體視情況而定,通常為-1)

2、源字符串與參數(shù)字符串相同,返回0

3、源字符串排在參數(shù)字符串之后,返回整數(shù)(具體視情況而定,通常為1)

fromCharCode(),接收一個(gè)或多個(gè)字符編碼,轉(zhuǎn)換成字符串,與charCodeAt()執(zhí)行的是相反操作

URI(通用資源標(biāo)識(shí)符)

方法:encodeURI,encodeURIComponent,decodeURI,decodeURIComponent,編碼和解碼,解碼方法只能識(shí)別各自對(duì)應(yīng)的編碼方法

eval(),將帶入的字符串參數(shù),轉(zhuǎn)換成可執(zhí)行語句,并插入到當(dāng)前位置

eval創(chuàng)建的任何變量和函數(shù)都不會(huì)被提升,嚴(yán)格模式下,外部無法訪問eval創(chuàng)建的變量和函數(shù)

注:盡量不使用eval方法,僅屬于個(gè)人意見

Math對(duì)象

min(),max(),ceil()向上舍入,floor()向下舍入,round()標(biāo)準(zhǔn)舍入,即四舍五入,random()返回大于等于0小于1的隨機(jī)數(shù)

以上所述是小編給大家介紹的JavaScript高級(jí)程序設(shè)計(jì)(第三版)學(xué)習(xí)筆記1~5章 ,希望對(duì)大家有所幫助!

相關(guān)文章

  • webpack本地開發(fā)環(huán)境無法用IP訪問的解決方法

    webpack本地開發(fā)環(huán)境無法用IP訪問的解決方法

    下面小編就為大家分享一篇webpack本地開發(fā)環(huán)境無法用IP訪問的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • JavaScript使用Math.Min返回兩個(gè)數(shù)中較小數(shù)的方法

    JavaScript使用Math.Min返回兩個(gè)數(shù)中較小數(shù)的方法

    這篇文章主要介紹了JavaScript使用Math.Min返回兩個(gè)數(shù)中較小數(shù)的方法,涉及javascript中Math.Min方法的使用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • 基于JS實(shí)現(xiàn)二維碼名片生成的示例代碼

    基于JS實(shí)現(xiàn)二維碼名片生成的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用JavaScript實(shí)現(xiàn)生成二維碼名片的功能,文中的示例代碼簡(jiǎn)潔易懂,感興趣的小伙伴可以動(dòng)手嘗試一下
    2022-06-06
  • 深入淺析search 搜索框的寫法

    深入淺析search 搜索框的寫法

    本文以京東搜索框?yàn)槔o大家淺析search 搜索框的寫法,本文介紹的非常不錯(cuò),需要的朋友可以參考下
    2016-08-08
  • IE瀏覽器兼容Firefox的JS腳本的代碼

    IE瀏覽器兼容Firefox的JS腳本的代碼

    對(duì)于經(jīng)常用js的朋友,有時(shí)候一段腳本并不是兩個(gè)瀏覽器都兼容的,下面一些對(duì)ie和firefox都兼容的一些代碼,大家可以學(xué)習(xí)下。
    2008-10-10
  • javascript如何動(dòng)態(tài)加載表格與動(dòng)態(tài)添加表格行

    javascript如何動(dòng)態(tài)加載表格與動(dòng)態(tài)添加表格行

    在某些時(shí)候需要?jiǎng)討B(tài)加載表格與動(dòng)態(tài)添加表格行,在接下來的文章中將為大家介紹下javascript是如何做到的,感興趣的朋友不要錯(cuò)過
    2013-11-11
  • JavaScript事件對(duì)象深入詳解

    JavaScript事件對(duì)象深入詳解

    這篇文章主要介紹了JavaScript事件對(duì)象,結(jié)合實(shí)例形式深入分析了javascript DOM、IE及其他瀏覽器相關(guān)事件對(duì)象操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2018-12-12
  • 用JavaScript操作WinRar

    用JavaScript操作WinRar

    Blog的插入HTML功能有誤。 原來在blueidea.com上看到了用ASP執(zhí)行解壓縮動(dòng)作的文章,一直沒有去用心看,前日,趁老大不在,爽了一把,把它改成了用JavaScript操作的了。
    2008-04-04
  • HTML5實(shí)現(xiàn)微信拍攝上傳照片功能

    HTML5實(shí)現(xiàn)微信拍攝上傳照片功能

    這篇文章主要介紹了HTML5實(shí)現(xiàn)微信拍攝上傳照片功能,實(shí)現(xiàn)HTML5 Canvas手機(jī)拍攝,本地壓縮上傳圖片時(shí)遇到問題的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Promise掃盲貼

    Promise掃盲貼

    這篇文章主要介紹了Promise掃盲貼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06

最新評(píng)論