主頁 > 前端設計 > 軟體創新實驗室:JavaScript學習

軟體創新實驗室:JavaScript學習

2021-07-25 08:01:17 前端設計

文章目錄

  • 前言
  • 簡介
    • 概述
    • 組成部分
    • 特點
    • 作用
  • 基礎語法
    • 變數
    • 字串
    • 陣列
    • 物件
    • 流程控制
    • Map 和 Set
    • iterator
  • 函式
    • 定義函式
    • 呼叫函式
    • 變數的作用域
    • 方法
  • 面向物件編程
    • 什么是面向物件
    • 面向物件原型繼承
    • 面向物件class繼承
  • 操作BOM物件(重點)
  • 操作DOM物件(重點)
    • 獲得節點
    • 更新節點
    • 洗掉節點
    • 插入節點
    • 創建一個新的標簽
    • 在前面插入節點:insertBefore
  • 操作表單
    • 獲取表單資訊
    • 提交表單
      • iframe
      • submit
      • submit()
      • ajax
      • XHR
  • 后記

前言

本博文專用于軟體創新實驗室JS學習課堂,很基礎但很適用的 JS 相關知識,一篇讓你對 JS 得心應手,了如指掌!

簡介

概述

JavaScript 是目前 web 開發中不可缺少的腳本語言,JS 不需要編譯即可運行,運行在客戶端,需要通過瀏覽器來決議執行 JavaScript 代碼,

JavaScript 誕生于1995年,當時的主要目的是驗證表單的資料是否合法,

JavaScript 本來應該叫 Livescript,但是在發布前夕,想搭上當時超熱的 java 順風車,臨時把名字改為了JavaScript,(也就是說 js 跟 java 沒有關系,當時只是想借助 java 的名氣),

組成部分

組成部分作用
ECMA Script構成了 js 核心的語法基礎
BOMBrowser Object Model 瀏覽器物件模型,用于操作瀏覽器上的物件
DOMDocument Object Model 檔案物件模型,用于操作網頁中的元素

(1)ECMAScript(核心):這一部分主要是 JS 的基本語法,

(2)BOM:Brower Object Model(瀏覽器物件模型),主要是獲取瀏覽器資訊或操作瀏覽器的,例如:瀏覽器的前進與后退、瀏覽器彈出提示框、瀏覽器地址欄輸入網址跳轉等操作等,

(3)DOM:Document Object Model(檔案物件模型),此處的檔案暫且理解為 html,html 加載到瀏覽器的記憶體中,可以使用 JS 的 DOM 技術對記憶體中的 html 節點進行修改,用戶從瀏覽器看到的是 JS 動態修改后的頁面,(增刪改查)

特點

1. 互動性(它可以做的就是資訊的動態互動)
2. 安全性(不允許直接訪問本地硬碟)
3. 跨平臺性(只要是可以決議 JS 的瀏覽器都可以執行,和平臺無關)

與 Java 的區別:

JavaJavaScript
面向物件的語言腳本語言,是基于物件和事件驅動的語言
Java 的源代碼在執行之前必須經過編譯JavaScript 的代碼可以由瀏覽器直接解釋執行
Java 變數在使用之前必須宣告JavaScript 不需要
Java 是靜態型別語言JavaScript 是動態型別語言
Java 主要在服務端運行Javascript 主要在客戶端瀏覽器運行

作用

JavaScript 被用來改進設計、驗證表單、檢測瀏覽器、創建 cookies,等等,JavaScript 是因特網上最流行的腳本語言,并且可在所有主要的瀏覽器中運行,比如: Internet Explorer、 Maxthon、Mozilla、Firefox、Netscape、Chrome和 Opera等,

在目前學習階段只要記住最常用的二個:
(1)運態修改html及css代碼
(2)驗證表單

基礎語法

變數

  • 定義變數
    • var num = 1;
    • var name = "idiot";

javascript 嚴格區分大小寫,

console.log(變數名) 在瀏覽器控制臺列印資料,

