前端(三)-JavaScript

来源:https://www.cnblogs.com/xiaoqigui/archive/2022/07/11/16466000.html
-Advertisement-
Play Games

1、基本語法 1.1 引入JavaScript 1.1.1行內引入 <input type="button" value="輕輕點我一下" onclick="javascript:alert('正在學習Javascript!')"> 1.1.2 內部引入 <script type="text/jav ...


1、基本語法

1.1 引入JavaScript

1.1.1行內引入

<input type="button" value="輕輕點我一下" onclick="javascript:alert('正在學習Javascript!')">

1.1.2 內部引入

<script type="text/javascript">
    function testClickTwo(){
        alert("正在學習JavaScriptTwo")
    }
</script>

<input type="button" value="輕輕點我一下Two" onclick="testClickTwo()">

1.1.3 外部引入

<!-- 引入外部js腳本文件 -->
<script src="js/test.js" type="text/javascript"></script>

1.2 數據類型和變數

typeof

查看數據類型;

關鍵字 類型
undefined 未定義
number 數字
string 字元串
boolean 布爾

number 的註意點

  • NaN; NaN表示Not a Number,當無法計算結果時用NaN表示 ;
  • Infinity; Infinity表示無限大,當數值超過了JavaScript的Number所能表示的最大值時,就 表示為Infinity;

1.3 strict模式

JavaScript在設計之初,為了方便初學者學習,並不強制要求用 var 申明變數。這個設計錯誤帶來了 嚴重的後果:如果一個變數沒有通過 var 申明就被使用,那麼該變數就自動被申明為全局變數;

為了修補JavaScript這一嚴重設計缺陷,ECMA在後續規範中推出了strict模式,在strict模式下運行的 JavaScript代碼,強制通過 var 申明變數,未使用 var 申明變數就使用的,將導致運行錯誤。

<!--啟用strict模式的方法是在JavaScript代碼的第一行寫上:-->
<script>
    `use strict`;
    // 如果瀏覽器支持strict模式,下麵的代碼將報ReferenceError錯誤:
    abc = 'Hello, world';  //沒有使用var聲明變數
    console.log(abc);
</script>

1.4 字元串

1.4.1 多行字元串

由於多行字元串用 \n 寫起來比較費事,所以最新的ES6標準新增了一種多行字元串的表示方法,用反 引號 ``表示:

`這是一個
多行
字元串`;

1.4.2 模板字元串(註意模板字元的放多行字元串號``反引號裡面才可以)

ES6新增了一種模板字元串,表示方法和上面的多行 字元串一樣,但是它會自動替換字元串中的變數:

var name = '小明';
var age = 20;
var message = `你好, ${name}, 你今年${age}歲了!`;
alert(message);

1.4.3 常用方法

方法 說明
length() 字元串長度
str[index] 通過下標獲取字元
toUpperCase() 變大寫
toLowerCase() 變小寫
charAt(index) 返回指定下標的字元
indexOf(str) 返回指定字元串的下標
lastIndexOf(str) 返回指定字元串最後一次出現的下標
substring(index1,index2) 返回區間的字元(前閉後開)
... ...

1.5 數組

JavaScript的 Array 可以包含任意數據類型,並通過索引來訪問每個元素。

1.5.1 初始化

//定義數組1:var 數組名 =new Array([長度]),長度可以省略
var varArray1 = new Array();
//訪問數組元素
varArray1[0] = "LPL";
varArray1[1] = "LCK";
varArray1[3] = "LEL";
console.log(varArray1);

//定義數組2,支持直接初始化
var varArray2 = new Array(10,20,30,40,50);
varArray2[5] = 60;
console.log(varArray2);

//定義數組3:直接支持使用中括弧
var varArray3 = [100,90,80];
console.log(varArray3);

1.5.2 常用方法

方法 說明
indexOd(index) 通過下標獲取元素
slice(index1,index2) 截取指定下標元素,返回新數組(前閉後開)
push(元素...) 向末尾添加任意元素
pop() 將末尾的元素刪除
unshift(元素...) 向頭部添加任意元素
shift() 將頭部的元素刪除
sort() 排序
reverse() 反轉
splice(index,num,元素...) 從指定的索引開始刪除若幹元素,然後再 從該位置添加若幹元素
concat(array) 把當前的 Array 和另一個 Array 連接起來,並返回一個新的 Array
join([符號]) 把當前 Array 的每個元素都用指定的字元串連接起 來,然後返回連接後的字元串:

1.6 對象

JavaScript的對象是一種無序的集合數據類型,它由若幹鍵值對組成。

1.6.1 定義一個對象

var 對象名 = {
    key: 'value',
    key: 'value',
    key: 'value'
}

1.6.2 獲取對象的屬性

對象.屬性

1.6.3 由於JavaScript的對象是動態類型,你可以自由地給一個對象添加或刪除屬性:

var xiaoming = {
name: '小明'
};
xiaoming.age; // undefined
xiaoming.age = 18; // 新增一個age屬性
xiaoming.age; // 18
delete xiaoming.age; // 刪除age屬性
xiaoming.age; // undefined
delete xiaoming['name']; // 刪除name屬性
xiaoming.name; // undefined
delete xiaoming.school; // 刪除一個不存在的school屬性也不會報錯

如果我們要檢測對象是否擁有某一屬性,可以用 in 操作符:

var xiaoming = {
name: '小明',
birth: 1990,
school: 'No.1 Middle School',
height: 1.70,
weight: 65,
score: null
};
'name' in xiaoming; // true
'grade' in xiaoming; // false

不過要小心,如果用 in 判斷一個屬性存在,這個屬性不一定是 這個對象的,它可能是這個對象繼承得 到的:

1 'toString' in xiaoming; // true
//因為 toString 定義在 object 對象中,而所有對象最終都會在原型鏈上指向 object,所以xiaoming 也擁有 toString 屬性。

要判斷一個屬性是否是 xiaoming 自身擁有的,而不是繼承得到的,可以用 hasOwnProperty() 方法:

var xiaoming = {
name: '小明'
};
xiaoming.hasOwnProperty('name'); // true
xiaoming.hasOwnProperty('toString'); // false

1.7 流程式控制制

1.7.1 if

1.7.2 for

for ... in , 它可以把一個對象的所有屬性依次迴圈出來:

var o = {
    name: 'Jack',
    age: 20,
    city: 'Beijing'
};
for (var key in o) {
    if (o.hasOwnProperty(key)) {
        console.log(key); // 'name', 'age', 'city'
    }
}

由於 **Array 也是對象**,而它的每個元素的**索引被視為對象的屬性**,所以**遍歷出來是下標**;

var a = ['A', 'B', 'C'];
for (var i in a) {
    console.log(i); // '0', '1', '2'
    console.log(a[i]); // 'A', 'B', 'C'
}
//請註意,for... in 對 Array 的迴圈得到的是 String 而不是 Number 。

1.7.3 while

1.8 Map 和Set

1.8.1 Map

Map 是一組鍵值對的結構,具有極快的查找速度。

1.8.1.1初始化
//初始化 Map 需要一個二維數組,或者直接初始化一個空 Map;
var m = new Map(); // 空Map
m.set('Adam', 67); // 添加新的key-value
m.set('Bob', 59);
m.has('Adam'); // 是否存在key 'Adam': true
m.get('Adam'); // 67
m.delete('Adam'); // 刪除key 'Adam'
m.get('Adam'); // undefined

//由於一個key只能對應一個value,所以,多次對一個key放入value,後面的值會把前面的值衝掉:

1.8.2 Set

Set 和 Map 類似,也是一組key的集合,但不存儲value。由於key不能重覆,所以,在 Set 中, 沒有重覆的key;

var s1 = new Set(); // 空Set
var s2 = new Set([1, 2, 3,3,'3']); // 含1, 2, 3,'3'
//重覆元素在 Set 中自動被過濾:3
//通過 delete(key) 方法可以刪除元素:

1.9 Iterable

遍歷 Array 可以採用下標迴圈,遍歷Map 和 Set 就無法使用下標。 為了統一集合類型,ES6標準引入了新的 iterable 類型,Array,Map,Set 屬於; 具有 iterable 類型的集合可以通過新的 for ... of 迴圈來遍歷。

更好的方式是直接使用 iterable 內置的 forEach 方法,它接收一個函數,每次迭代就自動回調該 函數。

1.9.1 Array

var a = new Array(元素...);
a.forEach(function (element, index, array) {
    // element: 指向當前元素的值
    // index: 指向當前索引
    // array: 指向Array對象本身
    console.log(element + ', index = ' + index);
})

1.9.2 Map

Map 的回調函數參數依次為 value 、 key 和 map 本身:

var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
m.forEach(function (value, key, map) {
	console.log(value);
});

1.9.3 set

Set 沒有索引,因此回調函數的前兩個參數都是元素本身:

var s = new Set(['A', 'B', 'C']);
s.forEach(function (element, sameElement, set) {
	console.log(element);
});

2、交互彈窗

方法 說明
alert(str) 警告彈窗,沒有返回值,只有確定按鈕
prompt(str) 有輸入框(返回值為輸入內容,直接取消返回值為空null,沒有輸入但確認返回值為空字元串)
prompt(str1,str2) 有輸入框和預設值
confirm(str) 是否選擇框(返回值,true,false)

3、函數

3.1 常用系統函數

方法 說明
parseInt(strNum) 將字元串轉換為整型數字
parseFloat(strNum) 將字元串轉換為浮點型數字
isNaN(值) true,表示不是數字,false,表示是數字

