1. 程式人生 > >---------走過夏天,一路慢行的JavaScript之旅(add)!!!

---------走過夏天,一路慢行的JavaScript之旅(add)!!!

blank 成對出現 單個 字符串 ever repl say 下劃線 int

一、JavaScript

    JavaScript一種直譯式腳本語言,是一種動態類型、弱類型、基於原型的語言,內置支持類型。它的解釋器被稱為JavaScript引擎,為瀏覽器的一部分,廣泛用於客戶端的腳本語言,最早是在HTML(標準通用標記語言下的一個應用)網頁上使用,用來給HTML網頁增加動態功能。

二、JavaScript基本使用方式和常用屬性

一、使用JS的三種方式:

1、在HTML中直接內嵌JS(並不提倡使用);
<button onclick="alert(啦啦啦)">有本事你點我呀!!!</button>
>>>不符合W3C關於內容與行為分離的要求!!!
2、在HTML頁面中,使用script標簽包裹JS代碼;
<script type="text/javascript"></script>
>>><Script></Script>標簽可以放到頁面的任意位置。
3、引入一個外部單獨的JS文件
<script language="JavaScript" src="js/01.js"></script>
[註意事項]
①<script></script>可以嵌入到頁面的任意位置。但是,位置的不同會導致JS代碼的執行順序不同;
比如:<script>
</script>放到<body>前面,則代碼會在頁面加載之前就執行;
②引入一個外部的JS代碼,<script></script>必須是成對出現的標簽,而且標簽中不得出現任何的JS代碼;

二、JS中的變量和運算符:

1、JS中變量聲明的寫法:

var num =10;// 使用var聲明的變量,屬於局部變量,只是當前作用域內有效;
num = 10; // 不用var聲明,默認為全局變量,在整個JS文件中都有效;
var x=8,y,z=10;使用一行語句,同時聲明多個變量。上式中,y屬於已聲明,但是未賦值狀態,結果為undefined;
[聲明
變量的註意事項]
①JS中所有變量的聲明,均使用var關鍵字。變量具體是什麽數據類型,取決於給變量賦值的類型;
②同一個變量,可以在多次不同賦值時,修改變量的數據類型;
var a = 10;// 從初始聲明是,a屬於整數型;
a = "haha";// 重復賦值時,整數型的a被修改為字符串類型;

③變量可以使用var聲明,也可以不使用var聲明;
[區別] 使用var聲明為局部變量,不使用var聲明為全局變量;

④只用var聲明,但是不賦值。結果為undefined;
例如: var a; // a為undefined。
但是,如果不聲明也不賦值的a,直接使用會報錯;

⑤同一變量名,可以多次使用var聲明。但是,後年的var並沒有任何作用。第二次使用聲明時,只會被理解為普通的賦值操作。

2、變量名的命名要求:

①變量名只能有字母、數字、下劃線組成;
②開頭不能是數字;
③變量名區分大小寫,大寫字母和小寫字母為不同變量;純大寫字母,一般默認為常量;

3、變量名的命名規範:

①要符合小駝峰法則:
首字母小寫,之後每個單詞的首字母大寫;
myNameIsJiangHao 駱駝命名法:
② 所有字母小寫,中間用
_my_name_is_jiang_hao 匈牙利寫法
③ manameisjianghao 能用 但是不規範

4、JS中的數據類型:

Undefined:未定義、已經使用var聲明的變量,但是沒有賦值。var a;
Null:表示空的引用。
Boolean:布爾類型。表示真假,只有兩個值: true/flase
Number: 數值類型。可以是正數,也可以是小數;
String: 字符串類型。用""或‘‘包裹的內容,稱為字符串;
Object: 對象類型,後續講解。。。。

5、[常用的數值函數]