字串

  1. 正常字串我們使用單引號,或者雙引號包裹,
  2. 注意轉義字符 \
\'
\n
\t
\u4e2d    \u##### Unicode字符
\x41	  Ascall字符
  1. 多行字串撰寫,使用撇號,
//tab 上面 esc下面
var msg =
    `
    hello
    world
    你好呀
    nihao
    `
  1. 模板字串,
let name = 'Tom';
let age = 3;
var msg = `你好,${name}`
  1. 字串長度,
str.length
  1. 字串的可變性,不可變
var str = "stUdent"
str[0]=1
console.log(str[0])
console.log(str)
  1. 大小寫轉換,
//注意,這里是方法,不是屬性了,所以要加括號
str.toUpperCase();
str.toLowerCase();
  1. str.indexOf('t')
  2. substring(),從0開始
str.substring(1)//從第一個字串截取到最后一個字串
str.substring(1,3)//[1,3)

陣列

Array 可以包含任意的資料型別,

var arr = [1,2,3,4,5,6];//通過下標取值和賦值
  1. 長度
arr.length

注意:假如給 arr.length 賦值,陣列大小就會發生變化~,如果賦值過小,元素就會丟失,

  1. indexOf,通過元素獲得下標索引
arr.indexOf(2)
1

字串的"1"和數字 1 是不同的,

  1. slice() 截取掉 Array 的一部分,回傳的一個新陣列,類似于 String 中 substring()
    在這里插入圖片描述

  2. push()pop()

push:壓入到尾部
pop:彈出尾部的一個元素
  1. unshift(),shift()
unshift:壓入到頭部
shift:彈出頭部的一個元素
  1. 排序 sort()
["B","C","A"]
arr.sort()
["A","B","C"]
  1. 元素反轉 reverse()
["A","B","C"]
arr.reverse()
["C","B","A"]
  1. concat()
var arr = [1,2,3,4,5,6]
console.log(arr.concat(['a','b']))
console.log(arr)

注意:concat()并沒有修改陣列,只是會回傳一個新的陣列

  1. 連接符 join()
    在這里插入圖片描述

  2. 多維陣列

    陣列:存盤資料(如何存,如何取,方法都可以自己實作!)

物件

若干個鍵值對,

var 物件名 = {
	屬性名:屬性值,
	屬性名:屬性值,
	屬性名:屬性值
}
//定義了一個person物件,它有四個屬性
var person = {
	name:"Tom",
	age:3,
	email:"123456798@QQ.com",
	score:66
}

JS 中,{…} 表示一個物件,鍵值對描述屬性 xxx:xxx,多個屬性之間用逗號隔開,最后一個屬性不加逗號!

JavaScript中的所有的鍵都是字串,值是任意物件!

  1. 物件賦值,

  2. 使用一個不存在的物件屬性,不會報錯!undefined

  3. 動態的刪減屬性,通過 delete 洗掉物件的屬性,

  4. 動態的添加,直接給新的屬性添加值即可,
    在這里插入圖片描述

  5. 判斷屬性值是否在這個物件中!xxx in xxx

  6. 判斷一個屬性是否是這個物件自身擁有的 hasOwnProperty()

流程控制

  1. if 判斷,

  2. while 回圈,避免程式死回圈,

  3. for 回圈,

  4. forEach 回圈,ES5.1特性

  5. for…in… 下標,for(var index in object){}

Map 和 Set

ES6的新特性

  • Map,

  • Set,

iterator

ES6的新特性

遍歷陣列,

遍歷 Map,

遍歷 Set,

函式

定義函式

定義方式一:

function abs(value){
    if(value >= 0){
        return value;
    }else{
        return -value;
    }
}

一旦執行到 return 代表函式結束,回傳結果;如果沒有執行 return,函式執行完也會回傳結果,結果就是 undefined


定義方式二:

var abs = function(value){
    if(value >= 0){
        return value;
    }else{
        return -value;
    }
}

function(value){…} 是一個匿名函式,但是可以把結果賦值給 abs,通過 abs 就可以呼叫函式!方式一和方式二等價!


