1. 程式人生 > >JS基礎--函數與BOM、DOM操作、JS中的事件以及內置對象

JS基礎--函數與BOM、DOM操作、JS中的事件以及內置對象

對話框 回車 == 問題 tde tle ets fixed 訪問

前 言

絮叨絮叨

這裏是JS基礎知識集中講解的第三篇,也是最後一篇,三篇JS的基礎,大多是知識的羅列,並沒有涉及更難得東西,幹貨滿滿!看完這一篇後,相信許多正在像我一樣正處於初級階段的同學,經過初步的學習,會對這一門語言有了一定深入的了解,也會感受到這一門語言的強大之處。希望各位同學通過一定的學習,會得到等大的收獲。

因為是最後一篇所以內容可能有點多,希望各位同學能夠慢慢看,細細看,讓我們一起學習,一起進步,一起感受JS的魅力

函數

函數的聲明及調用

1、函數的聲明格式
function 函數名(參數1,參數2,……){
  //函數體代碼
   return 返回值;
}

函數的調用


①直接調用:函數名(參數1的值,參數2的值,……);


②事件調用:在Html標簽中,使用事件名="函數名()"

<button onclick="saySth(‘hahaha‘,‘yellow‘)">點擊按鈕,打印內容</button>

2、函數的註意事項:
①函數名必須要符合小駝峰法則!(首字母小寫,之後的每個單詞首字母大寫)


②函數名後面的()中可以有參數,也可以沒有參數,分別稱為有參函數和無參函數;


③聲明函數時的參數列表,稱為形參列表,形式參數。(變量的名字)
  調用函數時的參數列表,稱為實參列表,實際參數。(變量的賦值)