①isNaN():判斷一個變量或常量,是否是NaN( not a num 非數值);
使用isNaN()判斷時,會嘗試使用Number()函數進行轉換,如果最終結果能夠轉換數字,則不是NaN,結果為false;
②number()函數: 將其他類型的數據,嘗試轉為數值型;
[字符串類型]
<<<字符串為純數值字符串,會轉為對應的數字;"111"→111
>>>字符串為空字符串,會轉為0: " "-> 0
>>>字符串包含任何其它字符時,都不能轉;"1a"->NaN
[Boolean類型]
true->1 false->0
[Null/Undefined]
Null->0 Undefined->NaN
[Object]
③ParseInt():將字符串轉為整數類型;
>>>純數值字符串,能轉。"12"->12;"12.9"->12(小數轉化時,直接抹掉小數點,不進行四舍五入)
>>>空字符串,不能轉。" "->NaN
>>>包含其它字符的字符串,會截取第一個非數值字符串前的數字部分;
"123a456"->123;"a123b456"->NaN
>>>ParseInt()只能轉字符串,轉其它類型,全是NaN.
[number函數與ParseInt函數的區別]
1、Number函數可以轉各種數據的類型,ParseInt函數只能轉字符串;
2、兩者在轉字符串時,結果不完全相同。(詳見上面解釋)
④ParseFloat:將字符串轉為數值型;
轉換規則與ParseInt相同,只是如果有小數,則保留小數點;如果沒有小數,則依然是整數;"12.5"->12.5;"12"->12
⑤typeof:檢測變量的數據類型:
字符串->String 數值->Number 未定義->Undefined 對象/NULL->object 函數->function
true/false->Boolean

【JS中常用的輸入輸出語句】
1.document.write();將()中的內容打印輸出到留言器屏幕上;
使用時需要註意:除變量/常量外的所有內容,必須放到""中。變量和常量必須放到""外面;
如果同時有變量和字符串,必須用+連接;
eg:document.write("左手中的紙牌"+left+"<br />");
2.alect();使用彈窗輸出;
彈窗警告,()中的內容與上述要求相同。
3.prompt();彈窗輸入;
接受兩部分參數:
①輸入框上面的提示內容,可選;
②輸入框裏面的默認信息,可選;
當只寫一部分時,表示輸入框上面的提示內容;
可以定義變量,接受輸入的內容。點擊確定按鈕,變量將被賦值為輸入的內容;點擊取消按鈕,變量將被賦值為null;

6、JS的常用運算符

1、算術運算(單目運算符)

+ 加、-減、*乘、 /除、 %取余、++自增 、--自減
+號:有兩種作用,連接字符串/加法運算。當+兩邊連接數字時,進行加法運算;當+兩邊有任意一邊為字符串時,起連接字符串作用,
鏈接之後的結果為字符串;
除+外,其余符號運算時,會先嘗試將左右兩邊的變量用Number函數轉為數字;
>>>/:結果保留小數點;
>>>++:自增運算時,將變量在原有基礎上+1;
>>>--:自減運算符,將變量在自身基礎上-1;
【a++和++a的異同點】
①相同點:無論a++還是++a,運算完以後,a的值均會+1;
②不同點: a++,先用a的值去運算,再把a+1;
++a,先把a+1,再用a+1以後的值去運算。
eg:量、var a=3,b,c;
b=a++ +2;//先用a運算,b=3+2 再把a+1,a=4;
c=++a +2;//先把a+1,a=5再用a+1以後的值去運算,c=5+2;

2、賦值運算

= += -= *= /= %=
+=:a+=b;相當於a=a+b;但是前者的運算效率要比後者快,所以推薦使用+=的寫法;

3、關系運算

==、 !=、>、<、>=、<=

>>> 關系運算符,運算之後的結果,只能是Boolean類型;
>>> 判斷一個數字是否處於一個區間,必須用&&鏈接;
a<10 && a>0 √ ; 10>a>0 x
>>> ===:嚴格等於;要求不但類型要相同,值也必須相同;類型不同結果直接為false,類型相同,再進行下一步判斷;
== :等於。類型相同,同===一樣,類型不同時,會先嘗試用Number將兩邊轉為數字,然後再進行判斷。
但是,有個別特例: Null==false x ;Null==Undefined √
!=:不等、!== 不全等

4、條件運算符(多目運算)

a>b?true:false
有兩個重要符號: ? 和 :
當?前面部分,運算結果為true時,執行:前面的代碼;
當?前面部分,運算結果為false時,執行:後面的代碼;
冒號兩邊可以為數值,則整個式子可用於賦值。Var a= 1<2?1:2
冒號兩邊可以為代碼塊,將直接執行代碼。1<2?alert(1):alert(2);
多目運算符可以多層嵌套。var a = 1<2?alert(1):(1>0?4:5)

