整合營銷服務商

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

          免費咨詢熱線:

          Javascript 中的非空判斷 undefined,null, NaN的區別

          介紹這三個之間的差別之前, 先來看一下JS 的數據類型。

          在 Java ,C這樣的語言中, 使用一個變量之前,需要先定義這個變量并指定它的數據類型,是整型,字符串型,....

          但是在js 中定義變量統一使用 var , 或者不使用var 也可以使用。

          那么js 中是否有數據類型的概念呢? 當然有, 使用 typeof 就可以判斷這個變量的數據類型:

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

          <HTML>

          <HEAD>

          <TITLE> New Document </TITLE>

          <META NAME="Author" CONTENT="oscar999">

          <script>

          s = "This is Test";

          alert(typeof(s));

          </script>

          </HEAD>

          <BODY>

          </BODY><br></HTML>

          以上例子彈出的值是 "string", 由此可以看出, js 也是有數據類型的。

          js中的數據類型有undefined,boolean,number,string,object等5種,前4種為原始類型,第5種為引用類型。

          原始類型和引用類型有什么區別?引用的概念其他語言的引用很類似, 就是一個地址。看一下這個例子就知道了。

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

          <HTML>

          <HEAD>

          <TITLE> New Document </TITLE>

          <META NAME="Author" CONTENT="oscar999">

          <script>

          var obj = new Object();

          var objCopy = obj;

          obj.att1 = "obj attribute";

          alert(objCopy.att1);

          </script>

          </HEAD>

          <BODY>

          </BODY>

          </HTML>

          別忽略了object 類型的這種特性哦, 這個是會被經常誤用的地方。類似上面的obj的改變引起了objCopy的改變。

          除了以上5 中類型之外, 還有一種 “function”的類型。

          <!--Add by oscar999-->

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

          <HTML>

          <HEAD>

          <TITLE> New Document </TITLE>

          <META NAME="Author" CONTENT="oscar999">

          <script>

          function test()

          {

          alert("hello");

          }

          alert(typeof(test));

          </script>

          </HEAD>

          <BODY>

          </BODY>

          </HTML>

          undefined 和 null, NaN 的區別

          有了上面的介紹,就可以很容易把undefined 和其他的兩個區分開來。

          undefined判斷的是變量的類型,而其他兩個判斷是變量的值。

          undefined可以用來表示以下的狀況

          1. 表示一個未聲明的變量,

          2. 已聲明但沒有賦值的變量,

          3. 一個并不存在的對象屬性

          null 是一種特殊的object ,表示無值;

          NaN是一種特殊的number ,表示無值;

          比較符(== 或 ===)

          使用 == ,如果兩邊的類型不同, js 引擎會先把它們轉成相同的類型在進行值的比較;

          使用 ===, 則不會進行類型轉換,類型不同,肯定不相等。

          實例

          有了以上的知識,再來看下面一些有意思卻容易混淆的例子應該就很清晰了:

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

          <HTML>

          <HEAD>

          <TITLE> New Document </TITLE>

          <META NAME="Author" CONTENT="oscar999">

          <script>

          var s;

          alert(s==undefined); //true

          alert(s===undefined); //true

          alert(s==null); //true

          alert(s===null); //false

          alert(null==undefined); //true

          alert(null===undefined); //false

          </script>

          </HEAD>

          <BODY>

          </BODY>

          </HTML>

          把var s 改成 var s = null 再看看效果~~

          一般情況下, 對js 某個變量s 判空習慣使用 if(s!=null) , 如果s 沒有定義的話,就會報undefined的js 錯誤, 所以完整的判空可以使用如下方式:

          if(typeof(s)!="undefined"&&s!=null)



          enkins常用Variable

          • 項目名稱:$PROJECT_NAME
          • 構建編號:$BUILD_NUMBER
          • 構建狀態:$BUILD_STATUS
          • 觸發原因:${CAUSE}
          • 構建日志地址:${BUILD_URL}
          • 構建地址:$BUILD_URL
          • 變更集:${JELLY_SCRIPT,template="html"}

          全局屬性詳解

          • Override Global Settings:如果不選,該插件將使用默認的E-mail Notification通知選項。反之,您可以通過指定不同于( 默認選項)的設置來進行覆蓋。
          • Default Content Type:指定構建后發送郵件內容的類型,有Text和HTML兩種.
          • Use List-ID Email Header:為所有的郵件設置一個List-ID的郵件信頭,這樣你就可以在郵件客戶端使用過濾。它也能阻止郵件發件人大部分的自動回復(諸如離開辦公室、休假等等)。你可以使用你習慣的任何名稱或者ID號,但是他們必須符合如下其中一種格式(真實的ID必須要包含在<和>標記里):
          <ci-notifications.company.org>
            Build Notifications <ci-notifications.company.org>
             Build Notifications” <ci-notifications.company.org>
          • Add 'Precedence: bulk' Email Header:設置優先級.
          • Default Recipients:自定義默認電子郵件收件人列表。如果沒有被項目配置覆蓋,該插件會使用這個列表。您可以在項目配置使用$ DEFAULT_RECIPIENTS參數包括此默認列表,以及添加新的地址在項目級別。添加抄送:cc:電子郵件地址例如,CC:someone@somewhere.com
          • Reply To List:回復列表, 使用“,”對郵件地址進行分割.在Jenkins中可以使用 $DEFAULT_REPLYTO 訪問郵件列表.
          • Emergency reroute:如果這個字段不為空,所有的電子郵件將被單獨發送到該地址(或地址列表)。
          • Excluded Committers:防止郵件被郵件系統認為是垃圾郵件,郵件列表應該沒有擴展的賬戶名(如:@domain.com),并且使用逗號分隔
          • Default Subject:自定義郵件通知的默認主題名稱。該選項能在郵件的主題字段中替換一些參數,這樣你就可以在構建中包含指定的輸出信息。
          • Maximum Attachment Size:郵件最大附件大小。
          • Default Content:自定義郵件通知的默認內容主體。該選項能在郵件的內容中替換一些參數,這樣你就可以在構建中包含指定的輸出信息。
          • Default Pre-send Script:默認發送前執行的腳本(注:grooy腳本,這是我在某篇文章上看到的,不一定準確)。
          • Enable Debug Mode:啟用插件的調試模式。這將增加額外的日志輸出,構建日志以及Jenkins的日志。在調試時是有用的,但不能用于生產。
          • Enable Security:啟用時,會禁用發送腳本的能力,直接進入Jenkins實例。如果用戶試圖訪問Jenkins管理對象實例,將拋出一個安全異常。
          • Content Token Reference:郵件中可以使用的變量,所有的變量都是可選的。具體介紹請查看全局郵件變量章節。

          全局郵件變量

          email-ext插件允許使用變量來動態插入數據到郵件的主題和內容主體中。變量是一個以$(美元符號)開始,并以空格結束的字符串。當一個郵件觸發時,主題和內容主體字段的所有變量都會通過真實的值動態地替換。同樣,變量中的“值”能包含其它的變量,都將被替換成真實的內容。

          比如,項目配置頁的默認主題和內容分別對應的是全局配置頁面的DEFAULT_SUBJECT和DEFAULT_CONTENT,因此它會自動地使用全局的配置。同理,觸發器中的Subject和Content分別對應的是項目配置頁面的DEFAULT_SUBJECT和DEFAULT_CONTENT,所以它也會自動地使用項目的配置。由于變量中的“值”能包含其它的變量,所以就能為變量快速地創建不同的切入點:全局級別(所有項目),專屬級別(單一項目),觸發器級別(構建結果)。

          如果你要查看所有可用的變量,你可以點擊配置頁的Content Token Reference的問號獲取詳細的信息。

          所有的變量都是可選的,每個變量可以如下表示,字符串類型使用name=“value”,而布爾型和數字型使用name=value。如果{和}標記里面沒有變量,則不會被解析。示例:$TOKEN,${TOKEN},${TOKEN,count=100},${ENV,var=”PATH”}

          提示:用英文逗號分隔變量的參數。

          常用的屬性

          • ${FILE,path="PATH"} 包括指定文件(路徑)的含量相對于工作空間根目錄。
          • path文件路徑,注意:是工作區目錄的相對路徑。
          • ${BUILD_NUMBER} 顯示當前構建的編號。
          • ${JOB_DESCRIPTION} 顯示項目描述。
          • ${SVN_REVISION} 顯示svn版本號。還支持Subversion插件出口的SVN_REVISION_n版本。
          • ${CAUSE} 顯示誰、通過什么渠道觸發這次構建。
          • ${CHANGES } -顯示上一次構建之后的變化。
          • showPaths 如果為 true,顯示提交修改后的地址。默認false。
          • showDependencies 如果為true,顯示項目構建依賴。默認為false
          • format 遍歷提交信息,一個包含%X的字符串,其中%a表示作者,%d表示日期,%m表示消息,%p表示路徑,%r表示版本。注意,并不是所有的版本系統都支持%d和%r。如果指定showPaths將被忽略。默認“[%a] %m\n”。
          • pathFormat 一個包含“%p”的字符串,用來標示怎么打印路徑。
          • ${BUILD_ID}顯示當前構建生成的ID。
          • ${PROJECT_NAME} 顯示項目的全名。(見AbstractProject.getFullDisplayName)
          • ${PROJECT_DISPLAY_NAME} 顯示項目的顯示名稱。(見AbstractProject.getDisplayName)
          • ${SCRIPT} 從一個腳本生成自定義消息內容。自定義腳本應該放在"$JENKINS_HOME/email-templates"。當使用自定義腳本時會默認搜索$JENKINS_HOME/email-templatesdirectory目錄。其他的目錄將不會被搜索。
          • script 當其使用的時候,僅僅只有最后一個值會被腳本使用(不能同時使用script和template)。
          • template常規的simpletemplateengine格式模板。
          • ${JENKINS_URL} 顯示Jenkins服務器的url地址(你可以再系統配置頁更改)。
          • ${BUILD_LOG_MULTILINE_REGEX}按正則表達式匹配并顯示構建日志。
          • regex java.util.regex.Pattern 生成正則表達式匹配的構建日志。無默認值,可為空。
          • maxMatches 匹配的最大數量。如果為0,將匹配所有。默認為0。
          • showTruncatedLines 如果為true,包含[...truncated ### lines...]行。默認為true。
          • substText 如果非空,就把這部分文字(而不是整行)插入該郵件。默認為空。
          • escapeHtml 如果為true,格式化HTML。默認為false。
          • matchedSegmentHtmlStyle 如果非空,輸出HTML。匹配的行數將變為<b style=”your-style-value”> html escaped matched line </b>格式。默認為空。
          • ${BUILD_LOG} 顯示最終構建日志。
          • maxLines 日志最多顯示的行數,默認250行。
          • escapeHtml 如果為true,格式化HTML。默認false。
          • ${PROJECT_URL} 顯示項目的URL地址。
          • ${BUILD_STATUS} -顯示當前構建的狀態(失敗、成功等等)
          • ${BUILD_URL} -顯示當前構建的URL地址。
          • ${CHANGES_SINCE_LAST_SUCCESS} -顯示上一次成功構建之后的變化。
          • reverse在頂部標示新近的構建。默認false。
          • format遍歷構建信息,一個包含%X的字符串,其中%c為所有的改變,%n為構建編號。默認”Changes for Build #%n\n%c\n”。
          • showPaths,changesFormat,pathFormat分別定義如${CHANGES}的showPaths、format和pathFormat參數。
          • ${CHANGES_SINCE_LAST_UNSTABLE} -顯示顯示上一次不穩固或者成功的構建之后的變化。
          • reverse在頂部標示新近的構建。默認false。
          • format遍歷構建信息,一個包含%X的字符串,其中%c為所有的改變,%n為構建編號。默認”Changes for Build #%n\n%c\n”。
          • showPaths,changesFormat,pathFormat分別定義如${CHANGES}的showPaths、format和pathFormat參數。
          • ${ENV} –顯示一個環境變量。
          • var– 顯示該環境變量的名稱。如果為空,顯示所有,默認為空。
          • ${FAILED_TESTS} -如果有失敗的測試,顯示這些失敗的單元測試信息。
          • ${JENKINS_URL} -顯示Jenkins服務器的地址。(你能在“系統配置”頁改變它)。
          • ${HUDSON_URL} -不推薦,請使用$JENKINS_URL
          • ${PROJECT_URL} -顯示項目的URL。
          • ${SVN_REVISION} -顯示SVN的版本號。
          • ${JELLY_SCRIPT} -從一個Jelly腳本模板中自定義消息內容。有兩種模板可供配置:HTML和TEXT。你可以在$JENKINS_HOME/email-templates下自定義替換它。當使用自動義模板時,”template”參數的名稱不包含“.jelly”。
          • template模板名稱,默認”html”。
          • ${TEST_COUNTS} -顯示測試的數量。
          • var– 默認“total”。
          • total -所有測試的數量。
          • fail -失敗測試的數量。
          • skip -跳過測試的數量。

          加事件之前驗證表單的文本框是否非空,并且只有在驗證通過時才調用添加函數,你可以采用前端JavaScript進行簡單的表單驗證。

          <form id="dataForm" onsubmit="return validateForm()">
              <div>
                  <label >標題:</label>
                  <input type="text" id="titleInput" name="title" required>
              </div>
              <div>
                  <label >內容:</label>
                  <input type="text" id="content" name="content" required>
              </div>
              <button type="button" onclick="add()">添加數據</button>
          </form>

          form標簽中添加onsubmit="return validateForm()"

           function validateForm() {
                  var username = document.getElementById("titleInput").value;
                  var email = document.getElementById("content").value; // 假設還有一個email文本框
                  // 檢查是否都不為空
                  if (username.trim() === "" || email.trim() === "") {
                      alert("不能為空,請填寫后再提交。");
                      return false; // 阻止表單提交或事件繼續
                  }
                  return true; // 如果驗證通過,則允許執行后續操作
              }

          驗證文本框非空的JS代碼:如果驗證失敗(即輸入框為空),validateForm函數會返回false,阻止表單提交;如果驗證通過,則返回true,允許表單提交。

              function createEditor() {
                  // 以下為添加數據的JS代碼
              }

          添加數據的JS代碼

          function add() {
                  if(validateForm()){
                      createEditor();
                  }
          }

          validateForm函數返回True時,提交數據添加。


          主站蜘蛛池模板: 日本在线视频一区| 国产高清精品一区| 一区二区3区免费视频| 国产成人无码AV一区二区在线观看 | 久久se精品一区二区| 日本高清无卡码一区二区久久| 亚洲香蕉久久一区二区| 亚洲一区二区女搞男| 国产综合一区二区在线观看| 日韩精品一区二区午夜成人版| 免费看AV毛片一区二区三区| 亚洲色精品三区二区一区| 国产成人精品日本亚洲专一区| 无码国产精品一区二区免费16| 亚洲色婷婷一区二区三区| 成人区人妻精品一区二区不卡视频 | 亚洲国产一区二区三区在线观看 | 国产精品一区电影| 在线|一区二区三区| 大香伊蕉日本一区二区| 无码人妻精品一区二区三区久久久| 亚洲国产成人久久综合一区 | 中文字幕在线观看一区| 久久亚洲色一区二区三区| 日韩AV无码一区二区三区不卡毛片 | 色视频综合无码一区二区三区| 国产麻豆媒一区一区二区三区| 国产亚洲福利一区二区免费看| 美女AV一区二区三区| 无码精品人妻一区二区三区影院 | 国产成人一区二区三区高清| 国产精品伦子一区二区三区| 波多野结衣一区二区三区88| 国产AV国片精品一区二区| 国产伦理一区二区| 久久毛片一区二区| 日韩一区二区三区免费播放| 中文字幕一区二区三区日韩精品| 性无码免费一区二区三区在线| 国产成人一区二区三中文| 国产免费一区二区三区VR|