function saySth(str,color){
    document.write("
<div style=‘color:"+color+";‘>"+str+"</div>"); } saySth("我真帥!","red");

④函數的形參列表個數與實參列表個數沒有實際關聯關系。
  函數參數的個數,取決於實參列表。
  如果實參列表的個數<形參列表,則未賦值的形參,將為undefined。


⑤函數可以有返回值,使用return返回結果(因為return有結束函數的作用,所以代碼不能寫到return後面):
  調用函數時,可以使用一個變量接受函數的返回結果。如果函數沒有返回值,則接受的結果為undefined;

function func(){
  return "haha";
}

var num = func();

⑥函數中變量的作用域(JS中只有函數有自己的作用域):
  在函數中,使用var聲明的變量,為局部變量,只能在函數內部訪問;
  不用var聲明的變量,為全局變量,在函數外面也能訪問;
  函數的形參列表,默認為函數的局部變量,只能在函數內部使用。

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

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

匿名函數的聲明使用

1、聲明一個匿名函數,直接賦值給某一個事件

window.onload = function(){}


2、使用匿名函數表達式。將匿名函數賦值給一個變量

var func = function(){}           //聲明     
func();                           //調用

註意:使用匿名函數表達式時,函數的調用語句,必須放在函數聲明語句之後!!!(與普通函數的區別)

3、自執行函數
!function(){}(); //可以使用多種運算符開頭,但一般用感嘆號!
  !function(形參列表){}(實參列表);


(function(){}()); //使用()將函數機函數後的括號包裹


(function(){})(); //使用()值包裹函數部分;

三種寫法的特點
① 使用!開頭,結構清晰,不容易混亂,個人推薦使用;


② 能夠表明匿名函數與調用的()為一個整體,官方推薦使用;


③ 無法表明函數與之後的()的整體性,不推薦使用。

函數的內部屬性

Arguments對象
①作用:用於儲存調用函數時的所有實參,當我們調用函數並用實參賦值時,實際上參數列表已經保存到Arguments數組中,
  可以在函數中,使用Arguments[n]的形式調用。n從0開始


②arguments數組的個數,取決於實參;列表,與形參無關。
  但是,一旦第N個位置的形參、實參、argument都存在時,形參將與arguments綁定,同步變化。
  (即,在函數中修改形參的值,arguments也會改變。反之亦成立)


③arguments.callee 是arguments的重要屬性。表示arguments所在函數的引用地址;
  在函數裏面,可以引用arguments.callee()調用函數本身。
  在函數內部,調用函數自身的寫法,叫做遞歸。


遞歸分為兩部分: 遞和歸。以遞歸調用語句為界限,可以將函數分為上下兩部分。
遞:當函數執行上半部分遇到自身的調用語句時,繼續進入內層函數,再執行上半部分。直到執行完最內層函數。
歸:當最內層函數執行完以後,再從最內層函數開始,逐漸執行函數的下半部分。

當最外層函數執行時,遇到自身的調用語句會進入內層函數執行,而外層函數的後半那部分暫不執行,直到最內層函數執行完以後,在逐步向外執行。

如圖:

技術分享

var num = 1;
function func(){
    console.log(num);
    num++;

    if(num<=4){
      arguments.callee(); //遞歸調用語句 ↑上部分 遞 ↓下部分 歸
    }


    num--;
    console.log(num);
}
func();

JS代碼的執行順序問題

JS代碼在運行時,會分為兩大部分。檢查裝載 執行階段。
檢查裝載階段:會先檢測代碼的語法錯誤,進行變量、函數的聲明。
執行階段:變量的賦值、函數的調用等,都屬於執行階段。

以下面的三段代碼為例:

1、打印num,顯示為Undefined,而不會是10。

console.log(num);     //Undefined
var num = 10;

2、函數可以正常執行。

func1();   //函數可以正常執行
function func1(){}

3、函數不能執行,打印func2時,顯示Undefined

func2();   //函數不能執行,打印func2時,顯示Undefined
var func2 = function(){}

原因:上述代碼的執行順序為:

---------------檢查裝載階段----------------
       var num;
     function func1(){}
       var func2;

---------------代碼執行階段----------------
    console.log(num);
      num = 10;
      func1();
      func2();
    func2 = function(){}

BOM

屏幕對象

console.log(window.screen.width); //屏幕寬度
console.log(window.screen.height); //屏幕高度
console.log(window.screen.availwidth); //可用寬度
console.log(window.screen.availheight); //可用高度=屏幕高度-底部工具欄




location 對象:渠道瀏覽器的URL地址信息
完整的URL路徑:
  協議名://主機名(IP地址):端口號/文件所在路徑?傳遞參數(name1=value1&name2=value2)#錨點
例如:http//127.0.01:8080/wenjianjia/index.html?name=jredu#top

console.log(location);

console.log(location.href); //返回當前完整路徑
console.log(location.protocol); //返回協議名
console.log(location.host); //返回主機名+端口號
console.log(location.hostname); //返回主機名
console.log(location.port); //返回端口號
console.log(location.pathname); //返回文件路徑
console.log(location.search); //返回?開頭的參數列表
console.log(location.hash); //返回#開頭的錨點



使用JS跳轉頁面
window.location = "www.baidu.com";

其他使用location提供的方法跳轉頁面的方式

location.assign("www.baidu.com");
location.reliace("www.baidu.com");

function assign(){
  //加載新的文檔,加載以後可以回退
  location.assign("http://www.baidu.com");
}



function replace(){
  //使用新文檔替換當前文檔,替換以後不能回退
  location.replace("http://www.baidu.com");
}



function reload(){
  //重新加載當前文檔。刷新頁面
  //reload():在本地刷新當前頁面,相當於F5
  //reload():強制刷新,從服務器端重新加載頁面,相當於ctrl+F5
  location.reload();
}


history 瀏覽歷史

console.log(hostory);
console.log(hostory.length); //瀏覽歷史列表的個數

function back(){
  history.back(); //後退按鈕
}



function forward(){
  history.forward(); //前進按鈕
}



function go(){
  /*跳轉到瀏覽歷史的任意一個頁面:0表示當前頁面,-1表示後一頁(back),1表示前一頁(forward)*/
  history.go(1);
}


navigator (了解即可)
包含瀏覽器的各種系統信息。

console.log(navigator);

/*檢測瀏覽器安裝的各種插件*/
console.log(navigator.plugins);


confirm 確認對話框

var is = confirm("我帥嗎");

if(is){
    alert("你最帥!");
}else{
    alert("帥上天!");
}

效果如圖:

技術分享

window對象的常用方法

>>>在window對象中的所有方法和屬性,均可以省略window關鍵字
  window.alert();-->alert();

1、alert():彈出一個警告提示框;


2、prompt():彈窗接受用戶的輸入;


3、confirm():彈出一個帶有“確定”和“取消”按鈕的對話框,點擊按鈕返回true/flase;


4、close():關閉當前瀏覽器窗口,在個別瀏覽器中,只能關閉在當前腳本新打開的頁面(使用超鏈接、window.open()等方式打開的頁面)


5、open():打開一個新窗口。
  參數一:新窗口的地址
  參數二:新窗口的名字,並沒有什麽卵用
  參數三:新窗口的各種屬性設置,"屬性1=值1,屬性2=值2,屬性3=值3"


6、setTimeout:設置延時執行,只會執行一次;
  setInterval:設置定時器,每隔n毫秒執行一次
接受兩個參數:需要執行的function、毫秒數;

7、clearTimeout:清除延時器
setInterval:設置定時器,每隔n毫秒執行一次
使用方法:設置延時器或定時器時,可以使用變量接受定時器id;
var id = setInterval;
調用clearInterval時,將id傳入,即可清除對應的定時器;
clearInterval(id);

function closewindow(){
    close();
}
function openwindow(){
    window.open("http://www.baidu.com","baidu","width=600px,height=600px,left=200px,top=200px");
}
            
var timeoutId = 0;
function setTimeout1(){
    setTimeout(function(){
      console.log("延時器成功執行!");
  },3000);
  timeoutId = setTimeout(openwindow,3000);
}
function clearTimeout1(){
    clearTimeout();
}

效果如圖,當點擊 設置延時器按鈕 時,會隔3秒彈出一個新窗口:

技術分享

DOM

DOM樹節點

DOM節點分為三大類:元素節點、屬性節點、文本節點;

文本節點、屬性節點屬於元素節點的子節點。操作時,均需要先取到元素節點,在操作子節點;

可以使用getElement系列方法,取到元素節點。

【查看元素節點】
1、 getElementById:通過id取到唯一節點。如果id重名,只能取得第一個。
  getElementsByName():通過name屬性
  getElementsByTagName():通過標簽名
  getElementsByClassName():通過class名

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

【查看/設置屬性節點】
1、查看屬性節點:getAttribute("屬性名");
2、設置屬性節點:setAttribute("屬性名","新屬性值");

>>>查看和設置屬性節點,必須先去到元素節點,才能使用。
>>>setAttribute(); 函數在IE瀏覽器中可能會存在兼容性問題。比如在IE中不支持使用這個函數設置style/onclick等樣式屬性和事件屬性。
>>>我們推薦使用點符號法替代上述函數
  eg:dom1.style.color="" dom1.onclick="" dom1.src=""
*
【總結-JS修改DOM節點的樣式】
1、使用setAttribute()設置class和style屬性,但是存在兼容性問題,不提倡
  eg:div.setAttribute("class","cls1");
2、使用.className直接設置class類,註意是className而不是.class
  eg:div.className = "cls1";
3、使用.style設置單個屬性,註意屬性名要使用駝峰命名法:
  eg:div.style.backgroundColor = "red";
4、使用.style或.style.cssText 設置多個樣式屬性
  eg:div.style = "background-color: red; color: yellow;"
  eg:div.style.cssText = "background-color: red; color: yellow;" 推薦使用√

【查看/設置文本節點】
innerText:取到或設置節點裏面的文字內容;
innerHTML:取到或設置節點裏面的HTML代碼;
tagName:取到當前節點的標簽名。標簽名全部大寫顯示。

【根據層次獲取節點】
1、 .childNodes:獲取元素的所有子節點。包括回車等文本節點。
  .children:獲取當前元素的所有元素節點(只獲取標簽)。


2、 .firstChild:獲取元素的第一個子節點。包括回車等文本節點。
  .firstElementChild:獲取元素的第一個子節點。不包括回車等文本節點
  .lastChild:獲取元素的最後一個子節點。包括回車等文本節點。
  .lastElementChild:獲取元素的最後一個子節點。不包括回車等文本節點。


3、 .parentNode:獲取當前節點的父節點。


4、 .previousSibling:獲取當前節點的前一個兄弟節點,包括回車等文本節點。
  .previousElementSibling:獲取當前節點的前一個兄弟節點,不包括回車等文本節點。


5、 .nextSibling:獲取當前節點的後一個兄弟節點,包括回車等文本節點。
  .nextElementSibling:獲取當前節點的後一個兄弟節點,不包括回車等文本節點


6、 .getAttribute:獲取當前節點的屬性節點

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

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

事件

JS中的事件分類

1、鼠標事件
click、bdlclick、onmouseover、onmouseout


2、HTML事件
onload、onscroll、onsubmit、onchange、onfouce


3、鍵盤事件
keydown:鍵盤按下時觸發
keypress:鍵盤按下並松開的瞬間觸發
keyup:鍵盤擡起時觸發

[註意事項]
① 執行順序:keydown->keypress->keyup
② 當長按時,會循環執行keydown->keypress
③ 有keydown並不一定有keyup,當事件觸發過程中,鼠標將光標移走,將導致沒有keyup
④ keypress只能捕獲鍵盤上的數字、字母、符號鍵,不能捕捉各種功能鍵,而keydown和keyup可以。
⑤ keypress支持區分大小寫,keydown和keyup並不支持。

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

JS中的DOM0事件模型

1、內斂模型(行內綁定):直接將函數名作為HTML標簽的某個事件屬性的屬性值
  eg:<button onclick="func()">DOM0內聯模型</button>
  優點:使用方便。
  缺點:違反了w3c關於HTML與javaScript分離的基本原則;
2、腳本模型(動態綁定):在JS腳本中,取到某個節點,並添加事件屬性
  eg:window.onload = function(){}
  優點:實現了HTML與JavaScript的分離。
  缺點:同一個節點只能綁定一個同類事件。如果綁定多次,最後一個生效。
  

JS中的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的事件綁定,那麽在綁定事件時,處理函數必須要使用有名函數,而不能使用匿名函數。
btn2.removeEventListener("click",func2);
btn2.detachEvent("click",func2);

事件冒泡與事件捕獲

【JS中的事件流】
1、事件冒泡:當某DOM元素觸發一種事件時,會從當前節點開始,主機往上觸發其祖先節點的同類型事件,直到DOM根節點
  >>>什麽情況下會產生事件冒泡?
  ①DOM0模型綁定事件,全部都是冒泡;
  ②IE8之前,使用的attachEvent()綁定的事件,全部都是冒泡
   ③其他瀏覽器,使用addEventlistner()添加事件,當第三個參數省略或者為false時,為事件冒泡;


2、事件捕獲:當某DOM元素觸發一種事件時,會從文檔根節點開始,主機向下觸發其祖先節點的同類型事件,直到該節點自身;
  >>>什麽情況下會產生事件捕獲?
  ①使用addEventlistner()添加事件,當第三個參數為true時,為事件捕獲;
  技術分享


3、阻止事件冒泡
在IE瀏覽器中,使用:e.cancelBubble = true;
在其他瀏覽器中,使用:e.stopPropagation();

兼容所有瀏覽器的寫法:

function myParagraphEventHandler(e) {
    e = e || window.event;
    if (e.stopPropagation) {
        e.stopPropagation(); //IE以外 
    } else {
        e.cancelBubble = true; //IE 
    }
}


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中的內置對象

數組

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

2、如何聲明一個數組?
  ①使用字面量聲明: var arr = [];

  在JS中,同一數組可以存儲各種數據類型。
  例如: var arr = [1,"wuhao",true,{},null,func]

  ②使用new關鍵字聲明:var arr = new Array(參數);
  >>>參數可以是:
  a.參數省略,表示創建一個空數組;
  b.參數為一個整數,表示聲明一個length為指定長度的數組。但是這個length可以隨時可變可追加。
  c.參數為逗號分隔的多個數值,表示數組的多個值。
  new array(1,2,3) == [1,2,3]

var arr = [1,"wuhao",true,{},null,func];
console.log(arr);




3、數組中元素的讀寫/增刪?
  ①讀寫:通過下標訪問元素。下標從0開始 arr[1] = "haha";
  ②增刪:
    a.使用delete關鍵字,刪除數組的某一個值。刪除後,數組的長度不變,對應的位置變為Undefined。
      eg:delete arr[1];
    b.arr.pop():刪除數組的最後一個值。相當於arr.length -= 1;
    c.arr.shift():刪除數組的第一個值。
    d.arr.unshift(值):在數組的第0個位置新增一個值;
    e.arr.push(值):在數組的最後一個位置新增一個值;
    f.直接訪問數組沒達到的下標,可以動態追加。
      eg:arr[8]="嘿嘿"; arr[100]=1; 中間如果有空余下標,將存入Undefined

4、數組中的其他方法

  ①join():將數組用指定分隔符鏈接為字符串。當參數為空時,默認用逗號分隔。

var arr = [1,2,3,4,5,6,7,8];
var str = arr.join("-");
console.log(str)

效果:

技術分享


  ②concat():[原數組不會被改變] 將數組,與兩個或多個數組的值鏈接為一個新數組。
   concat連接時,如果有二維數組,則至多能拆一層[]
    eg: [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]]

var arr = [1,2,3,4,5,6,7,8];
var arr1 = ["haha","heihei","hehe"];
var arr2 = arr.concat(arr1);
var arr3 = arr.concat([1,2,[3,4]]);
            
console.log(arr3);

效果:

技術分享


  ③push():在數組最後增加一個,unshift():數組開頭增加一個。 -->返回新數組的長度;
   pop():在數組最後刪除一個,shift():數組開頭刪除一個。 -->返回被刪除的值;
  [上述方法,均會改變原數組]

var arr = [1,2,3,4,5,6];
arr.pop(6);
arr.push(7);
            
console.log(arr);

效果:

技術分享



  ④reverse():[原數組被改變]將數組翻轉,倒敘輸出。
    

var arr = [1,2,3,4,5,6,7,8];
arr.reverse();
console.log(arr);

技術分享


  ⑤slice(begin,end):[原數組不會被改變]截取數組中的某一部分,並返回截取的新數組。

  >>>傳入一個參數,表示開始區間,默認將截到數組最後;
  >>>傳入兩個參數,表示開始和結束的下標,左閉右開區間(包含begin,不包含end);
  >>>兩個參數可以為負數,表示從右邊開始數,最後一個值為-1;

var arr = [1,2,3,4,5,6,7,8];
var arr1 = arr.slice(3,7);
console.log(arr1);

技術分享


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


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

例:返回的是7

var arr = [1,5,6,3,4,2,7,6,4,8];
var index = arr.indexOf(6,4);
console.log(index);



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

var arr = [1,5,6,3,4,2,7,6,4,8];
arr.forEach(function(item,index){
    console.log(item);    
})

技術分享


  ⑨map():數組映射,使用方式與forEach()相同。不同的是,map可以有return返回值,表示將原數組的每個值進行操作後,返回給一個新數組。
  (IE8之前,不支持此函數!!!!!)

var arr1 = arr.map(function(item,index){
    console.log(item);
    return item+2;
});
console.log(arr1);



5、二維數組與稀疏數組(了解)
  ①二維數組:數組中的值,依然是一個數組形式。
    eg:arr=[[1,2,3],[4,5,6]]; //相當於兩行三列
    讀取二維數組:arr[行號][列號];

var arr2 = [[1,2],[3,4,5],[6,7]];
for(var i=0;i<arr2.length;i++){
    for(var j=0;j<arr2[i].length;j++){
        console.log(arr2[i][j]);
    }
}

技術分享

  ②稀疏數組:數組中的索引是不連續的。(length要比數組中實際的元素個數大)

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

內置對象

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

2、Number類
Number.MAX_VALUE 返回Number類最大值
Number.MIN_VALUE 返回Number類最小值

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

3、String 類

 ①、屬性:str.length 返回字符串的長度,也就是 字符數
  字符串支持類似數組的下標訪問方式:str[0];
 ②、 方法:
  .toLowerCase():將字符串所有字符轉成小寫
  .toUpperCase():將字符串所有字符轉成大寫
  .charAt(n):截取數組的第n個字符,相當於str[n]
   .indexOf("str",index):從index位置開始,查找子串在字符串中出現的位置,如果沒有找到返回-1;其他同數組的indexOf方法;
  .lastindexOf():同數組
  .substring(begin,end):從字符串中截取子串
    >>>只傳入一個參數,表示從begin開始,到最後
    >>>傳入兩個參數,表示從begin到end的區間,左閉右開
  .split("分隔符"):將字符串以指定分隔符分隔,存入數組中。傳入空""表示將字符串的每個字符分開放入數組
  .replace("old","new"):將字符串中的第一個old替換為new。
     >>>第一個參數,可以是普通字符串,也可以是正則表達式;var str1 = str.replace("i","*");
    >>>如果是普通字符串,則只替換第一個old。如果是正則表達式,則可以根據正則的寫法要求,進行替換。var str1 = str.replace(/s/g,"*");

4、date 日期類
①、new Date():返回當前最新時間
  new Date("2017,8,31,12:34:56");返回指定時間
②、常用方法:
  .getFullYear():獲取4位年份
  .getMonth():獲取月份 0-11
  .getDate():獲取一個月中的第幾天 1-31
  .getDay():獲取一周中的第幾天 0-6,0表示周天
  .getHours():獲取小時
  .getMinutes():獲取分鐘
  .getSeconds():獲取秒function getTime(){

  
function getTime(){
  var dates = new Date();   var year = dates.getFullYear(); var month = dates.getMonth(); var date1 = dates.getDate(); var day = dates.getDay();
var weeks = ["星期日","星期一","星期二","星期三","星期四","星期五","星期六",]

 
var hours = dates.getHours()<10?"0"+dates.getHours():dates.getHours();
 var minutes = dates.getMinutes()<10?"0"+dates.getMinutes():dates.getMinutes();
  var seconds = dates.getSeconds()<10?"0"+dates.getSeconds():dates.getSeconds();

   var div1 = document.getElementById("div1");
  
  div1.innerText = year+"年"+(month+1)+"月"+date1+"日"+weeks[day]+hours+":"+minutes+":"+seconds;

  setTimeout(arguments.callee,1000);
}

技術分享

自定義對象

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


2、對象的聲明
  ①使用字面量聲明:

  var obj = {
    key1 : value1,
    key2 : value2,
    func1 : function(){}
  }


  >>>對象中的數據是以鍵值對形式存儲,鍵與值之間用:分隔。多個鍵值對之間用,分隔。
  >>>對象中的鍵可以是除了數組/對象以外的任何數據類型。但是一般我們只用普通變量名作為鍵。
  >>>對象中的值可以是任何數據類型,包括數組和對象。
  
  ②使用new關鍵字聲明:

  var obj = new object(){
    obj.key1 = value1;
    obj.func1 = function(){}
  }


3、對象中屬性和方法的讀寫:
  ①.運算符:對象名.屬性 對象名.方法();
  對象外部:this.屬性 this.方法
  內部對象:對象名.屬性 對象名.方法();
  
  ②通過["key"]調用:對象名.["屬性名"] 對象名.["方法名"]();
  >>>如果鍵中包含特殊字符,則只能使用第②種方式;
  >>>對象中,直接寫變量名,默認為調用全局變量。如果需要調用對象滋生的屬性或者方法,需要使用對象名.屬性名, 或者this.屬性。
  person.age this.age 都可以,但推薦使用this關鍵字


   ③刪除對象的屬性和方法:delete 對象名.屬性名/方法名
  delete person.age;

var person = {
    name : "張三",
    age : 14,
    say : function (){
      alert("我叫"+this.name+",今年"+person.age+"歲了!");
  }
}
            

console.log(person.name);
console.log(person.age);
person.say();

效果:
技術分享

技術分享

JS基礎--函數與BOM、DOM操作、JS中的事件以及內置對象