5、 位運算符、 邏輯運算符

&、|、~ &&與、||或、!非

&& 兩邊都成立,結果為true

|| 兩邊有任意一個成立,結果為true

三、JS中的分支和循環屬性

一、JS中的分支 

【if-else結構】

1、結構的寫法:
if(){
  //條件為true時,執行if的{}
}else{
  //條件為false時,執行else的{}
}
2、註意事項:
①else{}語句塊。可以根據情況進行省略。
②if和else後面的大括號可以省略,但是省略大括號後,if和else後面只能跟一條語句,不建議省略;
3、if的()中的判斷條件,支持的情況:
①Boolean:true為真;false為假;
②String:空字符串為假,所有非空字符串為真;
③Number:0為假;一切非零數字為真;
④null/Undefined/NaN:全為假;
⑤object:全為真;

【多重if、階梯if結構】

1、if(條件一){
  //條件一成立,執行的操作
}else if(條件二){
   //條件一不成立&&條件二成立,執行的操作
}else if(條件三){
   //條件一不成立&&條件二不成立,執行的操作
}
2、多重if結構中,各個判斷條件是互斥的,執行選擇其中一條路執行。遇到正確選項並執行完以後,直接跳出結構,不再
判斷後續分支;

【嵌套if結構】
1、結構寫法:
if(條件一){
   //條件一成立
if(條件二){
  //條件一成立&&條件二成立
}else{
   //條件一成立&&條件二不成立
}
}else{//條件一不成立
if(條件二){
條件一不成立&&條件二成立
}else{
條件一不成立&條件二不成立
}
}

2、在嵌套結構中,如果省略{},則else結構永遠屬於離它最近的一個if結構。
3、嵌套結構可以多層嵌套,但是一般不超過三層,能用多重結構的不用嵌套結構。

二、JS中的循環結構

【while(){}循環結構的步驟】

1、聲明循環變量
2、判斷循環條件
3、執行循環體操作
4、更新循環變量
然後循環執行2-4,直到條件不成立時跳出循環。
while循環()中的表達式,運算結果可以是多種類型,但是最終都會轉為真假,轉換規則同if結構
(1)、boolean類型:true為真,false為假
(2)、string類型:所有非空字符串為真,空字符串為假
(3)、number類型:一切非零數字為真,零為假
(4)、null、undefined、NaN:全為假
(5)、object類型:全為真。
var num=1; //聲明循環變量
while (num<=10){ //判斷循環條件
document.write(num+"<br />");//執行循環體操作
num++; //更新循環變量
}

【 while循環與do-while循環的區別:】

while循環是先判斷再循環;
do-while循環是先執行再判斷,即便是條件不成立,該循環也最少執行一次.
var num=10;
do{
document.write(num+"<br />");
num--;
}
while(num>=0);

【for循環】

1、for循環有三個表達式:
① 聲明循環變量;
② 判斷循環條件;
③ 更新循環變量;
三個表達式之間用;分隔開,三個表達式可以省略,但是兩個分號不能省略.
2、for循環的執行特點:先判斷再執行,和while相同;
執行順序:1、初始語句 2、執行條件是否符合? 3、循環體 4、增加增量 ;
3、for循環三個表達式均可以由多部分組成,第二部分多個判斷條件用&& 、||連接,其他部分可以用,連接。

將上部while循環改為for循環如下:
for(var num=1; num<=10;num++){
document.write(num+"<br />")
}

【循環控制語句】

1、break:跳出本層循環,繼續執行後面的語句。
如果循環有多層嵌套,則只能跳出來一層循環;
2、continue:跳過本次循環剩余的代碼繼續執行下一次循環;
①、對於for循環:continue之後執行的語句,是循環變量更新語句i++;
②、對於while、do-while循環,continue之後執行的語句,是循環條件判斷。// 因此在使用這兩個循環時,必須將continue放到i++之後使用。否則,continue將跳過i++,變成死循環。

三、JS中的函數和DOM

一、JS中的函數

函數的聲明及調用

