JavaScript高級程序筆記2

語句

if 語句:

if ? (condition1) ? statement1 ?else ?if ?statement2 ?else ? statement3

do-while語句 :后測試循環語句,循環體內代碼至少會循環一次

do{ statement;}while ?(expression)

while語句:

while(expression){ statement;}

for語句:

for(initialization;expression;post-loop-expression) statement

for-in語句:可用來枚舉對象

for (var propName in expression) expression

label語句:在代碼中添加標簽

label:statement

break和continue語句:

break語句會立即退出循環,強制繼續執行循環后的語句;

continue會立即退出循環,但是退出循環后會從循環頂部繼續執行;

可以和label語句聯合使用;

with語句:

將代碼的作用域設置到一個特定的對象中。

with(expression) statement;

switch語句:

switch(expression){

? ?case value:station;

? ?break;

? ?case value:station;

? ?break;

? ?case value:station;

? ?break;

? default:statement

}

可以合并兩種情況(case);

用全等操作符比較,不發生類型轉換;

函數:

1.聲明函數:

function ?functionName(arg0,arg1,......,argN){

? ? ? ? ? ? ? ? ?statements

}

2.調用函數

functionName(arg0,arg1.........)

3.return

return實現返回值,return后的語句不會被執行,因為這個函數在執行return后退出;

return后不加任何值,返回undefined。

參數:

arguments對象與數組類似,可以用[]訪問他的每一個元素,用length確定傳入多少個參數;

命名的參數只提供便利,但不是必須的;

arguments對象可以和命名參數在一起使用;

arguments的值與對應的命名參數的值保持同步,內存空間獨立;

arguments對象長度是由傳入的參數個數決定的,而不是定義函數時的命名參數的個數決定的。

沒有重載

如果ECMAscript中定義了兩個名字相同的函數,該名字屬于后定義的函數;


第四章 變量,作用域和內存問題

重點:基本類型和引用類型的值;執行環境;垃圾收集;

基本類型和引用類型的值

1.基本類型值:簡單的數據段。基本數據類型按值訪問,因為可以操作保存在變量中的實際值。

? 引用類型值:那些可能由多個值構成的對象。按引用訪問。引用類型的值是保存在內存中的對象,js不允許直接訪問內存中的位置,所以操作的對象是引用而不是實際值。

2.動態屬性:

引用類型值,可以為對象添加屬性和方法,或者改變和刪除屬性和方法。且只能動態的添加屬性。

基本類型值不能添加屬性方法

3.復制變量值

基本類型值:如果從一個變量向另一個變量復制基本類型值,會在變量對象上創建一個新值,然后把該值復制到為新變量分配的位置上。所以可以說新的值是一個副本,且兩個變量完全獨立。

引用類型值:

復制的是一個指針,而兩個指針指向的是同一個對象,所以改變一個變量會影響另一個變量。

4.傳遞參數

函數的參數是按值傳遞的

把函數外部的值復制給函數內部的參數,就和把值從一個變量復制到另一個變量一樣。

基本類型值的傳遞:

function addTen(num){

num+=10;

return num;

}

var count=20;

var result=addTen(count);

alert(sount); ? ? ? ? ? ? ?//20

alert(result); ? ? ? ? ? ? //30

count作為參數被傳入函數以后,數值20被復制給函數num,參數num的值被加10參數num和變量count互不認識,只有相同的值。

引用類型值傳遞:

function setName(obj){

obj.name="Nike";

obj=new Object();

obj.name="Greg";

}

var person = new Object();

setName(person);

alert(person.name); ? ? ? ? ? //"Nike"

原理:創建了一個新對象,保存在變量person中,person傳入函數時,對象被復制給了obj,obj和person引用同一個對象,所以在函數內部obj改變,person也改變,person是全局對象。

而函數后兩部,為obj保存了新的對象,obj和person就不指向一個對象了,所以person最后的值不是Greg。

執行環境與作用域

執行環境:定義了變量或者函數有權訪問的其他數據,決定了他們各自的欣慰。分為全局和局部。

變量對象:環境中定義的所有變量和函數都保存在這個對象中。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2016/2/5