呼叫函式

abs(10)    //10
abs(-10)   //10

引數問題:JavaScript 可以傳任意個引數,也可以不傳遞引數,引數進來是否存在問題?假設不存在引數,如何規避?

var abs = function(value){
    //手動拋出例外來判斷
    if(typeof value !== 'number'){
        throw 'Not a number';
    }
    if(value >= 0){
        return value;
    }else{
        return -value;
    }
}

Arguments

arguments 代表傳遞進來的所有引數,是一個陣列!

var abs = function(value){
    console.log("x=>"+x);

    for(var i=0; i<arguments.length; i++){
        console.log(arguments.[i]);
    }

    if(value >= 0){
        return value;
    }else{
        return -value;
    }
}

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

Rest

ES6之前,

if(arguments.length>2){
    for(var i=2; i<arguments.length; i++){
        ...
    }
}

ES6之后,獲取除了已定義的引數之外的所有引數,

function a(a,b,...rest){
    console.log("a=>"+a);
    console.log("b=>"+b);
    console.log(rest);
}

rest 引數只能寫在最后面,必須用 標識,

變數的作用域

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

假設在函式體重宣告,則在函式體外不可以使用(閉包),

function a(){
    var x = 1;
    x++;
}

x += 2;    //Uncaught ReferenceError: x is not defined

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

function a(){
    var x = 1;
    x++;
}

function b(){
    var x = 'A';
    x++;
}

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

function a(){
    var x = 1;

    //內部函式可以訪問外部函式的成員,反之則不行
    function b(){
        var y = ++x;    //2
    }

    var z = ++y;        //Uncaught ReferenceError: y is not defined
}

假設內部函式變數和外部函式變數重名,

function a(){
  var x = 1;

  function b(){
    var x = 'A';
    console.log('inner'+x);
  }
  console.log('outer'+x);
  b()
}
a()

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


提升變數的作用域

function a(){
    var x = "x" + y;
    console.log(x);
    var y = "y";
}

結果:x undefined
說明:js 執行引擎,自動提升了 y 的宣告,但是不會提升變數 y 的賦值,

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


全域變數

//全域變數
x = 1;

function f(){
  console.log("in-->"+x)
}

f()
console.log("out-->"+x)

全域物件 window,默認所有的全域變數都會自動系結在 window 物件下,

var x = 'test'
alert(x)
alert(window.x)

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

var x = 'test'

window.alert(x)

var old_alert = window.alert

window.alert = function(){}

//失效
window.alert(123)

//恢復
window.alert = old_alert
window.alert(456)

失效是因為全域變數 function(){}將原有的內容給覆寫了,

javascript 實際上只有一個全域作用域,任何變數(函式也可以視為變數),假設沒有在函式作用范圍內找到,就會向外查找,如果在全域作用域都沒有找到,就會報錯 Refrence


規范

由于我們的所有變數都會系結到 window 上,如果不同的 js 檔案,使用了相同的全域變數,就會產生沖突,那如何減少這樣的沖突?

//唯一全域變數
var test = {}

//定義全域變數
test.name = 'idiot'
test.add = function(a,b){
  return a+b;
}

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

jQuery 中就是使用的該方法:jQuery.name,簡便寫法:$()


區域作用域

function f(){
  for(var i=0; i<10; i++){
    console.log(i)
  }
  console.log(i++)
}

i 在 for 回圈作用域外也依舊可以使用,因此可以使用 let 來代替 var 使之成為區域變數,


常量

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

在 ES6 引入了常量關鍵字 const

const PI = '3.14'
console.log(PI)
PI = '123'	//Uncaught TypeError: Assignment to constant variable.
console.log(PI)

方法

定義方法

方法就是把函式放在物件的里面,物件只有兩個東西:屬性和方法,

var person = {
	name:"idiot",
  birth:1999,
	age:function(){
    return new Date().getFullYear()-this.birth;
  }
}
//屬性
person.name
//方法,一定要帶()
person.age()

面向物件編程