1、函數的聲明格式:
function 函數名(參數一,參數二,...){
//函數體代碼
return 返回值;
}
函數的調用:
① 直接調用:函數名加(參數一的值,參數二的值,.......);
② 事件調用:HTML標簽中,使用事件名="函數名()"
<button onclick="saySth(‘hahha‘,‘yellow‘)">點擊按鈕,打印內容</button>

2、函數的註意事項:
① 函數必須要符合小駝峰法則!!!(首字母小寫,之後每個人單詞首字母大寫)
② 函數名後面的()中,可以有參數,也可以沒有參數。分別稱為有參函數和無參函數;

③ 聲明函數時的參數列表,稱為型參列表,形式參數。(變量的名字)
function saySth(str,color){}
調用函數時的參數列表,稱為實參列表,實際參數。(變量的賦值)
saySth("哈哈哈","red");
④ 函數的形參列表個數和實參列表個數沒有實際關系。
函數參數的個數,取決於實參列表。
如果實參列表的個數<形參列表,則未賦值的形參,將為Undefined。

⑤ 函數可以有返回值,使用return返回結果;
調回函數時,可以使用一個變量接受函數的返回結果。如果函數沒有返回值,則接受的結果為undefined;
function func(){
return = "hahaha";
}
var num = func();//num = "hahaha"
⑥ 函數變量的作用域:
在函數中,使用var聲明的變量,為局部變量,只能在函數內部訪問;
不使用var聲明的變量,為全局變量,在函數外邊也能訪問;
函數的形象列表,默認為函數的局部變量,只能在函數內部使用;

⑦ 函數的聲明與函數的調用,沒有先後之分。即,可以在聲明函數之前,調用函數。

func();//聲明func之前調用也是可以的。
function func(){}

匿名函數的聲明和使用

1、聲明一個匿名函數直接賦值給某一個事件;
window.onload = function(){}
2、使用匿名函數表達式;將匿名函數,賦值給一個變量。
聲明:var func = function(){}
調用:func();
註意:使用匿名函數表達時,函數的調用語句,必須放在函數聲明語句之後!!!(與普通函數的區別!!!)
3、自執行函數
① !function(){}();//可以使用多種運算符開頭,單一版用!;
!function(形參列表){}(實參列表);
② (function(){}());//使用()將函數及函數後的括號包起來;
③ (function(){})();//使用()值包裹函數部分;
三種寫法的特點:
① 第一種使用!開頭,結構清晰,不容易混亂,推薦使用;
② 第二種寫法能夠表明匿名函數與調用的()為一個整體,官方推薦使用;
③ 第三種無法表明函數之後的()的整體性,不推薦使用;

JS代碼的執行順序問題

* JS代碼在運行時,會分為兩大部分。檢查裝載和執行階段
* 檢查裝載階段: 會先檢測代碼的語法錯誤,進行變量、函數的聲明。
*
* 執行階段:變量的賦值、函數的調用等,都屬於執行階段。
*
* 以下列代碼為例:
* consoloe.log();
* var num = 10;//dundefined
*
* func1(); //函數正常執行
* function func1(){};
*
* func2(); //函數不能執行,打印func2時顯示undefined
* var func2 = function{}
*
* 原因:上述代碼的執行順序為:
*
* --------------------檢查裝載階段--------------------
* var num;
* function func1(){}
* var func2
*
* --------------------代碼執行階段--------------------
* consoloe.log(num); undefined; var num =10;
* function func1(){};
*
* func2(); =function(){}

二、函數中的DOM操作

【DOM節點】

DOM節點分為三大類:元素節點、屬性節點、文本節點;
文本節點、屬性節點屬於元素節點的子節點。操作時,均需要先取到元素節點,再操作子節點。

可以使用getElement系列方法

【查看元素節點】

1、 getElementById:通過id取到唯一節點。如果id重名只能取到第一個;
  getElementsByName() :通過name屬性
  getElementsByTagName() :通過標簽名
  getElementsByClassName() :通過class名

>>>獲取元素節點時,一定要註意:獲取節點的語句,必須在DOM渲染完成之後執行。可以有兩種方式實現:① 將
JS代碼寫在body之後; ② 將代碼寫到window.onload函數之中;
>>>後面三個getElements,取到的是數組格式,不能直接添加各種屬性,而應該取出數組的每一個單獨操作。例如:

【查看/設置屬性節點】

