Java后端程序員學習前端之JavaScript

1.什么是JavaScript

1.1.概述

JavaScript是一門世界上最流行的腳本語言javaScript
一個合格的后端人員,必須要精通JavaScript

1.2.歷史

JavaScript的起源故事-CSDN博客

2.快速入門

2.1.引入JavaScript

1.內部標簽

    <script>//.......</script> -->

2.外部引入

    <!-- 外部引入 --><!-- 注意:script標簽必須成對出現 --><script src="js/rm.js"></script>

測試代碼

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><!-- 在script標簽中寫,JavaScript代碼<script>alert("hello world");</script> --><!-- 外部引入 --><!-- 注意:script標簽必須成對出現 --><script src="js/rm.js"></script>
</head>
<body>  <!-- 這里也可以存放 -->
</body>
</html>

2.2.基本語法入門

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><!-- JavaScript嚴格區分大小寫 --><script>// 1.定義變量 變量類型 變量名 = 變量值var score = 71;// 2.條件控制if(score>60 && score<70){alert("60-70")}else if(score>70 && score<80){alert("70-80")}else{alert("other")}// console.log(score) 在瀏覽器控制臺打印變量 System.out.println();</script>
</head>
<body></body>
</html>

瀏覽器必備調試須知:

2.3.數據類型

數值,文本,圖形,音頻,視頻.
number
js不區分小數和整數,Number

字符串

'abc' "abc"

布爾值

true false

邏輯運算

比較運算符 !!!重要

這是一個JS的缺陷,堅持不要使用==比較

須知:

  • NaN===NaN,這個與所有的數值都不相等,包括自己
  • 只能通過 isNaN(NaN) 來判斷這個數是否是 NaN

浮點數問題

盡量避免使用浮點數進行運算,存在精度問題!

null 和 undefined

  • null 空
  • undefined 未定義

數組

Java的數值必須是相同類型的對象~,JS中不需要這樣!

取數組下標:如果越界了,就會

對象

對象是大括號,數組是中括號~
每個屬性之間使用逗號隔開,最后一個不需要添加

取對象的值

2.4嚴格檢查模式

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><!-- 前提:ide需要設置ES6語法'use strict'; 嚴格檢查模式,預防JavaScript的隨意性導致產生一些問題必須卸載JavaScript的第一行!局部變量建議都使用let 去定義--><script>'use strict'// 全局變量let i = 1;// ES6 let</script>
</body>
</html>

3.數據類型

3.1.字符串

1、正常字符串我們使用 單引號,或者雙引號包裹
2、注意轉義字符\

3、多行字符串編寫

4.模板字符串? ? ? ?

5.字符串長度

6.字符串的可變性,不可變

7.大小寫轉換

8.substring

3.2.數組

Array可以包含任意的數據類型

1.長度

注意:加入給 arr.length 賦值,數組大小就會發生變化~,如果賦值過小,元素就會丟失

2、indexOf,通過元素獲得下標索引

字符串的“1"和數字 1是不同的

3、slice() 截取Array的一部分,返回一個新數組,類似于String中的 substring

4、push(),pop()尾部

5、unshift(),shift()頭部

6、排序 sort()

7、元素反轉 reverse()

8、concat()

注意:concat()并沒有修改數組,只是會返回一個新的數組

9、連接符 join
打印拼接數組,使用特定的字符串連接

10、多維數組

數組:存儲數據(如何存,如和取,方法都可以自己實現!)

3.3.對象

若干個鍵值對

Js中對象, {..} 表示一個對象,鍵值對描述屬性 xxxx:xxxx,多個屬性之間使用逗號隔開,最后一個屬性不加逗號!

JavaScript中的所有的鍵都是字符串,值是任意對象!
1、對象賦值

2、使用一個不存在的對象屬性,不會報錯!undefined

3、動態的刪減屬性,通過 delete 刪除對象的屬性

4、動態的添加,直接給新的屬性添加值即可

5、判斷屬性值是否在這個對象中!xxx in xxx!

6、判斷一個屬性是否是這個對象自身擁有的 hasOwnProperty()

3.4.流程控制

if判斷

while循環,避免程序死循環

for循環

forEach循環

5.1引入

for...in

3.5.Map和Set

ES6的新特性

Map:

Set:無序不重復的集合

3.6.iterator

遍歷數組

遍歷map

遍歷set

4.函數

4.1.定義函數

定義方式一、

絕對值函數

一旦執行到 return 代表函數結束,返回結果!

如果沒有執行 return ,函數執行完也會返回結果,結果就是 undefined