什么是面向物件

javascript,java,c# —> 面向物件,但是 javascript 有些區別!

  • 類:模板,
  • 物件:具體實體,

面向物件原型繼承

原型物件
當創建一個新函式時,系統會根據一組特定的規則為函式創建一個 prototype 屬性,該屬性會指向一個名為原型物件的物件,在默認情況下,該物件會自動生成一個建構式(constructor),該建構式是一個指向函式的指標,而在原型物件中,除了有這個建構式,我們還可以添加其他的屬性和方法,

通俗來講就是,當我們新建一個函式A時,函式A內部會有一個屬性,該屬性指向一個物件(名字叫原型物件),而這個物件里面默認有一個建構式,這個建構式指向我們最初新建的函式A,然后,我們還可以在原型物件中添加屬性和方法,

//①默認情況下,建構式是空的
function Person(){//建構式首字母大寫
}

//②添加屬性和方法
Person.prototype.name="dp";
Person.prototype.doSomething=function({
    alert(this.name);
};

//③定義好建構式和其他屬性方法之后,就可以創建實體了
var person1=new Person();
var person2=new Person();
var Student = {
  name: 'idiot',
  age: 18,
  run: function(){
    console.log(this.name+" is running.")
  }
}

var girl = {
  name: 'girl'
}

//girl 的原型物件是 Student
girl.__proto__ = Student

面向物件class繼承

class 關鍵字是在 ES6 引入的,

  1. 添加方法
//給student添加一個方法
//1、先定義一個類、屬性、方法
class student{
    constructor(name){
        this.name = name;
    }
    
    hello(){
        alert('hello');
    }
}

//使用方法
var person = new student('小明');
person.hello();
  1. 繼承
class student{
    constructor(name){
        this.name = name;
    }
    hello(){
        alert('hello');
    }
}

class xiaoStudent extends student{
    constructor(name,grade){
        super(name);
        this.grade = grade;
    }
    mygrade(){
        alert('我是一個小學生')
    }
}

//使用
var xiaoStudent = new xiaoStudent("xiaohong",1);

本質:查看物件原型,

原型鏈,

操作BOM物件(重點)

瀏覽器介紹

JavaScript 和瀏覽器關系?
JavaScript 誕生就是為了能夠讓他在瀏覽器中運行!

BOM:瀏覽器物件模型,

  • IE6~11
  • Chrome
  • Safari
  • Firefox
  • Opera

window

window 代表瀏覽器視窗,

window.alert(1)
undefined
window.innerHeight
258 
window.innerwidth
919
window.outerHeight
994
window.outerwidth
919

Navigator

Navigator 封裝了瀏覽器的資訊(不建議使用),

navigator . appName
"Netscape"
navigator . appVersion
"5.0 (windows NT 10.0; WOw64) Applewebkit/537.36 (KHTML, like Gecko)
Chrome/63.0.3239.132 Safari/537.36"
navigator . userAgent
"Mozi11a/5.0 (Windows NT 10. 0; WOw64) ApplewebKit/537.36 (KHTML, like :
Gecko) Chrome/63.0. 3239.132 Safari/537.36"
navigator. platform
"Win32"

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


Screen

代表螢屏尺寸,

screen.width
1920
screen.Height
1080

Location(重要)

代表當前頁面的 URL 資訊

location 屬性:

  • 主機:\host
  • 當前指向的位置:href
  • 協議:protocol
  • 重新加載的方法:f reload() //location.reload() 重繪網頁
    (設定新的地址:location.assign(‘想要跳轉的地址’))

document

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

//獲取具體的檔案樹節點:
<d1 id="app">
    <dt> Java</dt>
    <dd> JavaSE</dd>
    <dd> JavaEE</dd>
</d1>
<script>
    var d1 = document. getElementById(' app ');
</script>

//獲取cookie
document.cookie

//劫持cookie原理:把一段能劫持cookie的js代碼放在網站上 一點開就能把你的cookie拿了
<script src='劫持cookie.js'></script>
<!-- 獲取你的cookie上傳到他的服務器 -->