1、查看屬性節點:getAttribute("屬性名");
2、設置屬性節點:setAttribute("屬性名","屬性值");
>>>查看和設置屬性節點,必須取到元素節點,才能使用。

>>> setAttribute();函數在IE瀏覽器中可能會存在兼容性問題。比如在IE中不支持使用這個函數設置style/onclick等樣式屬性和事件屬性。
>>> 我們推薦使用點符號法替代上述函數:
eg: dom1.style.color="" dom1.onclick="" dom1.src=""

【總結-JS修改DOM節點的樣式】

1、 使用setAttribute()設置class和style屬性,但是存在兼容性問題,不提倡
div.setAttribute("class","cls1");

2、 使用.className直接設置class類,註意是className而不是.class:
div.className = "cls1";

3、 使用.style設置單個屬性,註意屬性名要是用駝峰命名法:
div.style.backgroundColor = "red";

4、 使用.style 或 .style.cssText 設置多個樣式屬性:
div.style = "background-color:red; color:yellow;"
div.style.cssText = "background-color:red; color:yellow;" √

【查看設置文本節點】

1、 .innerText: 取到或設置節點 裏面文字內容;
.innerHTML: 取到或設置節點裏面的HTML代碼;
.tagName: 取到當前節點的標簽名。 標簽名全部大寫顯示。

【根據層次獲取節點】

1 .childNodes: 獲取元素的所有子節點。包括回車等文本節點。
.children: 獲取當前元素的所有元素節點(只獲取標簽)。
2 .firstChild: 獲取元素的第一個子節點。包括回車等文本節點。
.firstElementChild: 獲取元素的第一個子節點。不包括回車等文本節點。
.lastChild: 獲取元素的最後一個子節點。包括回車等文本節點。
.lastElementChild:
3 .parentNode: 獲取當前節點的父節點。
4 .previousSibling: 獲取當前節點的前一個兄弟節點;包括回車等文本節點。
.previousElementSibling:
5 .nextSibling: 獲取當前節點的後一個兄弟節點;包括回車等文本節點。
.nextElementSibling:
6 .getAttributes: 獲取當前節點的屬性節點。

【創建並新增節點】

1. document.createElement("標簽名"):創建節點 。需要配合 setAttribute設置各種新的屬性;
2. 父節點.appendChild(新節點):末尾追加方式插入節點
3. 父節點.insertBefore(新節點,目標節點):在目標節點前插入新節點.
4. 被克隆節點.cloneNode(true/false):克隆節點
>>> 傳入true: 表示克隆當前節點,以及當前節點的所有字節點;
>>> 傳入false或不傳: 表示只克隆當前節點,而不克隆子節點。

【刪除或替換節點】

1. 父節點.removeChild(被刪節點): 刪除父節點中的子節點;
2. 父節點.replaceChild(新節點,老節點): 使用新節點,替換掉老節點。

【表格對象】

1、row屬性:返回表格中的所有行,是一個數組格式;
2、insertRow(index):在指定位置插入一行,index從0開始;
3、deleteRow(index):刪除指定的一行,index從0開始;

【行對象】

1、cells屬性:返回這一行中的所有單元格,是一個數組格式;
2、rowIndex屬性:返回這一行是表格中的第幾行,從0開始;
3、insertCell(index):在這一行指定位置,插入一個單元格,index從0開始;
4、deleteCell(index):刪除這一行的指定單元格,index從0開始

【單元格對象】

1、cellIndex屬性:返回這個單元格是本行的第幾個,從0開始;
2、innerText innerHTML align className

[表格對象]


1、 rows屬性: 返回表格中的所有行,是一個數組格式;
2、 insertRow(index): 在指定位置插入一行,index從0開始;
3、 deleteRow(index): 刪除指定的一行,index從0開始;

[行對象]

1、 cells屬性: 返回這一行中的所有單元格,是一個數組格式;
2、 rowIndex屬性: 返回這一行是表格中的第幾行,從0開始;
3、 insertCell(index): 在這一行指定位置,插入一個單元格,index從0開始;
4、 deleteCell(index): 刪除這一行的指定單元格,index從0開始

[單元格對象]

1、 cellIndex屬性: 返回這個單元格是本行的第幾個,從0開始;
2、 innerText innerHTML align className

