JavaWeb基礎—JS學習小結


JavaScript是一種運行在瀏覽器中的解釋型的編程語言

推薦菜鳥教程
一、簡介
js:javascript是基於對象【哪些基本對象呢】和和事件驅動【哪些主要事件呢】的語言,應用在客戶端(注意與面向對象的區分)

js的三大特點
  交互性:信息的動態交互
  安全性:不能訪問本地磁盤的文件
  跨平台性:能支持js的瀏覽器都能運行

JavaScript 對大小寫敏感
與java的區別:(只是長得像而已,雷鋒&雷峰塔)
   1.不同公司開發的語言,java:Oracl js:網景公司
  2.java:面向對象 js:基於對象(已經有很多存在可以直接使用的對象)
  3.java:強類型語言 js:弱類型語言
  4.java:需要先編譯再運行 js:不需要

js的組成:
  ECMAScript
    ECMA:歐洲計算機組織 基本語法
  BOM
    Broswer Object Model 瀏覽器對象模型
  DOM
    Document Object Model 文檔對象模型
    用以訪問 HTML 元素的正式 W3C 標准


二、與HTML兩種結合方式(建議放在</body>后)
  1.使用script標簽 <script type="text/javascript"> js代碼 </script>
    那些老舊的實例可能會在 <script> 標簽中使用 type="text/javascript"。
    現在已經不必這樣做了。JavaScript 是所有現代瀏覽器以及 HTML5 中的默認腳本語言。
  2.使用script標簽,引入外部js文件 <script type="text/javascript" src="js文件路徑">【此處應為空】</script>
    提示:外部腳本不能包含 <script> 標簽。

   請使用 document.write() 僅僅向文檔輸出寫內容。
   如果在文檔已完成加載后執行 document.write,整個 HTML 頁面將被覆蓋:

三、基本語法(注釋同java)
1.原始類型和變量聲明:
  五個數據類型:【string——詳細方法,參見菜鳥教程。 number boolean】 null undifined
  JavaScript 變量有很多種類型,但是現在,我們只關注數字和字符串
  極大或極小的數字可以通過科學(指數)計數法來書寫:

  使用var進行變量定義,使用typeof(變量名);查看當前變量類型
  var data=new Data(); 拿到對象引用,null表示引用為空,父類都為Object

  類型轉換可以使用對應的方法:String(x),Number(x)
2.js的語句
  if判斷語句(同java)
  switch語句,弱類型,都支持 switch(){
  case:
  break;
  case:
  break;
  }
  循環語句 for while do{}while 類似java
3.js的運算符:
  與java不同的,由於是弱類型,var i=1;1/10*10=1(不是java的0)
  字符串+同java的拼接 相減時會真正執行(非數字報錯NaN)- var str="2" str-1=1;
  boolean類型也可以進行加減運算,true為1 false為0
  == :等於,只判斷值,與類型無關
  === :全等,檢測值和類型
  向頁面輸出:document.write();輸出值或者HTML代碼 ("aaa") ("<hr/>") 對應99乘法表案例
4.js的數組:
  弱類型,存取數據無類型要求
  表示方法: var arr=[1,"aa",true];
  使用內置對象Array var arr1=new Array(5),長度為5; 取同java arr1[0]=1;
  var arr2=new Array(3,4,5);為具體元素
  長度屬性:length 如arr.length
5.js的函數:【寫完方法記得調用,注意單雙引號和分號的使用】
  定義方式:使用function關鍵字:function 函數名(參數列表){} 返回值可選
  調用方法:函數名(參數列表);參數列表不帶類型
  弱類型語言,無需類型
  function add(a,b){ var sum=a+b; alert(sum);}
  add(2,3);
  匿名函數:function(){} 調用 var add3=function(){} add3(5,6);
  與上一種類似
  動態函數:【作了解】使用內置對象Function new Function("參數列表","方法體和返回值");
  使用方式同上,參數列表 方法體可以提出來寫
6.js的全局變量和局部變量
  全局變量:在一個script中定義一個變量,全局js頁面中都可以使用。(其它的script也可以)
  **IE中調試工具,按F12

7.script標簽的放置的位置:
  理論上是全局都可以(包括HTML標簽后)
  原則:放在</body>后面,由於HTML是由上到下解析,可以保證獲取到HTML中的值等。
8.js的重載:

  js中是不支持重載的,原因是js中識別函數的唯一方法就是函數的函數名

  如想模擬java的重載,可以通過函數體中隊參數的判斷進行模擬
9. JavaScript 對象
  對象由花括號分隔。在括號內部,對象的屬性以名稱和值對的形式 (name : value) 來定義。屬性由逗號分隔:
  var person={firstname:"Bill", lastname:"Gates", id:5566};
  當然也可以new一個自己的 var person = new Object();
  當您像這樣聲明一個 JavaScript 變量時:
  var txt = "Hello";
  您實際上已經創建了一個 JavaScript 字符串對象。字符串對象擁有內建的屬性 length。
  對於上面的字符串來說,length 的值是 5。字符串對象同時擁有若干個內建的方法

JS對象:

 

