整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          JavaScript中常見的幾種錯誤

          JavaScript中常見的幾種錯誤

          、Javascript的異常處理機制

          當javascript代碼中出現錯誤的時候,js引擎就會根據js的調用棧逐級尋找對應的catch,如果沒有找到相應的catch handler或catch handler本身又有error或者又拋出新的error,最后就會把這個error的處理交給瀏覽器,并顯示在錯誤控制臺中)顯示錯誤信息給訪問者。

          二、try/catch/finally

          是js提供的異常處理機制,用法如下:

          try {
          // 這段代碼從上往下運行,其中任何一個語句拋出異常該代碼塊就結束運行}
          catch (e) {
          // 如果try代碼塊中拋出了異常,catch代碼塊中的代碼就會被執行。
          // e是一個局部變量,用來指向Error對象或者其他拋出的對象
          }
          finally {
            //無論try中代碼是否有異常拋出(甚至是try代碼塊中有return語句),
                 //finally代碼塊中始終會被執行
          }

          三、常見錯誤

          3.1 syntaxError

          顧名思義,典型的語法錯誤。

          function foo{
          }
          if{}

          Js代碼是從上往下依次執行,但是js引擎先解析代碼是否語法出錯,如果語法都解析不通過,那么顯而易見:一行代碼也不會執行,從而會在控制臺中輸出語法報錯:


          syntaxError錯誤

          3.2 變量未定義

          變量未定義(也叫未聲明)指的是,當程序中使用了一個未定義的變量則會報錯。

          如下代碼:

          var foo=1
          var bar=foo + n1

          顯而易見,n1變量是未定義的就直接使用,從而會在控制臺中輸出如下錯誤:


          XXX is not defined 變量未定義

          3.3 TypeError錯誤

          TypeError錯誤指的是數據類型未正確使用。

          例如一:

          var foo=function(){
          	console.log('foo')
          }
          foo='hello world'
          foo()

          在某些邏輯下,foo本身存儲的是函數,但是誤把foo賦值了一個字符串或其它不是函數的數據類型,但是foo當作函數來調用了,則會報TypeError錯誤在控制臺中輸出:


          TypeError,xxx is not a function

          例如二:

          未正確獲取元素,導致得到一個null而不是DOM節點對象后,綁定事件而引發的TypeError錯誤。

          <script>
          var oBtn=document.getElementById('btn') 
          //因為代碼從上往下解析的原因,還未解析到button標簽,返回為null。
          //null是空對象,不能綁定任何屬性,onclick雖然是事件,
          //但也是對象中屬性的一部分,所以報TypeError錯誤。
          oBtn.onclick=function(){
          	console.log('bar')
          }
          </script>
          <button id="btn">foo</button>


          cannot set property 'onclick' of null

          正確錯誤是把選擇元素的js代碼放置html標簽之后,也就是緊鄰 </body>標簽,或放在windo.onload事件中。

          <script>
          	window.onload=function(){
          		var oBtn=document.getElementById('btn') 
              //因為代碼從上往下解析的原因,還未解析到button標簽,返回為null。
              //null是空對象,不能綁定任何屬性,onclick雖然是事件,
              //但也是對象中屬性的一部分,所以報TypeError錯誤。
              oBtn.onclick=function(){
                console.log('bar')
              }
          	}
          </script>
          <button id="btn">foo</button>

          3.4 JSON解析錯誤

          首先,我們需要了解JSON是什么 ?

          JSON(JavaScript Object Notation, JS 對象簡譜) 是一種輕量級的數據交換格式。它基于 ECMAScript (歐洲計算機協會制定的js規范)的一個子集,采用完全獨立于編程語言的文本格式來存儲和表示數據。簡潔和清晰的層次結構使得 JSON 成為理想的數據交換語言。

          而它的定義規則和js中字面量聲明對象很像,所以很多初學者以為json就是js對象,其實這是錯誤的。

          3.4.1 JSON 是 JS對象表示語法的子集。

          • 數據在名稱/值對中
          • 數據由逗號分隔
          • 大括號 {} 保存對象
          • 中括號 [] 保存數組,數組可以包含多個對象

          3.4.2 JSON 數據的書寫格式是

          key : value

          名稱/值包括字段名稱(在雙引號中),后面寫一個冒號,然后是值:

          "name" : "foo"

          3.4.3 JSON 值可以是:

          • 數字(整數或浮點數)
          • 字符串(在雙引號中)
          • 邏輯值(true 或 false)
          • 數組(在中括號中)
          • 對象(在大括號中)
          • null

          前方高能~~~

          談到這里,json數據從哪來呢?

          在請求Ajax的時候,會從后臺服務器中拿到json數據,往往會把json解析成js對象。則前端工程師會用到JSON.parse方法。有時候前端也會定義JSON數據,如果語法不正確當轉成js對象時,則會報錯。如下代碼:

          //var foo='{ name:"bar" }'//name未帶雙引號
          var foo='{ "name":bar }'//bar未帶雙引號
          
          var f=JSON.parse( foo )


          token n in JSON at position

          正確的JSON轉換js對象的方式如下:

          var foo='{ "name":"bar","age":20 }'//20無需帶,則理解為數值類型
          
          var f=JSON.parse( foo )
          console.log( f ) //{name: "bar", age: 20} ,此時可以正確的把json轉換成js對象,
          												//通過 點 語法,也就是f.name和f.age訪問到具體的數據

          以上是JavaScript中常見的錯誤,后期遇到會不斷更新,感謝小伙伴們的踴躍投稿和留言。

          使用 <summary> 元素:

          <details>

          <summary>Copyright 1999-2011.</summary>

          <p> - by Refsnes Data. All Rights Reserved.</p>

          <p>All content and graphics on this web site are the property of the company Refsnes Data.</p>

          </details>


          瀏覽器支持

          目前,只有 Chrome 和 Safari 6 支持 <summary> 標簽。


          標簽定義及使用說明

          <summary> 標簽為 <details> 元素定義一個可見的標題。 當用戶點擊標題時會顯示出詳細信息。


          HTML 4.01 與 HTML5之間的差異

          <summary> 標簽是 HTML5 中的新標簽。


          提示和注釋

          注釋:<summary> 元素應該是 <details> 元素的第一個子元素。


          全局屬性

          <summary> 標簽支持 HTML 的全局屬性。


          事件屬性

          <summary> 標簽支持 HTML 的事件屬性。

          如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!

          次用了hibernate做了一個簡單數據庫與前臺連接的小程序,能調用數據庫進行增刪該查。

          這次我用struts 2 框架實現MVC模式的設計。

          Struts 2 實現了MVC設計模式,其中,模型(Model)表示業務和數據庫代碼,視圖(View)頁面設計代碼,控制器(Controller)表示導航代碼。所有這些使struts 2成為java web應用的基本框架。

          Struts 2主要包括控制器、Action對象、視圖jps頁面和配置文件等。如圖所示。

          Struts 2 的MVC架構

          • 控制器:控制器由核心過濾器StrutsPrepareAndExecuteFilter、若干攔截器和Action組件實 現

          • 模型:模型由JavaBean或是JOPO實現,它可實現業務邏輯

          • 視圖:通常由JSP頁面實現,也可以由Velocity Template、FreeMarke或其他表示層技術實 現

          • 配置文件:Struts 2 框架提供一個名為struts.xml的配置文件,使用它來配置應用程序中組 件

          • Struts 2 標簽:Struts 2 提供了一個強大的標簽庫,該標簽庫提供了大量的標簽,使用這些 標簽可 以簡化JSP頁面的開發

          下載標簽庫

          這一步基本事可以省略的,因為大多數的環境若是支持Struts 2 的話應該會自帶它的標簽庫。

          在web.xml 中添加過濾器

          要使web程序支持struts 2 功能,需要在web.xml文件中聲明一個核心過濾器類和映射。

          創建struts.xml配置文件

          Struts 2 的每一個應用程序都有一個配置文件struts.xml,該文件用來指定動作類關聯的類、執行的方法以及執行的結果等。在開發環境下配置文件應該保存在src目錄中,Web應用打包后保存在WEB-INF\classes目錄中。


          實戰簡單小程序

          我用的環境是myeclipse10

          創建一個向客戶發送一條信息的應用程序,完成下面三步:1.創建一個Action類執行某種操作;2.創建一個JSP頁面表示消息;3.在struts.xml文件中建立Action類與視圖的映射。

          • 1 創建Action動作類

          該頁面的動作是用戶單擊HTML頁面中的超鏈接向web服務器發送以惡搞請求。動作類execute()被執行并返回SUCCESS結果。Struts根據該結果返回一個視圖頁面。

          HelloUserAction.java


          package com.Model;

          import com.opensymphony.xwork2.ActionSupport;

          public class HelloUserAction extends ActionSupport {

          private String message; //動作類的屬性

          public String getMessage(){

          return message;

          }

          public void setMessage(String message){

          this.message=message;

          }

          public String execute() throws Exception{

          setMessage("Hello Struts User");

          return SUCCESS;

          }

          }

          /*程序覆蓋了execute(),在其中調用set Message()設置message屬性值,然后返回字符串常量SUCCESS。該常量繼承了Action接口。*/

          • 2 創建視圖頁面

            用戶動作是通過index.jsp頁面的超鏈接觸發的。

            index.jsp

            <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

          • <%@ taglib prefix="s" uri="/struts-tags" %>

          • <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

          • <html>

          • <head>

          • <title>Basic Struts 2 Application - Welcome</title>

          • </head>

          • <body>

          • <h3>Welcome To Struts 2!</h3>

          • <p><a href="<s:url action='hello'/>">Hello User</p>

          • </body>

          • </html>

            該頁面中使用了Struts 2 的標簽,要使用此標簽應該使用taglib指令導入標簽庫:

            <%@ taglib prefix="s" uri="/struts-tags"%>

          預覽效果

          下面創建JSP頁面hellouser.jsp來顯示HelloUserAction動作類的message屬性值。

          hellouser.jsp

          <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

          <%@taglib prefix="s" uri="/struts-tags" %>

          <html>

          <head>

          <title>Hello User!</title>

          </head>

          <h2><s:property value="message"/></h2>

          </html>

          頁面中<s:property >標簽顯示HelloUserAction動作類的message的屬性值。通常在value屬性中的message告訴struts框架調用動作類的getMessage()。

          • 3 修改struts。xml配置文件

            struts.xml 文件用來配置請求動作、Action類和結果視圖之間的聯系。它通過映射來告訴Struts 2使用哪個Action類響應用戶的動作,執行哪個方法,根據方法返回字符串用哪個視圖。

            編輯struts.xml文件,在<package>元素中添加<action>定義。

          struts.xml

          <?xml version="1.0" encoding="UTF-8" ?>

          <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">

          <struts>

          <constant name="struts.devMode" value="true" />

          <package name="basicstruts2" extends="srtuts-defalut" namespace="/">

          <action name="hello" class="com.Model.HelloUserAction" method="execute" >

          <result name="success">/hellouser.jsp</result>

          </action>

          </package>

          </struts>

          struts.xml的可視化窗口

          最后效果

          dan

          單擊Hello User之后

          總結

          以上的小程序只是簡單的介紹了Struts 2 的使用,沒有什么炫酷的效果,但要是結合我之前寫的hibernate做一個登錄注冊系統的話,只要能熟練的掌握,還是很方便快捷的比一般的編寫方法要更直觀更容易理解。

          不喜歡打廣告,有緣下次再見!


          主站蜘蛛池模板: 春暖花开亚洲性无区一区二区| 亚洲一区动漫卡通在线播放| 日本一区二区三区高清| 亚洲V无码一区二区三区四区观看| 女人18毛片a级毛片一区二区| 亚洲AV无码一区二区三区DV| 一区二区三区美女视频| 国产一区在线播放| 午夜视频一区二区| 无码午夜人妻一区二区不卡视频 | 91福利国产在线观一区二区| 大屁股熟女一区二区三区| 冲田杏梨高清无一区二区| 波多野结衣中文一区| 在线观看一区二区精品视频| 色综合视频一区中文字幕| 中文无码一区二区不卡αv| 亚洲一区中文字幕在线观看| 亚洲国产成人久久综合一区 | 精品国产伦一区二区三区在线观看 | 好爽毛片一区二区三区四| 婷婷国产成人精品一区二 | 亚洲色偷偷偷网站色偷一区| 日本不卡一区二区视频a| 久久中文字幕一区二区| 国产精品日本一区二区不卡视频| 亚洲永久无码3D动漫一区| 国产成人精品一区二区三区| 国产一区二区三区不卡在线看 | 午夜影视日本亚洲欧洲精品一区 | 成人国产一区二区三区| 色妞AV永久一区二区国产AV| 国产AV午夜精品一区二区三| 久久婷婷久久一区二区三区| 无码人妻少妇色欲AV一区二区| 亚洲国产老鸭窝一区二区三区| 亚洲高清日韩精品第一区| 天堂一区二区三区在线观看| 国产精品一区二区电影| 中文字幕一区精品| 日本一区二区不卡视频|