3.2 自定義函數

3.2.1定義函數

方式1

function abs(x) {
    if (x >= 0) {
    	return x;
    } else {
    	return -x;
    }
}
//一旦執行到 return 時,函數就執行完畢,並將結果返回。
//如果沒有 return 語句,函數執行完畢後也會返回結果,只是結果為 undefined 。

方式2

var abs = function (x) {
    if (x >= 0) {
    	return x;
    } else {
    	return -x;
    }
};
//在這種方式下, function (x) { ... } 是一個匿名函數,它沒有函數名。但是,這個匿名函數賦值給了變數 abs ,所以,通過變數 abs 就可以調用該函數。
//上述兩種定義完全等價,註意第二種方式按照完整語法需要在函數體末尾加一個 ; ,表示賦值語句結束。

3.3兩個重要點

3.3.1arguments 關鍵字

JavaScript還有一個免費贈送的關鍵字 arguments ,它只在函數內部起作用,並且永遠指向當前函數 的調用者傳入的所有參數。

function foo(x) {
console.log('x = ' + x); // 10
for (var i=0; i<arguments.length; i++) {
console.log('arg ' + i + ' = ' + arguments[i]); // 10, 20, 30
}
}
foo(10, 20, 30)

3.3.2 rest 參數

function foo(a, b, ...rest) {
console.log('a = ' + a);
console.log('b = ' + b);
console.log(rest);
}
foo(1, 2, 3, 4, 5);
// 結果:
// a = 1
// b = 2
// Array [ 3, 4, 5 ]
foo(1);
// 結果:
// a = 1
// b = undefined
// Array []

rest參數只能寫在最後,前面用 ... 標識,從運行結果可知,傳入的參數先綁定 a 、 b ,多餘的 參數以數組形式交給變數 rest ;

3.4 變數的作用域

描述 作用域
var聲明的變數 全局變數
不用var聲明的變數(不建議使用) 全局變數
方法以內的變數 局部變數

3.4.1 兩個關鍵字

關鍵字 說明
let 聲明局部變數的關鍵字
const 聲明常量的關鍵字

3.4.2 全局對象

實際上,JavaScript預設有一個全局對象 window ,全 局作用域的變數實際上被綁定到 window 的一個屬性:

4、事件

事件 說明
onclick 單機事件
onfocus 獲取焦點事件
onblur 失去焦點事件
onkeydown 鍵盤按下事件
onkeyup 鍵盤抬起事件
onkeypress 鍵盤產生可輸入字元事件
onmouseover 滑鼠移入事件
onmouseout 滑鼠移除事件

5、BOM

5.1 windows

方法 說明
close() 關閉瀏覽器視窗
open() 打開指定url瀏覽器視窗(可指定視窗大小)

5.2 history

方法 說明
back() 返回上一個頁面
forward() 下一個頁面
go() 載入某個具體URL (go(-1)返回上一個頁面 go(1)下一個頁面)

5.3 location

屬性 說明
host 主機名+埠號
hostname 主機名
href 完整URL(給href賦值可以跳轉到指定頁面)
方法 說明
repload() 重新載入文檔
replace() 用新的文檔替換當前文檔

5.4 document

屬性 說明
referrer 返回載入前文檔的URL
URL 返回當前文檔的URL
cookie 返回當前頁面的cookie
方法 說明
getElementById() 返回對擁有指定id的第一個對象的引用
getElementByName() 返回帶有指定name值的對象集合
getElementByTagName() 返回帶有指定標簽的對象的集合
getElementByClassName() 返回帶指定class值的對象集合
write() 向文檔寫文本,HTML表達式或JavaScript代碼

5.5 innerHTML 與 innerText

方法() 說明
innerHTML = "" 往節點裡裡面些內容,裡面的標簽會被解析
innerHTML 獲取節點裡面的內容
innerText = "" 往節點裡裡面些內容,裡面的標簽不會被解析
innerText 獲取節點裡面的內容

toFixed(number) 保留指定位數

5.6 Date

方法 說明
getDate() 每月中的第幾天
getDay() 每周的第幾天
getHours() 小時
getMinutes() 分鐘
getSeconds() 秒數
getMonth() 月份(0~11)
getFullYear() 年份
getTime() 時間戳

6.7 定時函數與清除函數(時鐘特效)

定時函數

方法 說明
setTimeout("調用的函數",等待的秒數) 指定時間後執行一次函數
setInterval("調用的函數",間隔的秒數) 指定時間間隔一直執行函數

清除函數

方法 說明
clearTimeout(setTimeout返回的ID值) 停止執行函數
clearInterval(setInterval返回的ID值) 停止執行函數

6、DOM

6.1 層次關係訪問節點

層次訪問節點1,包含text,註釋等其他內容

屬性名稱 說明
parentNode 返回接待你的父節點
childNodes 返回子節點集合,childNodes[i]
firstChild 返回節點的第一個子節點
lastChild 返回節點的最後一個子節點
nextSibling 下一個節點
previousSibling 上一個節點

層次訪問節點2,只包含標簽元素節點

屬性名稱 說明
firstElementChild 返回節點的第一個子節點
lastElementChild 返回節點的最後一個子節點
nextElementSibling 下一個節點
previousElementSibling 上一個節點

6.2 操作節點

6.2.1操作節點屬性

方法 說明
getAttribute("屬性名") 獲得節點指定屬性值
setAttribute("屬性名",屬性參數) 設置節點的屬性值

6.2.2創建和插入節點

方法 說明
cerateElement(tagName) 通過標簽名創建新的元素節點
A.appendChild(B) 把B節點(作為子節點)追加到A節點的末尾
inseretBefore(A,B) 把A節點插入到B節點之前
cloneNode(deep) 複製某個指定的節點

cloneNode(deep)的深拷貝和淺拷貝

方法 說明
cloneNode(false) 淺拷貝(不拷貝標簽內部的子元素)
cloneNode(true) 深拷貝(包括標簽內部的子元素一起拷貝)

6.2.3 刪除和替換節點

方法 說明
removeChild(node) 刪除指定的節點
replaceChild(newNode,oldNode) 用其他的節點替換指定的節點

註意只有父節點才可以刪除子節點或者替換子節點;

6.3 操作節點樣式

6.3.1 事件

修改樣式主要與事件一起使用;

事件 說明
onclick 單機事件
onfocus 獲取焦點事件
onblur 失去焦點事件
onkeydown 鍵盤按下事件
onkeyup 鍵盤抬起事件
onkeypress 鍵盤產生可輸入字元事件
onmouseover 滑鼠移入事件
onmouseout 滑鼠移除事件

6.3.2 通過節點的style屬性

元素節點.style.樣式屬性=”樣式值“;

//舉例
document.getElementById("cart").style.backgroundColor="#fff";

6.3.3 className屬性

//carOut類屬性時在CSS外部樣式中已經存在的
document.getElementById("cart").className = "cartOut";

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

-Advertisement-
Play Games
更多相關文章
  • XR技術的發展,為用戶帶來了全新的體驗模式。那麼,作為支撐XR發展主要學科之一的圖形學,將迎來哪些發展新機遇?移動應用開發者,該如何擁抱3D數字化轉型? 7月15日,HDD·HMS Core. Sparkle應用創新分論壇將邀請圖形領域學者、分析師、技術和產品專家,共同探討圖形技術的發展現狀和趨勢, ...
  • JavaScript基本知識點——帶你逐步解開JS的神秘面紗 在我們前面的文章中已經深入學了HTML和CSS,在網頁設計中我們已經有能力完成一個美觀的網頁框架 但僅僅是網頁框架不足以展現出網頁的魅力,JS由此而生! JavaScript概述 JavaScript是一門弱類型腳本語言,其源代碼在發往客 ...
  • 純前端實現-tab卡片化樣式切換 html內容 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>選項卡切換</title> <link rel="stylesheet" type="text/css" href="./css ...
  • 實現思路: 用戶登錄時若勾選“記住我”功能選項,則將登錄名和密碼(加密後)存入本地緩存,下次登錄頁面載入時自動獲取保存好的賬號和密碼(需解密),回顯到登錄輸入框中。 說到存入本地緩存,大家想到的一定是cookies、localStorage、sessionStorage,不過後者我是不推薦使用的,咱 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 1. 代碼輸出結果 (function(){ var x = y = 1; })(); var z; console.log(y); // 1 console.log(z); // undefined console.log(x); // ...
  • 如果元素因為其本身或其父元素設置了display:none;而無法獲取到實際的寬高,則可以使用jquery的actual方法便捷地獲取到元素地實際寬高. ...
  • 在前後端分離的項目中常常會遇到當前端頁面開發完成 但是後端介面還沒好,暫不支持聯調的情況下,一般我們會用到mock數據 這邊簡單說一下最常見且經常會遇到的curd介面模擬 註:這邊可以和後端先約定好介面路徑以及入參返參的欄位,避免二次修改 安裝依賴,新建js文件,在文件中導入mock.js,模擬列表 ...
  • 最近的項目有個需求是,這種單頁多圖一次滾動一張圖片的輪播效果,項目組件庫是antd 然而用了antd的走馬燈是這樣子的 我們可以看到官網給的api是沒有這種功能,百度上也多是在css上動刀,那樣也就畢竟繁瑣了,我們是什麼?我們是程式猿啊,程式猿就該有程式猿的樣子,怎麼能寫繁瑣的東西呢,那還怎麼為公司 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...