一、string對象,類似於java兩種創建方式(棧中或者堆中)HTML不區分大小寫,JS區分
  屬性和方法:length屬性 如 str.length
  方法:1.與HTML相關的方法:
  bold()方法:加粗。 如str.bold();
  fontcolor()方法:字體顏色。如str.fontcolor("red");
  fontsize()方法:字體大小。如str.fontsize(2);
  link()方法:字符串顯示為連接。如str.link("鏈接地址");str為鏈接顯示內容
  sub()與sup()方法:設置上標與下標
    2.與java相似的方法:
  concat()方法:連接字符串。如str.concat("a");
  charAt()方法:返回指定位置字符 str.charAt(2);超出為空(非null)
  indexOf()方法:返回位置,沒有返回-1;
  split()方法:將字符串切分為字符數組(從分隔符處分割為數組元素
  replace方法:替換,如str.replace("原始值","新值");
  substr()與substring():取子字符串
二、Array對象,創建方法見初識JS
  屬性和方法:length屬性 如arr.length
  方法:concat()方法:連接數組,返回一個新合成的數組
  join()方法:使用指定連接符,返回元素連接而成的字符串
  push()方法:向數組末尾添加新元素,並且返回新的數組長度,若加的是數組,
  新返回的長度仍是原長度加1,加入的視為一個元素!
  pop()方法:刪除最后一個元素並返回該元素
  reverse()方法:顛倒數組元素順序(改變原數組)
三、Date對象,創建 var date=new Date();類同java
  方法:toLocaleString()方法:格式化方法
  得到年,推薦getFullYear()方法
  得到月,使用getMonth()方法,注意返回范圍0-11
  得到星期,使用getDay()方法,返回0-6,從周日開始
  得到日,使用getDate()方法,范圍1-31,正常
  得到小時,getHours()方法,分秒同理
  getTimes()方法:返回1970年1月1日至今的毫秒數
  應用場景:使用毫秒數來處理緩存
四、Math對象,類似java也是靜態方法,通過類名來調用,如Math.ceil(100.2);
  方法:Math.ceil()方法:向上取整
  Math.floor()方法:向下取整
  Math.round()方法:四舍五入
  Math.random()方法:得到隨機數,同java,0.0到1.0之間的偽隨機數
五、全局函數,由於全局函數不屬於任何一個對象,直接寫函數名使用
  方法:eval();執行js代碼 ,var str = "alert("1122")"";eval(str);
  encodeURI:對字符編碼,encodeURI(str);返回編碼值
  decodeURI:對字符解碼,為上述逆序
  isNaN();判斷當前字符串是否是數字,是數字返回false,NaN表示不是數字
  parseInt();類型轉換,類同java,字符串轉數字
六、JS的重載
  注意java中重載:名稱相同,參數可辨
  重寫:子類父類相同方法名稱與參數的不同實現

 

  JS不存在重載!但可以通過其他方法模擬實現重載。【然而並沒有什么卵用,僅面試答答】
  arguements數組,保存傳遞的參數,就通過這個數組來實現
  function add(){//此處不傳參數,函數內判斷
  if(arguements.length==2){
  return arguements[0]+arguements[1];
  }else if(...){
  ...
  }

  ...
  
七、JS的BOM對象(瀏覽器對象)
  對象:navigator:獲取瀏覽器的信息(客戶機)如navigator.appName等(注意是屬性。
  對象包含有關訪問者瀏覽器的信息。具有誤導性
  srceen:屏幕信息,如srceen.width
  location:(重點看href屬性)href,設置或返回當前請求的url地址(HTML中的button的事件綁定
  <input type="button" value="點擊跳轉" onclick="js代碼方法等"/>
  location.href="".
  history:請求的url的歷史記錄
  <input type="button" value="back" onclick="back()"/>
  function back(){history.back();}其它同理,history.forward();
  還可以history.go(-1或1實現)
  【重點】window:窗口的頂層對象(包含上述四個)
  方法:(window.alert();等為完整代碼,可省略,依次類推
  alert();警告框頁面彈窗,顯示內容
  confirm();確認提示框,會返回一個確定與否的boolean值
  根據返回值做相關操作,if()
  prompt();輸入的對話框【了解】,兩個參數,提示信息與默認值
  close();是否關閉的方法(兼容性差)

 

  做定時器使用的方法:
  setInterval();兩個參數,JS代碼與毫秒數(1:1000)
  如:setInterval("f1();",1000)
  setTimeout();相同參數,倒計時后執行代碼,單次執行
  ======================================
  clearInterval(); 清除setInterval定時器
  clearTimeout(); 同上,需要傳的參數為set的返回值,清除此值實現
八、JS的DOM對象:getElementById()獲取,操作使用innerHTML 以及直接.屬性名操作
  改變樣式:document.getElementById("p2").style.color="blue";

 

  文檔對象模型,document為超文本文檔,使用這些屬性方法對超文本文檔操作
  也就是第一步需要將這些文檔封裝成對象,並且解析這些超文本文檔(如HTML)
  分配一個 樹形 結構(層級結構)進行解析。比如說span里的id屬性也會封裝成對象
  對象:
  document對象:整個HTML文檔
  element對象:元素對象,標簽對象
  屬性對象
  文本對象
  Node對象:即上述對象的父對象(樹中結點對象),子對象中找不到
  想找的方法時。找父對象。

 

  DHTML:動態HTML,多項技術的合稱(html,css,dom,js(此時強調的是ECMAScript))
九、document對象
  方法:(注意需要調用的格式 ,如document.write())
  write();向頁面輸出文本及html代碼等
  getElementById();通過ID得到元素,
  如<input type="text" id="tex" name="name1" value(默認值)="aa"/> var input1 =document.getElementById(); //得到的是對象 alert(input1.value);
  getElementsByName();通過NAME得到一個集合(理解為對象數組)
  如同上述有四個同name的輸入項 var inputs =document.getElementsByName();
  常用的遍歷,for(var i=0;i<inputs.length;i++)
  getElementsByTagName();通過標簽名字得到
  如var inputs=document.getElementsByTagName("input");

 

  windou彈窗案例:見案例
  注意問題,案例中訪問的是本地文件,由於JS的安全機制,瀏覽器不生效,當然此情況
  僅限於此案例,實際開發不會如此操作
  在末尾添加結點案例:見案例
  基本思路是創建節點,進行添加。基本步驟:
  1.獲取ul標簽
  2.創建li標簽
  3.創建文本
  4.將文本添加到li下
  5.將li添加到ul下
十、元素對象,element對象:要操作必須要獲取到(get...)了解。
  方法:getAttribute();得到屬性的值。input1.getAttribute("value");
  setAttribute(name,value);設置相應屬性的值IE緩存的清理。
  removeAttribute();刪除屬性,但不能刪value!
  屬性:childNode: 獲取子標簽,返回集合(對象數組) ul.childNode
  兼容性差
  【重點】方法:在ul下執行ul1.getElementsByTagName();獲取子標簽的唯一有效方法,
  document里的方法特殊用法

 


十一、Node對象
  屬性一:nodeName;
      nodeType;
      nodeVlaue;
  使用DOM解析HTML的時候,HTML里面的標簽 屬性 文本都封裝成對象
  標簽可以使用三個屬性,例如id屬性也可以使用三個屬性,var id1 = span1.getAttribute();
  標簽 屬性 文本
    nodeType 1 2 3
    nodeName 大寫(SPAN等) 屬性名稱 如#text
    nodeValue null 屬性的值 文本的值
    !常用的為nodeType(從外到內)

 

  屬性二:父節點,子節點,同輩節點:層級結構,類同數據結構
  parentNode,childNodes(兼容性差)firstChild lastChild,

 

十二、 操作DOM樹:
  先document.createElement("p");
  var node=document.createTextNode("這是新段落。")
  para.appendChild(node);
  創建了一個帶文本的p標簽,后面可以再使用相似方法操作

 


  appendChild()方法:實現剪切粘貼的效果。注意是剪切效果!
  insertBefore(newNode,oldNode)方法:在舊結點之前實現插入新結點,通過old結點的父節點進行添加,畢竟不能自己添加自己
  !不存在insertAfter方法
  removeChild():方法,通過父節點進行刪除操作,自己也不能刪除自己
  基本步驟:獲取要刪除的結點、獲取父節點。進行刪除操作
  replaceChild();方法,類同上刪除操作。獲得要替換的舊結點,創建要替換的新結點,
  獲取父節點,進行替換。
  cloneNode(boolean)復制結點,bool表示是否復制。一般是true,東西理解為放在剪切板
  操作的是剪切板的內容(操作副本),原內容還在。

 

十三、innerHTML屬性:非DOM組成部分,主流瀏覽器均兼容,【用的多】
  主要作用:獲取文本內容 如span1.innerHTML注意是屬性
  向標簽里設置內容(可以是html代碼)如div11.innerHTML = "";
  var tab = "<table></table>";注意外面雙引號,里面單引號。
  案例:動態顯示時間:見案例。
  全選練習:見案例。checked=true表示選中
  下拉列表左右選擇案例:見案例。
  select中multiple="multiple"屬性實現顯示所有下拉選擇
  selected="true"表示選中
  省市聯動案例:見案例。select的onchange方法;注意循環的長度,讓i回來以便取完。
  動態生成表格案例:見案例。

一些事件:

 

 js事件,待更新。。。

 

 

 

實例
本例檢測輸入變量的值。如果值是錯誤的,會拋出一個異常(錯誤)。
catch 會捕捉到這個錯誤,並顯示一段自定義的錯誤消息:
<script>
function myFunction()
{
try
{
var x=document.getElementById("demo").value;
if(x=="") throw "empty";
if(isNaN(x)) throw "not a number";
if(x>10) throw "too high";
if(x<5) throw "too low";
}
catch(err)
{
var y=document.getElementById("mess");
y.innerHTML="Error: " + err + ".";
}
}
</script>

 

<h1>My First JavaScript</h1>
<p>Please input a number between 5 and 10:</p>
<input id="demo" type="text">
<button type="button" onclick="myFunction()">Test Input</button>
<p id="mess"></p>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM