JS代碼中踩過的坑

来源:https://www.cnblogs.com/webxu20180730/archive/2018/08/01/9404632.html
-Advertisement-
Play Games

2018年8月1日 廣州 這幾天在學JS基礎語句,練習中出現一些錯誤,開始往往都不知道問題出在哪。調試代碼找錯誤往往最費時間,所以告訴自己拿到一個題,最好先拿出紙筆,仔細想想命題實現的邏輯,在紙上簡單寫粗略的代碼,大致驗證下邏輯。這樣避免在機上修改代碼更好,因為代碼里語句和變數改來改去,總會遺漏,或 ...


2018年8月1日  

  這幾天在學JS基礎語句,練習中出現一些錯誤,開始往往都不知道問題出在哪。調試代碼找錯誤往往最費時間,所以告訴自己拿到一個題,最好先拿出紙筆,仔細想想命題實現的邏輯,在紙上簡單寫粗略的代碼,大致驗證下邏輯。這樣避免在機上修改代碼更好,因為代碼里語句和變數改來改去,總會遺漏,或者錯刪了什麼符號導致本來對的邏輯硬是沒有結果輸出。

  然後,把這幾天練題過程中出現的坑,羅列記錄下,如果不記,以後如果不是經常寫到這個點,估計又忘了。

 

  一、用戶從鍵盤輸入的值都為字元類型,所以如果要求用輸入的值參與+加法計算,最好將輸入值類型轉化成數據類型。   

 1 <!DOCTYPE html>
 2 <html lang="zh">
 3 <head>
 4     <meta charset="UTF-8" />
 5     <title>測試</title>
 6 </head>
 7 <body>
 8     <script>
 9         var num = prompt("請輸入一個數字");
10         num +=1;
11         console.log(num);
12         console.log(typeof num );
13     </script>
14 </body>
15 </html>

輸出結果: 11  string

所以在聲明賦值語句改為:var num = parseInt( prompt( "請輸入一個數學“));

關於數據類型轉化,馬上會單獨寫一篇內容。

 

  二、聲明變數時要初始化,不然變數預設賦值undefined,也無法參與計算,導致計算出錯。

  JS高程里也強調過,養成聲明變數即初始化的良好代碼習慣。ECMAscript 3 中加入undefined類型就是為了區別null 和未經初始化的變數。變數未聲明即使用,雖然制台會報錯,但用typeof檢測時,返回值也是undefined。這樣就等於typeof檢測一個未聲明的變數和聲明後未初始化的變數,返回值都是undefined。但如果自己有良好的代碼聲明習慣,聲明變數就進行初始化,那後續變數類型檢測返回undefined時,自己會第一想到是變數未聲明的問題。

 1 <!DOCTYPE html>
 2 <html lang="zh">
 3 <head>
 4     <meta charset="UTF-8" />
 5     <title>測試</title>
 6 </head>
 7 <body>
 8     <script>
 9             var num = parseInt(prompt("請任意輸入一個整數:"));
10             var sum; 
11             for (var i = 1; i<=num; i++) {
12                 sum +=i;//等同於sum=sum+i
13             }
14             console.log("從1累加到"+num+"的總和是:"+sum);
15         </script>-->
16 </body>
17 </html>

結果:從1累加到9的總和是:NaN    因為 sum = undefined + 1 等於NaN。後面累加也是NaN。

如果上面代碼對sum變數不聲明,則控制台報錯:

<script>
    var num = parseInt(prompt("請任意輸入一個整數:"));
    //var sum; 
    for (var i = 1; i<=num; i++) {
        sum +=i;//等同於sum=sum+i
    }
    console.log("從1累加到"+num+"的總和是:"+sum);
</script>

 

  三、明確自己聲明變數的作用區域。

  雖然JS高程中建議我們變數統一在開頭聲明,但代碼段寫到時候往往已經記不清楚這個變數最初設置的作用啦,而順著思路用上啦。在迴圈語句中我們寫代碼時順著的思路的只是賦值一個參數時的代碼執行順序,當代碼再次迴圈第二次或多次時,應該註意的變數值就會容易忘掉。

  自己今天在”完美數“這個題目迴圈時因為變數值聲明和賦值在外面,導致迴圈遍歷一個新數時,中轉變數一直都是存在之前的值,導致結果不對。

 1 <script>
 2     //犯錯誤把var放在最外面聲明瞭,這樣第一層for每次重新判斷一個新數時,temp沒法清空值。導致沒有輸出結果。
 3     //放在第一for里,重新判斷新數時就會重新被聲明賦值0;
 4 
 5     //var temp = 0;
 6     for (var num1 = 2 ; num1 <= 10000 ; num1++){
 7         var temp = 0;
 8         for (var num2 = 1 ; num2 < num1 ; num2++){
 9             num1%num2 === 0 ? temp = temp +num2 :false;
10         }
11         temp === num1 ? console.log(num1) : false;
12     }
13 </script>

後面還掉坑裡,再更新...........

 

   


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 第一步 添加協議 第二步 添加選擇方式 第三步 ...
  • Fragment 1 切換到 Fragment 2時生命周期變化 1、通過 add hide show 方式來切換 Fragment Fragment1 的生命周期變化為:onCreate()、onCreateView、onStart()、onResume() 回調 onHiddenChanged( ...
  • 在Xcode的控制台里直接列印一個數組或者字典,輸出的都是一些Unicode的編碼,不方便調試. 要想看到中文,則要去獲取對應的key或者數組下標.得到具體某一個對象才能看到中文,給我們調試起來很不方便. 而現在可以使用LYLUnicode輸出中文, 使用也方便.代碼也簡潔,就幾行代碼. 直接把LY ...
  • js:(使用jquery) 頁面效果: ...
  • 一,效果圖。 二,代碼。 參考資料:《菜鳥教程》 ...
  • 目標 1. 常用數據類型 2. 基本語法 3. 變數的定義與賦值 4. 數據類型與轉換 5. 邏輯控制語句 6. 條件語句 7. 迴圈語句 8. 函數定義 基本語法 變數 變數名以字母或下劃線("_")開頭 變數可以包含數字、從 A 至 Z 的大小寫字母 JavaScript 區分大小寫 變數的聲明 ...
  • 1、系統主題選擇 “ 文件 → 首選項 → 顏色主題” 快捷鍵:[ Ctrl+K Ctrl+T ] 2、安裝主題 [ Ctrl+K Ctrl+M ] 打開擴展,搜索 theme,選擇安裝 點擊“重新載入” 3、“ 文件 → 首選項 → 設置” 輸入“ workbench.colorTheme ” 換 ...
  • ajax ajax是一種技術方案,但並不是一種新技術。它依賴的是現有的CSS/HTML/Javascript,而其中最核心的依賴是瀏覽器提供的XMLHttpRequest對象,是這個對象使得瀏覽器可以發出HTTP請求與接收HTTP響應。 實現在頁面不刷新的情況下和服務端進行數據交互。 作用:傳統的網 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...