定義方式二、

function(x){…}這是一個匿名函數。但是可以把結果賦值給 abs ,通過abs 就可以調用函數!
方式一和方式二等價!

參數問題:javaScript 可以傳任意個參數,也可以不傳遞參數~

參數進來是否存在的問題?
假設不存在參數,如果規避?

arguments

arguments是一個JS免費贈送的關鍵字,
代表,傳遞進來的所有的參數,是一個數組!

問題: arguments 包含所有的參數,我們有時候想使用多余的參數來進行附加操作。需要排除已有參數~

rest

以前:

ES6 引入的新特性,獲取除了已經定義的參數之外的所有參數~

rest 參數只能寫在最后面,必須用…. 標識。

4.2.變量的作用域

在javascript中,var 定義變量實際是有作用域的。

假設在函數體中聲明,則在函數體外不可以使用~(非要想實現的話,后面可以研究一下閉包)

如果兩個函數使用了相同的變量名,只要在函數內部,就不沖突

內部函數可以訪問外部函數的成員,反之則不行

假設,內部函數變量和外部函數的變量,重名!

假設在JavaScript 中 函數査找變量從自身函數開始~,由“內”向“外"查找,假設外部存在這個同名的函數變量,則內部函數會屏蔽外部函數的變量。

提升變量的作用域

結果:xundefined
說明;js 執行引擎,自動提升了y的聲明,但是不會提升變量y的賦值"

這個是在JavaScript建立之初就存在的特性。養成規范: 所有的變量定義都放在函數的頭部,不要亂放,便于代碼維護;

全局函數

全局對象 window

alert() 這個函數本身也是一個window變量;

Javascript 實際上只有一個全局作用域,任何變量(函數也可以視為變量),假設沒有在函數作用

范圍內找到,就會向外查找,如果在全局作用域都沒有找到,報錯RefrenceError

規范

由于我們所有的全局變量都會綁定到我們的 window 上。如果不同的is 文件,使用了相同的全局變量,沖突~>如果能夠減少沖突?

把自己的代碼全部放入自己定義的唯一空間名字中,降低全局命名沖突的問題
jQuery

局部作用域 let

ES6 let 關鍵字,解決局部作用域沖突問題!

建議大家都是用let去定義局部作用域的變量;

常量const

在ES6 之前,怎么定義常量:只有用全部大寫字母命名的變量就是常量;建議不要修改這樣的值

在ES6 引入了常量關鍵字const

4.3.方法

定義方法