三、JS中的事件

【JS中的事件分類】

1、鼠標事件
click、dbclick、onmouseover、onmouseout
2、HTML事件
onload/onscroll/onsubmit/onchange/onfocus
3、鍵盤事件
keydown:鍵盤按下時觸發
keypress:鍵盤按下並松開的瞬間觸發
keyup:鍵盤擡起時觸發
[註意事項]
①執行順序:keydown->keypress->keyup
②當長按時:會循環執行keydown->keypress
③有keydown不一定有keyup,當事件觸發過程中,鼠標將光標移走,將導致沒有keyup
④keypress只能捕獲鍵盤上的數字、字符、符號鍵,不能捕獲各種功能鍵,而keydown和keyup可以。
⑤keypress支持區分大小寫,keydown和keyup並不支持

[確定觸發的按鍵]
①再觸發的函數中傳入一個參數e,表示鍵盤事件;
②使用e.keyCode,取得按鍵的Ascii碼值,進而確定觸發按鍵;
③所有瀏覽器的兼容寫法(一般並不需要)
var evn = e || event ;
var code = evn.keyCode || evn.which || evn.charCode;

【JS中的DOM0事件模型】

1、內聯模型(行內綁定):直接將函數名作為HTML標簽的某個事件屬性的屬性;
eg:<button onclick="func()">DOM0內聯模型</button>
優點:使用方便;
缺點:違反了W3C關於HTML與JavaScript分離的基本原則;

2、腳本模型(動態綁定):在JS腳本中取到某個節點,並添加事件屬性;
eg:window.onload = function(){}
優點:實現了HTML與JavaScript的分離
缺點:同一個節點,只能綁定一個同類型事件。如果綁定多次,則最後一個生效。

【DOM2事件模型】

1、添加事件綁定方式:
①:IE8之前:btn2.attachEvent("onclick",函數);
②:其他瀏覽器:btn2.addEventListener("click",函數,true/false);

參數三:false(默認) 表示事件冒泡 true 表示事件捕獲
③:兼容寫法:if(btn2.attachEvent){
btn2.attachEvent();
}else{
btn2.addEventListener();
}
2、優點:①可以給同一個節點,添加多個同類型屬性;
②提供了可以取消事件綁定的函數。
3、取消DOM2事件綁定:
註意:如果要取消DOM2的事件綁定,那麽在綁定事件時,處理函數必須要使用有名函數,而不能使用匿名函數;

【JS中的事件流】

1、事件冒泡
當某DOM元素觸發一種事件時,會從當前節點開始,逐級往上觸發其祖先節點的同類型事件,直到DOM根節點;
>>>什麽情況下會產生事件冒泡?
①DOM0模型綁定事件,全部都是冒泡;
②IE8之前,使用attachEvent()綁定的事件,全部是冒泡;
③其他瀏覽器,使用addEventLinstener()添加事件,當第三個參數省略或者為false時,為事件冒泡;
2、事件捕獲:當某DOM元素觸發一種事件時,會從文檔根節點開始,逐漸向下觸發其祖先節點的同類型事件,直到
該節點自身;

>>>什麽情況下會產生事件捕獲?
①使用addEventLinstener()添加事件,當第三個參數為true時,為事件捕獲;


↓ DOM根節點 ↑
↓ ↑
捕 爺爺節點 冒
↓ ↑
獲 父節點 泡
↓ ↑
↓ 當前節點 ↑

3、阻止事件冒泡:
在IE瀏覽器中,使用e.cancelBubble = true ;
在其他瀏覽器中,使用e.stopPropagation();
兼容所有瀏覽器中的寫法:
function myParagraphEventHandler(e) {
e = e || window.event;
if (e.stopPropagation) {
e.stopPropagation(); //IE以外
} else {
e.cancelBubble = true; //IE8之前
}
}

4、取消默認行為:
在IE瀏覽器中,使用e.returnValue = false;
在其他瀏覽器中,使用e.preventDefault();
兼容所有瀏覽器寫法:
function eventHandler(e) {
e = e || window.event;
// 防止默認行為
if (e.preventDefault) {
e.preventDefault(); //IE以外
} else {
e.returnValue = false; //IE
}
}

四、JS中的內置對象

一、JS中的數組 