作用域鏈:用途是保證對執行環境有權訪問的所有變量和函數的有序訪問。作用域鏈的前端,是當前執行的代碼所在的環境的變量對象。全局環境始終的變量對象是作用域鏈中的最后一個對象。

標識符的解析是沿著作用域鏈一級一級的搜索標識符的過程,從前端開始,逐級向后回溯,知道找到標識符。

內部環境可以通過作用域鏈訪問所有的外部環境,但是外部環境不能訪問內部環境的任何變量和函數。

延長作用域鏈

try-catch語句的catch塊;創建一個新的變量對象。

with語句;會將指定的對象添加到作用域鏈中。

兩個語句都可以在作用域鏈前端添加一個變量對象。

沒有塊級作用域

if或者for語句中的變量,在語句執行完畢后,會將其變量添加到當前執行環境中。

用var聲明的變量會被自動添加到最近的環境中,如果初始化變量時沒有使用var聲明,該變量就自動被添加到全局環境。

垃圾收集

垃圾收集 原理:找出那些不再繼續使用的變量,然后釋放其占用的內存。

方法:

標記清除,最常用。

引用計數。


第五章:引用類型

Object類型

Object類型適用于存儲和傳遞數據。

創建方法:

1.var person= new Object(); person.name="Greg";person.age=29;

2.對象字面表示法:(向函數傳遞大量可選參數的首選方法)

var person={

? ? name :"Greg",

? ? age:29

}

訪問對象屬性方法

1.點表示法:person.name

2.方括號表示法:person["name"],當屬性名中包含會導致語法錯誤的字符時,用這個方法。比如屬性中含有空格。

可以通過變量訪問屬性。var propertyName="name";alert(person[propertyName])

不過,除非非要使用變量來訪問屬性,否則建議使用點表示法。

Array類型

數組是數據的有序數列,但是js數組的每一項都可以保存任何類型的數據。

創建數組

1.var colors= new Array(20); ? ? ? //20數組要保存的項目數量。

?var colors=new Array("green","red","blue"); ? ?//數組中包含三個字符串值。

2數組字面量表示法:

var colors=["green","red","blue"]; ? ? ? ? ?//數組項用方括號表示。

讀取數組:

基于0的數字索引:

顯示第一項:alert(colors[0]);

修改第三項:colors[2]="black";

新增第四項:colors[3]="brown";

數組有length屬性,可以讀取數組項目數量,可以從數組末尾移除項或者向數組中新增項。

colors[colors.length]="black" ?//添加一種顏色。

檢測數組

確定對象是不是數組:

1.if (value instanceof Array){

? ? ? ? //操作

}

2.if (Array.isArray(value)){

? ? //操作

}

轉換方法,

toLocaleString()

toString()返回由數組中每個值的字符串形式拼接而成的一個以都好分隔的字符串

valueOf()

棧方法

棧:是一種可以限制插入和刪除項的數據結構。棧是一種LIFO(后進先出)的數據結構,也就是最新添加的項被最早移除。而棧中項的插入(推入)和移出(彈出)只發生在棧的頂部。

push()方法,可以接受任意數量的參數,把他們逐個添加到數組末尾,并返回修改后數組的長度。

pop()方法,從數組末尾移除最后一項,減少數組的length值,然后返回移出的項。

兩個方法可以和數組其他方法連用。

隊列方法

隊列數據結構的訪問規則是FIFO(先進先出),隊列在列表的末端添加項,在列表前端移除項。

push()在末尾添加項

shift()移出數組中的第一個項,并返回該項。

unshift()在數組前端添加任意個項,返回新的數組長度。

重排序方法

reverse()反轉數組項的順序

sort()按升序排列數組項,會將數組項用toString()方法轉型,比較的是字符串

操作方法

concat()創建當前數組的一個副本,然后將接收到的參數添加到副本末尾,最后返回新的數組。

slice()可以接受一或兩個參數,即要返回項的起始和結束位置。如果只有一個參數,slice()返回從該參數指定位置開始到當前數組末尾的所以項。

splice()主要用途是在數組中部插入項,也可以用來刪除,插入,替換任意數量的項。

2016/2/6






最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容