服務器端可以設定 cookiehttpOnly


history(不建議使用 )

history代表瀏覽器的歷史記錄,

history.back() //后退
history.forward() //前進

操作DOM物件(重點)

核心

瀏覽器網頁就是一個 Dom 樹形結構(與 div 包圍的標簽差不多),

  • 更新 dom 節點
  • 遍歷 dom 節點
  • 洗掉 dom 節點
  • 添加 dom 節點
    要操作一個 dom 節點,就必須先獲得這個 dom 節點,

獲得節點

<div>
    <h1>標題一</h1>
    <p id='p1'>p1</p>
    <p class='p2'>p2</p>
</div>

<script>
//對應css選擇器
var h1 = document.getElementByTagName('h1'); //這里就是獲取到了這個dom節點
var p1 = document.getElementById('p1');
var p2 = document.getElementByClassName('p2');
var father = document.getElementById('father');

var childrens = father.children;// 獲取父節點下的所有子節點
var childrens = father.children[index]; //獲取其中一個節點
//father.firstchild 獲取父節點的第一個子節點
//father.lostchild 獲取父節點的最后一個子節點
</script>

這是原生代碼,之后都用 jQuery,

更新節點

<div id="id1">

</div>

<script>
    var id1 = document.getElementById('id1')
</script>

//操作文本
id1.innerText = '123' //innerText方法修改文本內容  
id1.innerHTML = '<strong>123</strong>' //innerHTML決議HTML超文本的 可以修改id的樣式

//操作css
id1.style.color = 'red' //style.什么:style方法修改css樣式,即可以在js里操作修改樣式
id1.style.padding = '2em' //屬性使用字串包裹

洗掉節點

洗掉節點的步驟: 先獲取父節點,通過父節點洗掉自己,

<div id="father">
    <h1>標題一</h1>
    <p id='p1'>p1</p>
    <p class='p2'>p2</p>
</div>

<script>
    var self = document.getElementById('p1');
    var father = p1.parentElement; //找到p1的父節點
    father.removeChild(self) //通過父節點使用removechild刪掉自己(只有標記為id選擇器的節點才可以洗掉)

    //洗掉是一個動態的程序:
    father.removeChild(father.children[0])
    father.removeChild(father.children[1])
    father.removeChild(father.children[2])
</script>

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

插入節點

我們獲得了某個 dom 節點,假設這個 dom 節點是空的,我們通過 innerHTML 就可以增加一個元素了,但是如果這個 dom 節點已經存在元素,就不能這么干了,因為會發生覆寫,這個時候就使用追加節點的方法:

<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); //在list節點下追加子節點
</script>

創建一個新的標簽

<script>
	var js = document.getElementById('js');//已經存在的節點
    var list = document.getElementById('list');
    
    //通過JS創建一個新的節點
    var newP = document.creatElement('p');//創建一個p標簽
    newP.id = 'newP';
    newP.innerText = 'Hello,idiot';
    
    //創建一個標簽節點
    var myScript = document.creatElement('script');
    myScript.setAttribute('type','text/javascript');
    
    //可以創建一個style標簽
    var myStyle = document.creatElement('style');//創建了一個空style標簽
    myStyle.setAttribute('type','text/css');
    myStyle.innerHTML = 'body{background-color:chartreuse;}';//設定標簽內容
    
    document.getElementByTagName('head')[0].appendChild(myStyle);
</script>

在前面插入節點:insertBefore

var ee = document. getElementById('ee');
var js = document . getElementById('js');
var list = document . getElementById('list');

//要包含的節點. insertBefore(newNode, targetNode)
list.insertBefore(js,ee); //在list節點中(list是父節點),在ee節點前加入目標節點js

操作表單

表單 form

  • 文本框 <input type=text>
  • 下拉框 <select></select>
  • 單選框 <input type=radio>
  • 多選框 <input type=checkbox>
  • 隱藏框 <input type=hidden>
  • 密碼框 passwd

獲取表單資訊

<body>
<form action='#' method="post">
    //文本框
    <p>
        <span>用戶名:</span>
        <input type="text" id="username">
    </p>
    
    //單選框
    <p>
        <span>性別</span>
        <input type="radio" name="sex" value="man" id="boy"><input type="radio" name="sex" value="women" id="girl"></p>
</form>
</body>

<script>
    var input_text = document.getElementById('username';)
    //得到文本框的值
    input_text.value
    //修改文本框的值
    input_text.value='123'
    
    var boy_radio = document.getElementById('boy';)
    var girl_radio = document.getElementById('girl')
    
    //對于單選框、多選課等固定的value,boy_radio.value只能去到當前的值
    boy_radio.checked; //看回傳的結果,是否為true,如果為true則被選中
    boy_radio.checked=true; //賦值
</script>

提交表單

iframe

通過一個隱藏的 iframe 可實作不重繪頁面進行提交表單,form 表單的 target 設定為 iframename 名稱,form 提交表單給當前頁面的 iframe, 則不會重繪頁面,

<form action="#" method="post" target="t_i">
	<input type="text" name="name"/>
</form>   
<iframe name="t_i" style="display:none"></iframe> 

submit

一般表單提交通過 type=submit 實作,input type="submit",瀏覽器顯示為 button 按鈕,通過點擊這個按鈕提交表單資料跳轉到某個頁面,

<form action="#" method="post">
   <input type="text" name="name"/>
   <input type="submit" value="提交">
</form>

submit()

js 事件觸發表單提交,通過 button、鏈接等觸發事件,

<form id="form" action="#" method="post">
   <input type="text" name="name"/>
</form>

<script>
<!--js-->
document.getElementById("form").submit();
<!--jQuery-->
$("#form").submit(); 
</script>

ajax

采用 ajax 異步方式,通過 js 獲取 form 中所有 inputselect 等組件的值,將這些值組成 Json 格式,通過異步的方式與服務器端進行互動,
一般將表單資料傳送給服務器端,服務器端處理資料并回傳結果資訊等,

<form id="form"  method="post">
   <input type="text" name="name" id="name"/>
</form>

<script>
var params = {"name", $("#name").val()}
$.ajax({
   type: "POST",
   url: "#",
   data: params,
   dataType : "json",
   success: function(msg){
   }
});
</script>

一般配合后端的 @ResponseBody@RequestBody 使用,或者是 @RestController 這樣該類里面所有的方法都只會回傳 json 字串了,不用再每一個方法上都添加 @ResponseBody 了;

同時這里要注意的是,不能使用 dataType: "json",不然會報 parsererror 的錯誤,因為 dataType: "json" 會試圖將 controller 的回傳值決議成 JSON ,但當回傳值是一個字串或者其他值時,它并不是一個真正的 JSON,決議器會決議失敗的!

ajax 請求中還要一個重要的引數:contentType: "application/json",表示傳入引數的格式,一般會在后面加一個 charset=utf-8,減少亂碼,

XHR

AJAX 使用的 XMLHttpRequest 的物件與服務器通信,讓我們嘗試通過下面顯示的影像了解 AJAX 的流程或 AJAX 的作業原理,
 正如在上面的示例中所看到的,XMLHttpRequest 物件起著重要作用,

  1. 用戶從 UI 發送請求,JavaScript 中呼叫 XMLHttpRequest 物件,
  2. HTTP 請求由 XMLHttpRequest 物件發送到服務器,
  3. 服務器使用 JSP,PHP,Servlet,ASP.net 等與資料庫互動,
  4. 檢索資料,
  5. 服務器將 XML 資料或 JSON 資料發送到 XMLHttpRequest 回呼函式,
  6. HTML 和 CSS 資料顯示在瀏覽器上,
<script>
	var money = $("#money").val();
	var XHR = new XMLHttpRequest();
	var FD  = new FormData();
	FD.append("money",money);
	XHR.open('POST', "#");
	XHR.send(FD);
</script>

后記

掌握了這篇博文的內容后,完全能夠勝任一般的 JS 開發,要想更進一步,則需要自己繼續鉆研,加油,騷年!

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

標籤:其他

上一篇:一篇文章快速搞懂JavaScript事件回圈(微任務、宏任務),同步異步和阻塞非阻塞

下一篇:操作元素案例——購物車演示

標籤雲
其他(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)

熱門瀏覽
  • vue移動端上拉加載

    可能做得過于簡單或者比較low,請各位大佬留情,一起探討技術 ......

    uj5u.com 2020-09-10 04:38:07 more
  • 優美網站首頁,頂部多層導航

    一個個人用的瀏覽器首頁,可以把一下常用的網站放在這里,平常打開會比較方便。 第一步,HTML代碼 <script src=https://www.cnblogs.com/szharf/p/"js/jquery-3.4.1.min.js"></script> <div id="navigate"> <ul> <li class="labels labels_1"> ......

    uj5u.com 2020-09-10 04:38:47 more
  • 頁面為要加<!DOCTYPE html>

    最近因為寫一個js函式,需要用到$(window).height(); 由于手寫demo的時候,過于自信,其實對前端方面的認識也不夠體系,用文本檔案直接敲出來的html代碼,第一行沒有加上<!DOCTYPE html> 導致了$(window).height();的結果直接是整個document的高 ......

    uj5u.com 2020-09-10 04:38:52 more
  • WordPress網站程式手動升級要做好資料備份

    WordPress博客網站程式在進行升級前,必須要做好網站資料的備份,這個問題良家佐言是遇見過的;在剛開始接觸WordPress博客程式的時候,因為升級問題和博客網站的修改的一些嘗試,良家佐言是吃盡了苦頭。因為購買的是西部數碼的空間和域名,每當佐言把自己的WordPress博客網站搞到一塌糊涂的時候 ......

    uj5u.com 2020-09-10 04:39:30 more
  • WordPress程式不能升級為5.4.2版本的原因

    WordPress是一款個人博客系統,受到英文博客愛好者和中文博客愛好者的追捧,并逐步演化成一款內容管理系統軟體;它是使用PHP語言和MySQL資料庫開發的,用戶可以在支持PHP和MySQL資料庫的服務器上使用自己的博客。每一次WordPress程式的更新,就會牽動無數WordPress愛好者的心, ......

    uj5u.com 2020-09-10 04:39:49 more
  • 使用CSS3的偽元素進行首字母下沉和首行改變樣式

    網頁中常見的一種效果,首字改變樣式或者首行改變樣式,效果如下圖。 代碼: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, ......

    uj5u.com 2020-09-10 04:40:09 more
  • 關于a標簽的講解

    什么是a標簽? <a> 標簽定義超鏈接,用于從一個頁面鏈接到另一個頁面。 <a> 元素最重要的屬性是 href 屬性,它指定鏈接的目標。 a標簽的語法格式:<a href=https://www.cnblogs.com/summerxbc/p/"指定要跳轉的目標界面的鏈接">需要展示給用戶看見的內容</a> a標簽 在所有瀏覽器中,鏈接的默認外觀如下: 未被訪問的鏈接帶 ......

    uj5u.com 2020-09-10 04:40:11 more
  • 前端輪播圖

    在需要輪播的頁面是引入swiper.min.js和swiper.min.css swiper.min.js地址: 鏈接:https://pan.baidu.com/s/15Uh516YHa4CV3X-RyjEIWw 提取碼:4aks swiper.min.css地址 鏈接:https://pan.b ......

    uj5u.com 2020-09-10 04:40:13 more
  • 如何設定html中的背景圖片(全屏顯示,且不拉伸)

    1 <style>2 body{background-image:url(https://uploadbeta.com/api/pictures/random/?key=BingEverydayWallpaperPicture); 3 background-size:cover;background ......

    uj5u.com 2020-09-10 04:40:16 more
  • Java學習——HTML詳解(上)

    HTML詳解 初識HTML Hyper Text Markup Language(超文本標記語言) 1 <!--DOCTYPE:告訴瀏覽器我們要使用什么規范--> 2 <!DOCTYPE html> 3 <html lang="en"> 4 <head> 5 <!--meta 描述性的標簽,描述一些 ......

    uj5u.com 2020-09-10 04:40:33 more
最新发布
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

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

    uj5u.com 2023-04-20 07:59:23 more
  • 生產事故-走近科學之消失的JWT

    入職多年,面對生產環境,盡管都是小心翼翼,慎之又慎,還是難免捅出簍子。輕則滿頭大汗,面紅耳赤。重則系統停擺,損失資金。每一個生產事故的背后,都是寶貴的經驗和教訓,都是專案成員的血淚史。為了更好地防范和遏制今后的各類事故,特開此專題,長期更新和記錄大大小小的各類事故。有些是親身經歷,有些是經人耳傳口授 ......

    uj5u.com 2023-04-18 07:55:04 more
  • 記錄--Canvas實作打飛字游戲

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 打開游戲界面,看到一個畫面簡潔、卻又富有挑戰性的游戲。螢屏上,有一個白色的矩形框,里面不斷下落著各種單詞,而我需要迅速地輸入這些單詞。如果我輸入的單詞與螢屏上的單詞匹配,那么我就可以獲得得分;如果我輸入的單詞錯誤或者時間過長,那么我就會輸 ......

    uj5u.com 2023-04-04 08:35:30 more
  • 了解 HTTP 看這一篇就夠

    在學習網路之前,了解它的歷史能夠幫助我們明白為何它會發展為如今這個樣子,引發探究網路的興趣。下面的這張圖片就展示了“互聯網”誕生至今的發展歷程。 ......

    uj5u.com 2023-03-16 11:00:15 more
  • 藍牙-低功耗中心設備

    //11.開啟藍牙配接器 openBluetoothAdapter //21.開始搜索藍牙設備 startBluetoothDevicesDiscovery //31.開啟監聽搜索藍牙設備 onBluetoothDeviceFound //30.停止監聽搜索藍牙設備 offBluetoothDevi ......

    uj5u.com 2023-03-15 09:06:45 more
  • canvas畫板(滑鼠和觸摸)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>canves</title> <style> #canvas { cursor:url(../images/pen.png),crosshair; } #canvasdiv{ bo ......

    uj5u.com 2023-02-15 08:56:31 more
  • 手機端H5 實作自定義拍照界面

    手機端 H5 實作自定義拍照界面也可以使用 MediaDevices API 和 <video> 標簽來實作,和在桌面端做法基本一致。 首先,使用 MediaDevices.getUserMedia() 方法獲取攝像頭媒體流,并將其傳遞給 <video> 標簽進行渲染。 接著,使用 HTML 的 < ......

    uj5u.com 2023-01-12 07:58:22 more
  • 記錄--短視頻滑動播放在 H5 下的實作

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 短視頻已經無數不在了,但是主體還是使用 app 來承載的。本文講述 H5 如何實作 app 的視頻滑動體驗。 無聲勝有聲,一圖頂百辯,且看下圖: 網址鏈接(需在微信或者手Q中瀏覽) 從上圖可以看到,我們主要實作的功能也是本文要講解的有: ......

    uj5u.com 2023-01-04 07:29:05 more
  • 一文讀懂 HTTP/1 HTTP/2 HTTP/3

    從 1989 年萬維網(www)誕生,HTTP(HyperText Transfer Protocol)經歷了眾多版本迭代,WebSocket 也在期間萌芽。1991 年 HTTP0.9 被發明。1996 年出現了 HTTP1.0。2015 年 HTTP2 正式發布。2020 年 HTTP3 或能正... ......

    uj5u.com 2022-12-24 06:56:02 more
  • 【HTML基礎篇002】HTML之form表單超詳解

    ??一、form表單是什么

    ??二、form表單的屬性

    ??三、input中的各種Type屬性值

    ??四、標簽 ......

    uj5u.com 2022-12-18 07:17:06 more