Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 成人18视频在线观看,九一在线观看,91中文字幕在线一区

          整合營(yíng)銷(xiāo)服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢(xún)熱線:

          JavaScript中常見(jiàn)的幾種錯(cuò)誤

          JavaScript中常見(jiàn)的幾種錯(cuò)誤

          、Javascript的異常處理機(jī)制

          當(dāng)javascript代碼中出現(xiàn)錯(cuò)誤的時(shí)候,js引擎就會(huì)根據(jù)js的調(diào)用棧逐級(jí)尋找對(duì)應(yīng)的catch,如果沒(méi)有找到相應(yīng)的catch handler或catch handler本身又有error或者又拋出新的error,最后就會(huì)把這個(gè)error的處理交給瀏覽器,并顯示在錯(cuò)誤控制臺(tái)中)顯示錯(cuò)誤信息給訪問(wèn)者。

          二、try/catch/finally

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

          try {
          // 這段代碼從上往下運(yùn)行,其中任何一個(gè)語(yǔ)句拋出異常該代碼塊就結(jié)束運(yùn)行}
          catch (e) {
          // 如果try代碼塊中拋出了異常,catch代碼塊中的代碼就會(huì)被執(zhí)行。
          // e是一個(gè)局部變量,用來(lái)指向Error對(duì)象或者其他拋出的對(duì)象
          }
          finally {
            //無(wú)論try中代碼是否有異常拋出(甚至是try代碼塊中有return語(yǔ)句),
                 //finally代碼塊中始終會(huì)被執(zhí)行
          }

          三、常見(jiàn)錯(cuò)誤

          3.1 syntaxError

          顧名思義,典型的語(yǔ)法錯(cuò)誤。

          function foo{
          }
          if{}

          Js代碼是從上往下依次執(zhí)行,但是js引擎先解析代碼是否語(yǔ)法出錯(cuò),如果語(yǔ)法都解析不通過(guò),那么顯而易見(jiàn):一行代碼也不會(huì)執(zhí)行,從而會(huì)在控制臺(tái)中輸出語(yǔ)法報(bào)錯(cuò):


          syntaxError錯(cuò)誤

          3.2 變量未定義

          變量未定義(也叫未聲明)指的是,當(dāng)程序中使用了一個(gè)未定義的變量則會(huì)報(bào)錯(cuò)。

          如下代碼:

          var foo=1
          var bar=foo + n1

          顯而易見(jiàn),n1變量是未定義的就直接使用,從而會(huì)在控制臺(tái)中輸出如下錯(cuò)誤:


          XXX is not defined 變量未定義

          3.3 TypeError錯(cuò)誤

          TypeError錯(cuò)誤指的是數(shù)據(jù)類(lèi)型未正確使用。

          例如一:

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

          在某些邏輯下,foo本身存儲(chǔ)的是函數(shù),但是誤把foo賦值了一個(gè)字符串或其它不是函數(shù)的數(shù)據(jù)類(lèi)型,但是foo當(dāng)作函數(shù)來(lái)調(diào)用了,則會(huì)報(bào)TypeError錯(cuò)誤在控制臺(tái)中輸出:


          TypeError,xxx is not a function

          例如二:

          未正確獲取元素,導(dǎo)致得到一個(gè)null而不是DOM節(jié)點(diǎn)對(duì)象后,綁定事件而引發(fā)的TypeError錯(cuò)誤。

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


          cannot set property 'onclick' of null

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

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

          3.4 JSON解析錯(cuò)誤

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

          JSON(JavaScript Object Notation, JS 對(duì)象簡(jiǎn)譜) 是一種輕量級(jí)的數(shù)據(jù)交換格式。它基于 ECMAScript (歐洲計(jì)算機(jī)協(xié)會(huì)制定的js規(guī)范)的一個(gè)子集,采用完全獨(dú)立于編程語(yǔ)言的文本格式來(lái)存儲(chǔ)和表示數(shù)據(jù)。簡(jiǎn)潔和清晰的層次結(jié)構(gòu)使得 JSON 成為理想的數(shù)據(jù)交換語(yǔ)言。

          而它的定義規(guī)則和js中字面量聲明對(duì)象很像,所以很多初學(xué)者以為json就是js對(duì)象,其實(shí)這是錯(cuò)誤的。

          3.4.1 JSON 是 JS對(duì)象表示語(yǔ)法的子集。

          • 數(shù)據(jù)在名稱(chēng)/值對(duì)中
          • 數(shù)據(jù)由逗號(hào)分隔
          • 大括號(hào) {} 保存對(duì)象
          • 中括號(hào) [] 保存數(shù)組,數(shù)組可以包含多個(gè)對(duì)象

          3.4.2 JSON 數(shù)據(jù)的書(shū)寫(xiě)格式是

          key : value

          名稱(chēng)/值包括字段名稱(chēng)(在雙引號(hào)中),后面寫(xiě)一個(gè)冒號(hào),然后是值:

          "name" : "foo"

          3.4.3 JSON 值可以是:

          • 數(shù)字(整數(shù)或浮點(diǎn)數(shù))
          • 字符串(在雙引號(hào)中)
          • 邏輯值(true 或 false)
          • 數(shù)組(在中括號(hào)中)
          • 對(duì)象(在大括號(hào)中)
          • null

          前方高能~~~

          談到這里,json數(shù)據(jù)從哪來(lái)呢?

          在請(qǐng)求Ajax的時(shí)候,會(huì)從后臺(tái)服務(wù)器中拿到j(luò)son數(shù)據(jù),往往會(huì)把json解析成js對(duì)象。則前端工程師會(huì)用到JSON.parse方法。有時(shí)候前端也會(huì)定義JSON數(shù)據(jù),如果語(yǔ)法不正確當(dāng)轉(zhuǎn)成js對(duì)象時(shí),則會(huì)報(bào)錯(cuò)。如下代碼:

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


          token n in JSON at position

          正確的JSON轉(zhuǎn)換js對(duì)象的方式如下:

          var foo='{ "name":"bar","age":20 }'//20無(wú)需帶,則理解為數(shù)值類(lèi)型
          
          var f=JSON.parse( foo )
          console.log( f ) //{name: "bar", age: 20} ,此時(shí)可以正確的把json轉(zhuǎn)換成js對(duì)象,
          												//通過(guò) 點(diǎn) 語(yǔ)法,也就是f.name和f.age訪問(wèn)到具體的數(shù)據(jù)

          以上是JavaScript中常見(jiàn)的錯(cuò)誤,后期遇到會(huì)不斷更新,感謝小伙伴們的踴躍投稿和留言。

          使用 <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> 標(biāo)簽。


          標(biāo)簽定義及使用說(shuō)明

          <summary> 標(biāo)簽為 <details> 元素定義一個(gè)可見(jiàn)的標(biāo)題。 當(dāng)用戶(hù)點(diǎn)擊標(biāo)題時(shí)會(huì)顯示出詳細(xì)信息。


          HTML 4.01 與 HTML5之間的差異

          <summary> 標(biāo)簽是 HTML5 中的新標(biāo)簽。


          提示和注釋

          注釋?zhuān)?/strong><summary> 元素應(yīng)該是 <details> 元素的第一個(gè)子元素。


          全局屬性

          <summary> 標(biāo)簽支持 HTML 的全局屬性。


          事件屬性

          <summary> 標(biāo)簽支持 HTML 的事件屬性。

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

          次用了hibernate做了一個(gè)簡(jiǎn)單數(shù)據(jù)庫(kù)與前臺(tái)連接的小程序,能調(diào)用數(shù)據(jù)庫(kù)進(jìn)行增刪該查。

          這次我用struts 2 框架實(shí)現(xiàn)MVC模式的設(shè)計(jì)。

          Struts 2 實(shí)現(xiàn)了MVC設(shè)計(jì)模式,其中,模型(Model)表示業(yè)務(wù)和數(shù)據(jù)庫(kù)代碼,視圖(View)頁(yè)面設(shè)計(jì)代碼,控制器(Controller)表示導(dǎo)航代碼。所有這些使struts 2成為java web應(yīng)用的基本框架。

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

          Struts 2 的MVC架構(gòu)

          • 控制器:控制器由核心過(guò)濾器StrutsPrepareAndExecuteFilter、若干攔截器和Action組件實(shí) 現(xiàn)

          • 模型:模型由JavaBean或是JOPO實(shí)現(xiàn),它可實(shí)現(xiàn)業(yè)務(wù)邏輯

          • 視圖:通常由JSP頁(yè)面實(shí)現(xiàn),也可以由Velocity Template、FreeMarke或其他表示層技術(shù)實(shí) 現(xiàn)

          • 配置文件:Struts 2 框架提供一個(gè)名為struts.xml的配置文件,使用它來(lái)配置應(yīng)用程序中組 件

          • Struts 2 標(biāo)簽:Struts 2 提供了一個(gè)強(qiáng)大的標(biāo)簽庫(kù),該標(biāo)簽庫(kù)提供了大量的標(biāo)簽,使用這些 標(biāo)簽可 以簡(jiǎn)化JSP頁(yè)面的開(kāi)發(fā)

          下載標(biāo)簽庫(kù)

          這一步基本事可以省略的,因?yàn)榇蠖鄶?shù)的環(huán)境若是支持Struts 2 的話應(yīng)該會(huì)自帶它的標(biāo)簽庫(kù)。

          在web.xml 中添加過(guò)濾器

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

          創(chuàng)建struts.xml配置文件

          Struts 2 的每一個(gè)應(yīng)用程序都有一個(gè)配置文件struts.xml,該文件用來(lái)指定動(dòng)作類(lèi)關(guān)聯(lián)的類(lèi)、執(zhí)行的方法以及執(zhí)行的結(jié)果等。在開(kāi)發(fā)環(huán)境下配置文件應(yīng)該保存在src目錄中,Web應(yīng)用打包后保存在WEB-INF\classes目錄中。


          實(shí)戰(zhàn)簡(jiǎn)單小程序

          我用的環(huán)境是myeclipse10

          創(chuàng)建一個(gè)向客戶(hù)發(fā)送一條信息的應(yīng)用程序,完成下面三步:1.創(chuàng)建一個(gè)Action類(lèi)執(zhí)行某種操作;2.創(chuàng)建一個(gè)JSP頁(yè)面表示消息;3.在struts.xml文件中建立Action類(lèi)與視圖的映射。

          • 1 創(chuàng)建Action動(dòng)作類(lèi)

          該頁(yè)面的動(dòng)作是用戶(hù)單擊HTML頁(yè)面中的超鏈接向web服務(wù)器發(fā)送以惡搞請(qǐng)求。動(dòng)作類(lèi)execute()被執(zhí)行并返回SUCCESS結(jié)果。Struts根據(jù)該結(jié)果返回一個(gè)視圖頁(yè)面。

          HelloUserAction.java


          package com.Model;

          import com.opensymphony.xwork2.ActionSupport;

          public class HelloUserAction extends ActionSupport {

          private String message; //動(dòng)作類(lèi)的屬性

          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(),在其中調(diào)用set Message()設(shè)置message屬性值,然后返回字符串常量SUCCESS。該常量繼承了Action接口。*/

          • 2 創(chuàng)建視圖頁(yè)面

            用戶(hù)動(dòng)作是通過(guò)index.jsp頁(yè)面的超鏈接觸發(fā)的。

            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>

            該頁(yè)面中使用了Struts 2 的標(biāo)簽,要使用此標(biāo)簽應(yīng)該使用taglib指令導(dǎo)入標(biāo)簽庫(kù):

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

          預(yù)覽效果

          下面創(chuàng)建JSP頁(yè)面hellouser.jsp來(lái)顯示HelloUserAction動(dòng)作類(lèi)的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>

          頁(yè)面中<s:property >標(biāo)簽顯示HelloUserAction動(dòng)作類(lèi)的message的屬性值。通常在value屬性中的message告訴struts框架調(diào)用動(dòng)作類(lèi)的getMessage()。

          • 3 修改struts。xml配置文件

            struts.xml 文件用來(lái)配置請(qǐng)求動(dòng)作、Action類(lèi)和結(jié)果視圖之間的聯(lián)系。它通過(guò)映射來(lái)告訴Struts 2使用哪個(gè)Action類(lèi)響應(yīng)用戶(hù)的動(dòng)作,執(zhí)行哪個(gè)方法,根據(jù)方法返回字符串用哪個(gè)視圖。

            編輯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之后

          總結(jié)

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

          不喜歡打廣告,有緣下次再見(jiàn)!


          主站蜘蛛池模板: 国产精品女同一区二区| 国产一区二区高清在线播放| 国产伦精品一区三区视频| 99偷拍视频精品一区二区| 国产精品亚洲一区二区三区在线| 在线电影一区二区三区| 国产一区二区三区91| 国产成人高清视频一区二区| 在线观看日本亚洲一区| 国产视频一区在线观看| 成人无码AV一区二区| 色婷婷AV一区二区三区浪潮| 国产一区二区三区内射高清| 国精产品一区一区三区有限公司| 人妻AV中文字幕一区二区三区| 中文字幕一区在线观看| 亚洲国产综合精品一区在线播放| 天码av无码一区二区三区四区 | 久久国产免费一区二区三区| 亚洲国产综合无码一区二区二三区 | 午夜福利一区二区三区高清视频| 久久国产精品免费一区二区三区| 色一情一乱一伦一区二区三区| 日韩视频在线一区| 国产成人av一区二区三区在线| 国产女人乱人伦精品一区二区 | 日本精品夜色视频一区二区| 日韩一区二区三区免费播放| 国产精品亚洲高清一区二区| 中文字幕日韩人妻不卡一区| 国模私拍一区二区三区| 日韩人妻一区二区三区蜜桃视频| 中文字幕一区二区精品区| 69久久精品无码一区二区| 日本国产一区二区三区在线观看| 日韩aⅴ人妻无码一区二区| 一区 二区 三区 中文字幕| 国产日韩AV免费无码一区二区| 一区二区视频在线播放| 在线播放偷拍一区精品| 免费一区二区视频|