主頁 > 企業開發 > JavaScript 基礎入門

JavaScript 基礎入門

2020-10-19 04:37:14 企業開發

JavaScript 基礎入門

   JavaScript 的組成

    JS 由三部分組成,它們分別是:ECMAScript、DOM、BOM.

    ECMAScript

        因為網景開發了JavaScript,一年后微軟又模仿JavaScript開發了JScript,為了讓JavaScript成為全球標準,幾個公司聯合ECMA(European Computer Manufacturers Association)組織定制了JavaScript語言的標準,被稱為ECMAScript標準,

    DOM

        檔案物件模型(Document Object Model),DOM把整個頁面映射成一個多層節點結構,HTML 頁面組成都是某種型別的節點,這些及節點又包含著不同型別的資料,

    BOM

        瀏覽器物件模型(Browser Object Model),可以訪問瀏覽器視窗的 BOM,對瀏覽器視窗進行操作,

    ECMAScript、DOM、BOM 之間的關系

        ECMAScript 是用來操作平臺或者運行平臺上頁面的工具,它構成了 JS 核心的語法基礎,

      DOM 是運行在平臺上的頁面,用來操作網頁中的元素,

      BOM 是運行平臺,BOM 的規則(語法)是建立在 ECMAScript 的規則之上,用來操作瀏覽器上的物件,

    JavaScript 和 ECMAScript 規范

         JavaScript 的標準化組織是 ECMA ——這個歐洲資訊與通信系統標準化協會提供基于 Javascript 的標準化方案(ECMA 原先是歐洲計算機制造商協會的首字母縮寫),這種標準化版本的 JavaScript 被稱作 ECMAScript,在所有支持該標準的應用中以相同的方式作業,公司可以使用開放標準語言來開發他們自己的 JavaScript 實作版本,ECMAScript 標準在ECMA-262規范中進行檔案化,

      ECMA-262 標準也通過了 國際標準化組織(ISO)的 ISO-16262,你可以在這里找到該規范檔案, ECMAScript 規范并沒有描述檔案物件模型(DOM),該模型由 萬維網聯盟(W3C) 制定,DOM 定義了HTML檔案物件被腳本操作的方法,  

    JavaScript 文獻 和 ECMAScript 規范

         ECMAScript 規范是實作 ECMAScript 的一組需求;如果你想在 ECMAScript 實作或引擎(如Firefox 中的 SpiderMonkey 或 Chrome 中的 V8)中實作符合標準的語言特性,那么它是非常有用的,

       ECMAScript 檔案不是用來幫助腳本程式員的;使用 JavaScript 檔案獲取關于撰寫腳本的資訊,

       ECMAScript 規范使用了 JavaScript 程式員可能不熟悉的術語和語法,盡管 ECMAScript 中對語言的描述可能有所不同,但語言本身保持不變,JavaScript 支持 ECMAScript 規范中列出的所有功能,

       JavaScript 檔案描述了適合 JavaScript 程式員的語言方面,

  JavaScript 代碼位置

      內部 JavaScript

1 <script>
2     // 在此撰寫 JavaScript 代碼
3 </script>

         內部 JavaScript 通常寫在 </body> 后面;或者<body></body>里面;再或者寫在<head></head>中,比如:

1 <head>
2 window.onload = function () {
3   // 在此撰寫 JavaScript 代碼
4 }
5 </head>

      推薦將 JS 代碼寫在</body>后面或者<head>標簽中,因為如果將 JS 代碼寫在<body>中,那么當瀏覽器加載時,會按照從上到下的順序決議代碼,加載完 JS 代碼時,HTML 還沒有載入,會破壞頁面的渲染效果,JS 代碼無法實作與 HTML 的互動行為,

  外部 JavaScript

         將外部的 JS 檔案引入當前頁面,類似于引入外部 CSS 檔案,代碼如下:

1 <script src="https://www.cnblogs.com/jackpotmxx/p/script.js"></script>

      這種方式是最好的,優點如下:

        1. 可維護性:遍及不同 HTML 頁面的 JavaScript 會造成維護問題,但把所有 JS 檔案都放在一個檔案夾中維護起來就輕松多了,而且開發人員因為也能夠在不觸及 HTML 標記的情況下集中精力撰寫 JS 代碼

      2. 可快取:瀏覽器能夠根據具體的設定快取鏈接的所有外部 JS 檔案,也就是說,如果有2個頁面都使用同一個檔案,那么這個檔案只需下載一次,因此,最終結果就是能夠加快頁面加載速度,

      3.  適應未來:通過外部檔案包含 JS 無需使用 XHTML 或 hack 注釋,HTML 和 XHTML 包含外部檔案的語法是相同的,

   行內 JavaScript 處理器

         示例:

1 <button onclick="createParagraph()">點我呀</button>

        強烈不推薦這樣撰寫 JS 代碼,這將使 JavaScript 污染到 HTML,而且效率低下,

    這三者中,一般在練習中使用內部 JavaScript,實際開發中使用 外部 JavaScript,幾乎不使用 行內 JavaScript 處理器,

   JavaScript 中的大小寫

      JS 是區分大小寫的,并使用 Unicode 字符集,如:

var a = 10;
var A = 11;

console.log(a);
console.log(A);

/*
   結果為
   10
   11
   由此可見,a 和 A 并不是同一個變數    
*/

  JavaScript 中的注釋

      就像 HTML 和 CSS,JavaScript 代碼中也可以添加注釋,瀏覽器會忽略它們,注釋只是為你的同事(還有你,如果半年后再看自己寫的代碼你會說,這是什么垃圾玩意,)提供關于代碼如何作業的指引,注釋非常有用,而且應該經常使用,尤其在大型應用中,注釋分為兩類:

      在雙斜杠后添加單行注釋,比如:

// 啦啦啦,我是注釋~~~

      在 /* 和 */ 之間添加多行注釋,比如:

/* 
   多行注釋1
   多行注釋2
   多行注釋3 
*/

  JavaScript 代碼執行順序

      當瀏覽器執行到一段 JS 代碼時,通常會按照 從上到下,從左往右 的順序執行代碼,比如:

 1 var a = 10;
 2 var b = 11;
 3 console.log(a);
 4 console.log(b);
 5 console.log(a + b);
 7 /* 
 8    控制臺顯示的結果為:
 9    10
10    11       
11    21     
12 */

  JavaScript 陳述句

      JS 當中的陳述句表示 JS 向宿主環境發送的命令,

    例如下面的陳述句是向控制臺中輸出計算 10 + 2 的結果,

console.log(10 + 2); // 在每一條陳述句的后面都帶有一個分號,表示陳述句結束

      當然 JS 允許我們將分號省掉,但是無論是從代碼的維護成本還是其他因素考慮,都不建議將每條陳述句后面的分號省略掉,

           需要注意的是,如果分號前面的陳述句為空,則沒有意義,

  JavaScript 的輸出方式

      兩種輸出方式

// 第一種
console.log();

// 第二種
document.write();

      console.log(); 是將資料輸出到瀏覽器的控制臺中,一般用來除錯 JS 代碼

      document.write(): 是將資料輸出到網頁的頁面中,此方式可以直接決議標簽,如:

document.write(<strong>內容</strong>);

      我們通常將 console.log(); 這種輸出代碼的形式稱之為 代碼列印

      并且,我們一般使用 console.log(); 來列印資料 而不是 document.write(); ,因為后者會影響頁面布局,某些情況下,后者甚至會覆寫頁面,

  JavaScript 中的運算式

      一般情況下,運算式需要得到一個結果

      例如 11 + 3 就是一個運算式,我們在創建這個運算式的時候,就希望得到 11 + 3 的結果

console.log(11 + 3); // 將 11 + 3 的結果 列印到瀏覽器的控制臺中  

  JavaScript 的彈窗

      JS 中的彈窗有三種方式,它們分別是:

// 第一種,警告對話框,只有確認鍵
alert(); 
    // 沒有回傳值,回傳 undefined; 不同的瀏覽器,顯示不同