1、數組的基本概念?
數組是在內容空間中連續存儲的一組有序數據的集合
元素在數組中的順序,成為下標。可以使用下標訪問數組的每個元素。

2、如何聲明一個數組:
①使用字面量聲明:var arr = [];
在JS中同一數組可以存儲各種數據類型。
例如:var arr = [1,"jianghao",true,{},null,func];

②使用new關鍵字聲明:var arr = new Array(參數);
>>>參數可以是:
a.參數省略表示創建一個空數組;

b.參數只放一個整數表示聲明一個length為指定長度的數組,但是這個length可以隨時可變可追加;
c.參數為逗號分隔的多個數值,表示數組的多個值。
new array(1,2,3) == [1,2,3]
3、數組中元素的讀寫/增刪?
①讀寫:通過下標訪問元素。下標從0開始,arr[1] = "hahaha";
②增刪:
a.使用delete關鍵字,刪除數組的某一個值。刪除之後,數組的長度不變,對應的位置變為Undefined。
eg:delete arr[1];

b.arr.pop():刪除數組的最後一個值。相當於arr.length -= 1;

c.arr.shift():刪除數組的第一個值;
d.arr.unshift(值):在數組的第0個位置增加一個值;

4、數組中的其它方法
①join():將數組用指定分隔符鏈接為字符串。單參數為空時,默認逗號分隔。
②contact():【原數組不會被改變】 將數組,與兩個或多個數組的值鏈接為新數組;
concat連接時,如果有二維數組,則至多能拆一層[]
[1,2].concat([3,4],[5,6])->[1,2,3,4,5,6]
[1,2].concat([3,4,[5,6]])->[1,2,3,4,[5,6]]

③push():數組最後增加一個,unshift()數組開頭增加一個。-返回新數組的長度
pop() 數組最後刪除一個,shift() 數組開頭刪除一個。-返回被刪除的值

【上述方法均會改變原數組】
④reverse():【原數組被改變】,將數組反轉,倒序輸出;

⑤slice():【原數組不會被改變】 截取數組中的某一部分,並返回截取的新數組;
>>>傳入一個參數,表示開始區間,默認將截到數組最後;
>>>傳入兩個參數,表示開始和結束的下標,左閉右開區間(包含begin,不包含end)
>>>兩個參數可以為負數,表示從右邊開始數,最後一個值為-1;

⑥sort():【原數組被改變】將數組進行排列
>>>默認情況下,會按照每個元素首字母的ASII值進行排序;
[3,1,2,15].sort() -> [1,15,2,3];
>>>可以傳入一個比較函數,手動指定排序的函數算法;
函數將默認接收兩個值a,b 如果函數返回值>0,則證明a>b.
arr.sort(function(){
return a-b;升序排列
  return b-a;降序排列
})

⑦ indexof(value,index):返回數組中第一個value值所在的下標,如果沒有找到返回-1;
lastIndexof(value,index):返回數組中最後一個value值所在的下標,如果沒有找到返回-1;
>>>如果沒有制定index,則表示全數組中查找value;
>>>如果指定了index,則表示從index開始,向後查找value;

⑧ forEach():專門用於循環遍歷數組。接收一個回調函數,回調函數接收兩個參數,第一個參數為該數組的
每一項值,第二個參數為下標;
【IE8之前,不支持此函數】

⑨ map():數組映射,使用方式與foreash()使用方式相同。不同的是,map可以有返回值,表示將原數組的每個值
進行操作後,返回給一個新數組。

5、二維數組和稀疏數組
① 二維數組:數組中的值,依然是一個數組形式。
eg: arr = [[1,2,3],[4,5,6]] 相當於兩行三列;
讀取二維數組:arr:[行號][列號];
② 稀疏數組:數組中的索引是不聯系的。(length要比數組中的實際元素個數大);

6、基本類型和引用數據類型:
① 基本數據類型:賦值時,是將原變量中的值,賦值給另一個變量,賦值完成後,兩個變量相互獨立,修改其中
一個的值,另一個不會變化;
② 引用數據類型:賦值時,是將原變量在內存中的地址,賦值給另一個變量。賦值完成後,兩個變量中存儲的時同一個
內存地址,訪問的是同一份數據,其中一個改變另一個也會發生改變;
③ 數值型、字符串、布爾類型等變量屬於基本數據類型;
數組,對象屬於應用數據類型

二、JS中的內置對象

Boolean 類

也有兩種聲明方式:
可以使用字面量方式聲明一個單純的變量;用typeof檢測為Boolean類型
也可以使用new Boolean() 聲明一個Boolean類型的對象。用typeof檢測為Object類型

.toString:將數值類型轉化為字符串類型
.toLocaleString:將數值按照本地格式順序轉換為字符串,一般從右邊開始,三個一組加逗號分隔;
.toFixed(n):將數字保留n位小數,並轉為字符串格式;
.toPrecision(n):將數字格式化為指定長度。n表示不含小數點的位數長度。如果n<原數字
.valueOf():返回Number對象的基本數字值;

Number類

Number.MAX_VALUE 返回Number類可表示最大值
Number.MIN_VALUE 返回Number類可表示最小值

var num1 = 10
var num2 = new Number(10);
//console.log(typeof num1);
//console.log(Number.MIN_VALUE);

String 類

1、屬性:str。length :返回字符串的長度,字符數;
字符串支持類似於數組下標的訪問方式:str[0]
2、方法:
.toLowerCase():字符串所有字符轉成小寫;
.toUpperCase():字符串所有字符轉成大寫;
.chaAt(0)
.indexOf("str",index):從index位置開始,查找子串在在字符中出現的位置,如果沒有返回值-1,
其它數組的indexOf方法;
.lastIndexOf:同數組;
.substring(begin,end):從字符串中截取子串
>>>只傳入一個參數,表示從begin開始,到最後;
>>>傳入兩個參數,表示從begin到end的區間,左閉右開;

.split("分隔符"):將字符串以指定分隔符分隔,存入數組中。
傳入空""表示將字符串的每個字符分開放入數組。
.replace("old","new"):將字符串中的第一個old替換為new。
>>>第一個參數,可以是普通字符串,也可以是正則表達式;
>>>如果是普通字符串,則只替換第一個old。如果是正則表達式,則可以根據正則的方法

Date 日期類

1、new Date():返回當前最新時間;
new Date("2017,8,23,12:34:56");

.getFullYear():獲取4位年份;
.getMonth():獲取月份0-11;
.getDate():獲取一個月中的第幾天 1-31
.getDay():獲取一周中的第幾天 0-6,0表示周天

三、JS中的自定義對象

【自定義對象】

1、基本概念:
① 對象:對象是擁有一系列無屬性和方法的集合。
② 鍵值對:對象中的數據是以鍵值對的形式存在。對象的每個屬性和方法都對應著一個鍵名,我們可以以鍵
取值。
③ 屬性:描述對象特征的一系列變量,稱為屬性。【對象中的變量】
④ 方法:描述對象行為的一系列函數,稱為方法。【對象中的函數】

2、對象的聲明:
① 使用字面量聲明: var obj = {
key1 :value1,
key2 :value2,
func1:function(){}
}
>>> 對象中的數據是以鍵值對的形式存儲,鍵與值之間用:分隔。
多個鍵值對之間用,分隔。
>>> 對象中的鍵可以是除了數組和對象以外的任何數據類型,但是一般我們只用普通變量名作為鍵。
>>> 對象中的值可以是任何數據類型,包括數組和對象。

② 使用new關鍵字聲明: var obj = new Object();
obj.key1 = value1;

3、對象中屬性和方法的讀寫:
① .運算符:對象名.屬性 對象名.方法();
② 通過中括號["key"]調用: 對象名.["屬性名"] 對象名.["方法名"]();

>>>如果鍵中包含特殊字符則只能使用第二種方式給;
>>>對象中,直接寫變量名,默認為調用全局變量。如果需要調用對象自身的屬性或者方法。需要使用
對象名.屬性,或者this.屬性。
person.age this.age 都可以,但推薦使用this關鍵字。
③ 刪除對象的屬性和方法: delete 對象名屬性名/方法名
的;delete person.age;


寫在最後:

      感謝讀者在繁忙之中欣賞博主菜菜的隨筆,希望讀者能夠對博主提出寶貴的意見,博客定當認真對待!

---------走過夏天,一路慢行的JavaScript之旅(add)!!!