方法就是把函數放在對象的里面,對象只有兩個東西: 屬性和方法

        var zhangrun = {name : "張潤",birth : 2000,// 方法age : function(){// 今年 - 出生的年var now = new Date().getFullYear();return now - this.birth}// 屬性zhangrun.name}// 方法,一定要帶()zhangrun.age()

this.代表什么? 拆開上面的代碼看看~

    <script>function getAge() {// 今年 - 出生的年var now = new Date().getFullYear();return now - this.birth}var zhangrun = {name: "張潤",birth: 2000,// 方法age: getAge}// zhangrun.age() ok// getAge() NAN</script>

this是無法指向的,是默認指向調用它的那個對象

apply

在js 中可以控制 this 指向!

        function getAge() {// 今年 - 出生的年var now = new Date().getFullYear();return now - this.birth}var zhangrun = {name: "張潤",birth: 2000,// 方法age: getAge}// zhangrun.age() ok// getAge() nogetAge.apply(zhangrun , [])

5.內部對象

標準對象

5.1.Date

基本使用

        var now = new Date(); //當前時間 年月日 時分秒now.getFullYear(); // 年now.getMonth(); // 月now.getDate(); // 日now.getDay(); // 星期幾now.getHours(); // 時now.getMinutes(); // 分now.getSeconds(); // 秒now.getTime(); // 時間戳 全世界統一 1970 1.1 00:00:00console.log(new Date(now.getTime())) // 時間戳轉為時間

轉換

5.2.JSON

json是什么

早期,所有數據傳輸習慣使用 XML 文件!

  • JSON(javaScript Object Notation,js 對象簡譜) 是一種輕量級的數據交換格式。
  • 簡潔和清晰的層次結構使得 JSON 成為理想的數據交換語言。
  • 易于人閱讀和編寫,同時也易于機器解析和生成,并有效地提升網絡傳輸效率

在]avaScript 一切皆為對象、任何js 支持的類型都可以用JSON來表示;number,string...

格式:

  • 對象都用 {}
  • 數組都用 []
  • 所有的鍵值對 都是用 key:value

JSON字符串 和JS 對象的轉化

        var user = {name:"zhangrun",age : 20,gender : "女"}// 對象轉化為JSON字符串var jsonUser = JSON.stringify(user)// json 字符串轉化為對象 參數為json字符串var obj = JSON.parse(jsonUser)

很多人搞不清楚,JSON 和JS 對象的區別

5.3.Ajax

  • 原生的js寫法 xhr 異步請求
  • jQuey 封裝好的 方法 $("#name").ajax("")
  • axios 請求

6.面向對象編程

6.1.什么是面向對象

javascript、Java、c#。。。面向對象;javascript有些區別!

  • 類:模板
  • ·對象:具體的實例

在JavaScript這個需要大家換一下思維方式!
原型:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=\, initial-scale=1.0"><title>Document</title><script>var Student = {name : "zhangrun",age: 20,run : function(){console.log(this.name + ".....run")}}var zhangrun = {name : "張潤"}// 張潤的原型是Studentzhangrun.__proto__ = Student</script>
</head>
<body></body>
</html>

class 繼承
class關鍵字,是在ES6引入的
1、定義一個類,屬性,方法

        // 定義一個學生類class Student{constructor(name){this.name = name}hello(){alert("hello")}}var zhangrun = new Student("zhangrun")zhangrun.hello()zhangrun.name

2、繼承

        // 定義一個學生類class Student{constructor(name){this.name = name}hello(){alert("hello")}}class pupil extends Student{constructor(name,grade){super(name)this.grade = grade}myGrade(){alert("我是一名小學生")}}var zhangrun = new Student("zhangrun")var xiaonai = new pupil("xiaonai",1)

7、操作BOM對象(重點)

瀏覽器介紹
JavaScript 和 瀏覽器關系?
JavaScript 誕生就是為了能夠讓他在瀏覽器中運行!
BOM:瀏覽器對象模型

  • lE 6~11
  • Chrome
  • Safari
  • FireFox

三方

  • QQ瀏覽器
  • 360瀏覽器

window

window 代表 瀏覽器窗口

Navigator
Navigator,封裝了瀏覽器的信息

大多數時候,我們不會使用navigator對象,因為會被人為修改!
不建議使用這些屬性來判斷和編寫代碼

screen
代表屏幕尺寸

location(重要)
location 代表當前頁面的URL信息

document
document 代表當前的頁面,HTML DOM文檔樹

獲取具體的文檔樹節點

獲取cookie

劫持cookie原理

服務器端可以設置 cookie:httpOnly

history

history代表瀏覽器的歷史記錄

8、操作DOM對象(重點)

核心
瀏覽器網頁就是一個Dom 樹形結構!

  • 更新:更新Dom節點
  • 遍歷dom節點:得到Dom節點
  • 刪除:刪除一個Dom節點
  • 添加:添加一個新的節點

要操作一個Dom節點,就必須要先獲得這個Dom節點

獲得dom節點

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script>// 對應css選擇器var h1 = document.getElementsByTagName("h1");var p1 = document.getElementById("p1");var p2 = document.getElementsByClassName("p2");var father = document.getElementById("father");var childrends = father.children; // 獲得父節點下的所有子節點// father.firstChild// father.lastChild</script>
</head>
<body><div id="father"><h1>標題一</h1><p id="p1">p1</p><p class="p2">p2</p></div>
</body>
</html>

這是原生代碼,之后我們盡量都是用jQuery();

更新節點

  • id1.innerText='456‘修改文本的值
  • id1.innerHTML='<strong>123</strong>'可以解析HTML文本標簽

操作js

刪除節點

刪除節點的步驟: 先獲取父節點,在通過父節點刪除自己

注意: 刪除多個節點的時候,children 是在時刻變化的,刪除節點的時候一定要注意!

插入節點

我們獲得了某個Dom節點,假設這個dom節點是空的,我們通過innerHTML 就可以增加一個元素了,但是這個DOM 節點已經存在元素了,我們就不能這么干了!會產生覆蓋
追加

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head>
<body><p id="js">JavaScript</p><div id="list"><p id="se">JavaSE</p><p id="ee">JavaEE</p><p id="me">JavaME</p></div><script>var js = document.getElementById("js");var list = document.getElementById("list");list.appendChild(js); // 追加到后面</script>
</body>
</html>

效果

創建一個新標簽,實現插入

9、操作表單(驗證)

表單是什么 form DOM 樹

  • 文本框 text
  • 下拉框 <select>
  • 單選框 radio
  • 多選框 checkbox
  • 隱藏域 hidden
  • 密碼框 password
  • .......

表單的目的:提交信息

需要提交的信息

提交表單。md5 加密密碼,表單優化

10、JQuery

jQuery庫,里面存在大量的avascript函數
獲取jQuery

選擇器

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/82473.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/82473.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/82473.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AI編程: 使用Trae1小時做成的音視頻工具,提取音頻并識別文本

背景 在上個月&#xff0c;有網頁咨詢我怎么才能獲取視頻中的音頻并識別成文本&#xff0c;我當時給他的回答是去問一下AI&#xff0c;讓AI來給你答案。 他覺得我在敷衍他&#xff0c;大罵了我一頓&#xff0c;大家覺得我的回答對嗎&#xff1f; 小編心里委屈&#xff0c;我…

AI日報 · 2025年5月10日|OpenAI“Stargate”超級數據中心項目掀起美國各州爭奪戰

1、OpenAI“Stargate”超級數據中心項目掀起美國各州爭奪戰 《華盛頓郵報》披露&#xff0c;OpenAI 與 Oracle、SoftBank 合作推進的“Stargate”項目&#xff08;首期投資 1000?億美元&#xff0c;四年內總投資 5000?億美元&#xff09;已收到超過 250 份選址提案&#xff…

Windows系統Jenkins企業級實戰

目標 在Windows操作系統上使用Jenkins完成代碼的自動拉取、編譯、打包、發布工作。 實施 1.安裝Java開發工具包&#xff08;JDK&#xff09; Jenkins是基于Java的應用程序&#xff0c;因此需要先安裝JDK。可以從Oracle官網或OpenJDK下載適合的JDK版本。推薦java17版本&#x…

MySQL 索引和事務

目錄 一、MySQL 索引介紹 1、索引概述 2、索引作用 3、索引的分類 &#xff08;1&#xff09;普通索引 &#xff08;2&#xff09;唯一索引 &#xff08;3&#xff09;主鍵索引 &#xff08;4&#xff09;組合索引&#xff08;最左前綴&#xff09; &#xff08;5&…

Block Styler——字符串控件

字符串控件的應用 參考官方幫助案例&#xff1a;&#xff08;這個方式感覺更好&#xff0c;第二種方式也可以&#xff09;E:\NX1980\UGOPEN\SampleNXOpenApplications\C\BlockStyler\ColoredBlock 普通格式&#xff1a; 讀取&#xff1a; //方法一 string0->GetProperti…

P2572 [SCOI2010] 序列操作 Solution

Description 給定 01 01 01 序列 a ( a 1 , a 2 , ? , a n ) a(a_1,a_2,\cdots,a_n) a(a1?,a2?,?,an?)&#xff0c;并定義 f ( l , r ) [ ( ∑ i l r a i ) r ? l 1 ] f(l,r)[(\sum\limits_{il}^r a_i)r-l1] f(l,r)[(il∑r?ai?)r?l1]. 執行 m m m 個操作&am…

RAG 2.0 深入解讀

作者&#xff1a;阿里云開發者 原文&#xff1a;https://zhuanlan.zhihu.com/p/1903437079603545114? 一、Introduction 過去一年可謂是RAG元年&#xff0c;檢索增強生成技術迅速發展與深刻變革&#xff0c;其創新與應用已深刻重塑了大模型落地的技術范式。站在2025年&#x…

代碼隨想錄第41天:圖論2(島嶼系列)

一、島嶼數量&#xff08;Kamacoder 99&#xff09; 深度優先搜索&#xff1a; # 定義四個方向&#xff1a;右、下、左、上&#xff0c;用于 DFS 中四向遍歷 direction [[0, 1], [1, 0], [0, -1], [-1, 0]]def dfs(grid, visited, x, y):"""對一塊陸地進行深度…

基于CNN的貓狗圖像分類系統

一、系統概述 本系統是基于PyTorch框架構建的智能圖像分類系統&#xff0c;專門針對CIFAR-10數據集中的貓&#xff08;類別3&#xff09;和狗&#xff08;類別5&#xff09;進行分類任務。系統采用卷積神經網絡&#xff08;CNN&#xff09;作為核心算法&#xff0c;結合圖形用…

linux搭建hadoop學習

linux搭建hadoop學習 下載安裝包: 海外資源可能需要翻墻或者找國內資源 cd /opt wget https://dlcdn.apache.org/hadoop/common/hadoop-2.10.2/hadoop-2.10.2.tar.gz tar -zxvf hadoop-2.10.2.tar.gz mv hadoop-2.10.2 hadoop配置環境變量 # 在/etc/profile文件中添加下面內…

Kubernetes生產實戰(十六):集群安全加固全攻略

Kubernetes集群安全加固全攻略&#xff1a;生產環境必備的12個關鍵策略 在容器化時代&#xff0c;Kubernetes已成為企業應用部署的核心基礎設施。但根據CNCF 2023年云原生安全報告顯示&#xff0c;75%的安全事件源于K8s配置錯誤。本文將基于生產環境實踐&#xff0c;系統講解集…

類加載機制詳解:雙親委派模型與打破它的方式

在復雜的 Java 系統中&#xff0c;類加載是最基礎卻常被忽略的一環。理解 JVM 的類加載機制&#xff0c;特別是 雙親委派模型&#xff08;Parent Delegation Model&#xff09;&#xff0c;是我們深入掌握熱部署、插件機制、ClassLoader 隔離、ClassNotFound 錯誤等問題的關鍵。…

Android SDK 開發中的 AAR 與 JAR 區別詳解

在 Android SDK 開發中&#xff0c;構建項目時我們常常會看到生成兩個不同的文件&#xff1a;一個是 build/outputs/aar/*.aar&#xff0c;另一個是 build/intermediates/aar_main_jar/debug/syncDebugLibJars/classes.jar。很多初學者會疑惑&#xff1a;它們之間有什么區別&am…

服務器配置錯誤導致SSL/TLS出現安全漏洞,如何進行排查?

SSL/TLS 安全漏洞排查與修復指南 一、常見配置錯誤類型? 弱加密算法與密鑰問題? 使用弱密碼套件&#xff08;如DES、RC4&#xff09;或密鑰長度不足&#xff08;如RSA密鑰長度<2048位&#xff09;&#xff0c;導致加密強度不足。 密鑰管理不當&#xff08;如私鑰未加密存…

Day20打卡-奇異值SVD分解

今天學習非特征篩選的方法&#xff1a; 知識點回顧&#xff1a; 線性代數概念回顧&#xff08;可不掌握&#xff09;奇異值推導&#xff08;可不掌握&#xff09;奇異值的應用 特征降維&#xff1a;對高維數據減小計算量、可視化數據重構&#xff1a;比如重構信號、重構圖像&am…

temu采購自養號全流程解析:從賬號搭建到安全下單的技術閉環

temu 自養號采購下單技術是一個精細的過程&#xff0c;需要從多個方面進行考慮和操作&#xff0c;其核心在于通過技術手段模擬真實用戶行為&#xff0c;構建獨立、安全的賬號環境以確保賬號的安全性、真實性和采購下單的成功率。以下是對該技術的詳細解析 1. 賬號準備 手機號…

相機Camera日志分析之八:高通Camx HAL架構opencamera三級日志詳解及關鍵字

【關注我,后續持續新增專題博文,謝謝!!!】 上一篇我們講了:相機Camera日志分析之七:高通Camx HAL架構opencamera二級日志詳解及關鍵字 這一篇我們開始講: 相機Camera日志分析之八:高通Camx HAL架構opencamera三級日志詳解及關鍵字 目錄 【關注我,后續持續…

自定義類型-結構體(二)

結構體內存對齊 偏移量 指的是結構體中某個成員相對于結構體起始地址的字節距離 第一個成員的起始位置為0&#xff0c;一個字節表示一個單位 這里的數字表示的是該成員地址與結構體首地址之間的值 對齊規則 1.結構體第一個成員的第一個字節的偏移量為0 2.其余成員變量要…

【免費工具】圖吧工具箱2025.02正式版

DIY愛好者的必備工具 軟件截圖&#xff1a; —————【下 載 地 址】——————— 【本章單下載】&#xff1a;https://drive.uc.cn/s/f08aad37ddb14 【百款黑科技】&#xff1a;https://ucnygalh6wle.feishu.cn/wiki/HPQywvPc7iLZu1k0ODFcWMt2n0d?fromfrom_copylink …

DAX 權威指南1:DAX計算、表函數與計算上下文

參考《DAX 權威指南 第二版》 文章目錄 二、DAX簡介2.1 理解 DAX 計算2.2 計算列和度量值2.3 變量2.3.1 VAR簡介2.3.2 VAR的特性 2.4 DAX 錯誤處理2.4.1 DAX 錯誤類型2.4.1.1 轉換錯誤2.4.1.2 算術運算錯誤2.4.1.3 空值或 缺失值 2.4.2 使用IFERROR函數攔截錯誤2.4.2.1 安全地進…