// 第二種,模態對話框(確認框),有確認件和取消鍵
confirm(); 
    // 回傳 Boolean 型別:true、false  表示選擇確定還是取消

// 第三種,對話框,對話框中包含一條文字資訊,用來提示用戶輸入文字,有確認鍵和取消鍵以及輸入框
prompt(); 
    // 如果文本輸入框中為空,則回傳一個空字串,如果用戶點擊"取消"按鈕,則回傳null

      注意事項:

          alert 對話框使用在無需用戶確認的情況下,否則應該使用其他型別的對話框

     confirm 對話框是彈出式,直到這個對話框被點擊后, 后面的腳本才會運行. 請勿濫用此功能

     prompt 和 alert 以及類似的對話框都是模態視窗,它們會阻止用戶激活程式其他部分的界面,直到該對話框關閉,因此,你不應該過度使用該方法,

查找并解決 JavaScript 代碼的錯誤

  錯誤型別

        一般來說,代碼錯誤主要分為兩種:

        語法錯誤代碼中存在拼寫錯誤,將導致程式完全或部分不能運行,通常你會收到一些出錯資訊,只要熟悉語言并了解出錯資訊的含義,你就能夠順利修復它們,

            邏輯錯誤:有些代碼語法雖正確,但執行結果和預期相悖,這里便存在著邏輯錯誤,這意味著程式雖能運行,但會給出錯誤的結果,由于一般你不會收到來自這些錯誤的提示,它們通常比語法錯誤更難修復,

  解決 BUG 的方法

       以下是幾種常見的 bug 形式

         有報錯

        當在控制臺中看到報錯資訊時,我們要觀看它報的什么錯,一般來說,我們可以很直觀的看到報錯資訊,如:

Cannot set property 'onclick' of null
// 不是onc1ick為nu11,是onclick不能加給nu1l

xxx is not defined
// xxx 未定義

          有報錯但是代碼沒有問題

        解決方法:反向查找

      發生這種情況時,我們要觀看報錯資訊,如果在報錯資訊中沒有找到來源,我們要根據報錯的變數,向上逐步查找來源,如果沒有找到,那就繼續向上查找,

          沒有報錯,沒有結果

          解決方法:反向查找

          解決方法:

        解決 bug 的通用方式

       使用 console.log("1"); 

     將 console.log("1"); 逐行使用,哪行代碼列印不出來,哪行就出現了問題(最好的方式是,將 "1" 換位當前測驗行的變數名,同時,變數名不要手寫,而是將當前變數名 copy 一下)

          定位 bug 資訊的工具(工具幫助找到定位 bug 的資訊)

          打斷點:讓瀏覽器逐行執行代碼

          1. 使用 JS 提供的關鍵字:debugger (debugger要配合控制臺使用)

        2. 使用瀏覽器提供的控制臺 sources,在 sources 選項中找到要需要斷點的檔案,點擊要進行斷點的行號,之后一步步執行,

          以下有幾種常見的錯誤型別

     SyntaxError: missing ; before statement (語法錯誤:陳述句缺少分號)

         這個錯誤通常意味著你漏寫了一行代碼最后的分號,但是此類錯誤有時候會更加隱蔽,例如如果我們把 checkGuess() 函式中的這一行 :

let userGuess = Number(guessField.value);
// 改成
let userGuess === Number(guessField.value);

      將拋出一個錯誤,因為系統認為你在做其他事情,請不要把賦值運算子(=,為一個變數賦值)和嚴格等于運算子(===,比較兩個值是否相等,回傳 true/false)弄混淆,

    SyntaxError: missing) after argument list (語法錯誤:引數表末尾缺少括號)

         顧名思義:此錯誤通常意味著 函式 or 方法 呼叫或的結束括號忘寫了,

    SyntaxError: missing: after property id (語法錯誤:屬性 ID 后缺少冒號)

        JS 物件的形式有錯時通常會導致此類錯誤,如:

function checkGuess() {
//寫成了
function checkGuess( {

        瀏覽器會認為我們試圖將函式的內容當作引數傳回函式,寫圓括號時要小心!

    SyntaxError: missing} after function body (語法錯誤:函式末尾缺少花括號)

        通常意味著函式或條件結構中丟失了一個花括號,如果我們將 checkGuess() 函式末尾的花括號洗掉,就會得到這個錯誤,

    SyntaxError: expected expression, got'string' (語法錯誤:得到一個 'string' 而非運算式)

    ↑↑↑↑↑↑ 或者 ↓↓↓↓↓↓

    SyntaxError: unterminated string literal (語法錯誤:字串字面量未正常結束)

        這個錯誤通常意味著字串兩端的引號漏寫了一個,如果你漏寫了字串開始的引號,將得到第一條出錯資訊,這里的 'string' 將被替換為瀏覽器發現的意外字符,如果漏寫了末尾的引號將得到第二條,

    Notes: 錯誤出現時,轉到錯誤所在的行觀察是否能發現問題所在,記住,錯誤不一定在那一行,甚至可能是由某個不相關的問題造成的!

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/179490.html

標籤:JavaScript

上一篇:松軟科技web課堂:JavaScript Math 物件

下一篇:js 獲取陣列最后一個元素

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • 使用Django Rest framework搭建Blog

    在前面的Blog例子中我們使用的是GraphQL, 雖然GraphQL的使用處于上升趨勢,但是Rest API還是使用的更廣泛一些. 所以還是決定回到傳統的rest api framework上來, Django rest framework的官網上給了一個很好用的QuickStart, 我參考Qu ......

    uj5u.com 2023-04-20 08:17:54 more
  • 記錄-new Date() 我忍你很久了!

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 大家平時在開發的時候有沒被new Date()折磨過?就是它的諸多怪異的設定讓你每每用的時候,都可能不小心踩坑。造成程式意外出錯,卻一下子找不到問題出處,那叫一個煩透了…… 下面,我就列舉它的“四宗罪”及應用思考 可惡的四宗罪 1. Sa ......

    uj5u.com 2023-04-20 08:17:47 more
  • 使用Vue.js實作文字跑馬燈效果

    實作文字跑馬燈效果,首先用到 substring()截取 和 setInterval計時器 clearInterval()清除計時器 效果如下: 實作代碼如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta ......

    uj5u.com 2023-04-20 08:12:31 more
  • JavaScript 運算子

    JavaScript 運算子/運算子 在 JavaScript 中,有一些運算子可以使代碼更簡潔、易讀和高效。以下是一些常見的運算子: 1、可選鏈運算子(optional chaining operator) ?.是可選鏈運算子(optional chaining operator)。?. 可選鏈操 ......

    uj5u.com 2023-04-20 08:02:25 more
  • CSS—相對單位rem

    一、概述 rem是一個相對長度單位,它的單位長度取決于根標簽html的字體尺寸。rem即root em的意思,中文翻譯為根em。瀏覽器的文本尺寸一般默認為16px,即默認情況下: 1rem = 16px rem布局原理:根據CSS媒體查詢功能,更改根標簽的字體尺寸,實作rem單位隨螢屏尺寸的變化,如 ......

    uj5u.com 2023-04-20 08:02:21 more
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 08:01:50 more
  • 如何在 vue3 中使用 jsx/tsx?

    我們都知道,通常情況下我們使用 vue 大多都是用的 SFC(Signle File Component)單檔案組件模式,即一個組件就是一個檔案,但其實 Vue 也是支持使用 JSX 來撰寫組件的。這里不討論 SFC 和 JSX 的好壞,這個仁者見仁智者見智。本篇文章旨在帶領大家快速了解和使用 Vu ......

    uj5u.com 2023-04-20 08:01:37 more
  • 【Vue2.x原始碼系列06】計算屬性computed原理

    本章目標:計算屬性是如何實作的?計算屬性快取原理以及洋蔥模型的應用?在初始化Vue實體時,我們會給每個計算屬性都創建一個對應watcher,我們稱之為計算屬性watcher ......

    uj5u.com 2023-04-20 08:01:31 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:01:10 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:00:32 more