Web前端-JavaScript基礎教程上

来源:https://www.cnblogs.com/dashucoding/archive/2019/03/10/10503848.html
-Advertisement-
Play Games

前端 基礎教程 將放入菜單欄中,便於閱讀! 是`web JavaScript JavaScript`是必備的前端技能。 是用來描述網頁的結構, 是用來描述網頁的延時,而 是用來描述網頁的行為的。 是一種高端,動態,弱類型的編程語言。來源於 ,它的一等函數來源於 ,原型來源於 。 windwo.onl ...


Web前端-JavaScript必備知識點

Web前端-JavaScript基礎教程

將放入菜單欄中,便於閱讀!

JavaScriptweb前端開發的編程語言,大多數網站都使用到了JavaScript,所以我們要進行學習,JavaScript是必備的前端技能。

HTML是用來描述網頁的結構,css是用來描述網頁的延時,而JavaScript是用來描述網頁的行為的。

JavaScript是一種高端,動態,弱類型的編程語言。來源於Java,它的一等函數來源於Scheme,原型來源於Self

var x; // 聲明變數為x
x=0; // 給變數賦值為0

var student = {
 name: "dashu",
 age: "12"
};

// 通過"."或"[]"來訪問對象屬性
student.name;

student["age"];

// 創建新的屬性,進行添加操作
student.tall = "123";

// {}空對象,沒有屬性
student.dog = {};

var num = [1,2,3,4,5];
num[0];
num.length;
num[num.length-1];

// 添加新元素
num[num.length] = 6;
// 改變已有的元素
num[num.length] = 7;

// 定義空元素 
var em = [];
em.length;

// 數組對象
var students = [
 { name: dashu1, age: 1 },
 { name: dashu2, age: 2 }
];

var dashu = {
 dog: [ [1,2], [3,4] ],
 dog1: [ [2,3] ]
};
function add(x) {
 return x+1;
}
add(1);

var num = function(x) {
 return x+1;
}

var arrs = []; // 定義空數組
arrs.push(1,2,3); // push()添加元素
arrs.reverse(); // 元素次序反轉

// 兩點
points.dist = function() {
 var p1 = this[0];
 var p2 = this[1];
  // 數組的兩個元素
  // x 軸距離
  var a = p2.x - p1.x;
  var b = p2.y - p2.y;
  return Math.sqrt( a*a + b*b); //平方根
};
points.dist();

function da(x) {
 if(x>=0){
  return x;
 }else{
  return -x;
 }
}

// 計算階乘
function da(n){
 var num = 1;
 while(n>1){
  num *= n;
  n--;
 }
 return num;
}
function Point(x,y) {
 this.x = x;
 this.y = y;
}

var a = new Point(1,1);

Point.prototype.r = function() {
 return Math.sqrt{
  this.x * this.x +  this.y * this.y
 };
}

p.r();
<html>
<head>
<script src="library.js"></script>
</head>
<body>
<p>html</p>
<script>
</script>
</body>
</html>
<script>
 function add(){
  var a = confirm("html");
  if(a){
   window.location = "";
  }
 }
 setTimeout(add, 2222);
</script>
windwo.onload = function() {
 var images = document.getElementsByTagName("img");
 for(var i = 0; i<images.length; i++){
  var image = images[i];
  if(image.addEventListener){
    image.addEventListener("click", hide, false);
   }else{
    image.attachEvent("onclick", hide);
   }
 }
}
font-weight: bold;
text-decoration: underline;
border: solid black 1px;
vertical-align: top;

保留字:

break, delete, function, return, typeof
case, do, if, switch, var
catch, else, in, this, void
continue, false, instanceof, throw, while
debugger, finally, new, true, with
default, for, null, try
class const enum export extends import super
implements let privae public yield
interface package protected static
abstract double gote native static 
boolean enum implements package supper
byte export import private synchronized
char extends int protected throws
class final interface public transient
const float long short volatile
Math.pow() 次冪
Math.round() 四捨五入
Math.ceil() 向上求整
Math.floor() 向下求整
Math.abs() 求絕對值

Math.max()
Math.min()

Math.random() 隨機數
Math.PI 圓周率
Math.E 自然對數的底數

Math.sqrt() 平方根
Math.pow() 立方根

日期和時間:Date()構造函數,創建時間和日期的對象。

var now = new Date(); 當前日期和時間

文本:是字元串,是由一組16位組成的不可變的有序列。

字元串

var s = "dashu";
s.charAt(0);

布爾值,在JavaScript中有布爾值類型,為truefalse

nullJavaScript中表示空值,nulltypeof運行為字元串object。null為特殊的對象值,含義為非對象。

null類型的唯一一個成語,它表示數字,字元串和對象是“無值”的。

undefined值表示“空值”,表明變數沒有初始化,表明屬性或元素不存在,返回沒有值就為undefined。值為“未定義”,運行typeof時,返回的“undefined”。

全局屬性:

undefined,Infinity,NaN
String(),Number(),Boolean()

var s = "dashu";
var n = "123";
var b = true;
var S = new String(s);
var N = new String(n);
var B = new String(b);

"=="和"==="

第一個將原始值和其包裝對象視為相等
第二個則是視為不等

undefined, null, 布爾值, 數字, 字元串
數組和函數
var str = "dashu";
str.toUpperCase();
s;
var a = { x:1 };
a.x = 3;
a.y = 3;

var a = [1,2,3];
a[0]=2;

var a = { x: 1 };
var b = { x: 1 };

a === b // false

var a = [];
var b = [];

a === b; // false

對於上面的也是不相等的。

只有指向一樣的引用才是相等的。

var a = [];
var b = a;
b[0] = 1;
a[0]; // 1
a === b // true

複製數組:

var a = [ 1,2,3 ];
var b = [];
for(var i = 0; i<a.length; i++){
 b[i] = a[i];
}

比較數組:

function equalArrays(a,b){
 if(a.length != b.length) return false;
 for(var i = 0; i<a.lenght; i++)
  if(a[i] !== b[i]) return false;
 return true;
}

類型轉換:

"2" * "3" // 6
undefined 轉 字元串 "undefined",數字"NaN",布爾值"false"

null 轉字元串"null", 數字為0

"" 空字元串 轉數字 0 

相等:

null == undefined
"0" == 0
0 == false
"0" == false
Number("2"); // 2
String(false); // "false"
Boolean([]); // true
Object(2) // new Number(2);

toFixed根據小數點後的指定數字轉字元串

var a = 1234.567;
a.toFixed(0) // "1234"
a.toFixed(2) // "1234.56"
parseInt("1 dash"); // 1
parseFloat(" 2, dashu") // 2

toString()返回一個反映對象的字元串。

[1,2,3].toString(); // "1,2,3"

valueOf()方法返回對象本身

變數聲明:

var i;

迴圈:

for(var i = 0; i<6; i++){
 console.log(i);
};

for(var item in lists) console.log(item);

作用域:

var q = "dashu"; // 聲明一個全局變數
function add() {
 var q = "da"; // 聲明一個局部變數
 return q;
}

聲明全局變數可以不用var聲明
function test(item) {
 var i = 0;
 if(typeof item == "object"){
  var j = 0;
 for(var k = 0; k < 10; k ++){
   console.log(k);
  }
  console.log(j);
 }
}

函數定義表達式:

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

ECMAScript 6 入門

let用於聲明變數,只有在所在代碼塊有效

{
 let a = 1;
 var b = 2;
}

a // ReferenceError: a is not defined.
b // 2

let只有在它所在的代碼塊有效:

for (let i = 0; i < 10; i++) {
}
console.log(i);
// ReferenceError: i is not defined
for (let i = 0; i < 3; i++) {
  let i = 'a';
  console.log(i);
}
// a
// a
// a

函數內部變數i和迴圈變數i不在同一作用域。

// var 
console.log(a); // 輸出undefined
var a= 2;

// let 
console.log(b); // 報錯ReferenceError
let b= 2;

var命令會發生變數的提升,運行時,變數a已經存在了,而let不會。

暫時性死區:

var a= 123;

if (true) {
  a= '123'; // ReferenceError
  let a;
}

如果一個變數沒有被聲明,不會報錯:

typeof a // "undefined"

如果調用函數,而函數中的參數變數沒有被聲明,就會導致死區,報錯。

// 不報錯
var a = a;

// 報錯
let a = a;
// ReferenceError: x is not defined

不可以重覆聲明:

// 報錯
function b() {
  let a = 100;
  var a = 10;
}

// 報錯
function b() {
  let a = 100;
  let a = 10;
}

塊級作用域的需要,如果沒有塊級作用域可能會覆蓋外層變數,塊級作用域,如,變數迴圈i,迴圈結束後,沒有消失,而是變為全局變數。

外層代碼塊不受內層代碼塊的影響。

function add() {
  let a = 5;
  if (true) {
    let a = 1;
  }
  console.log(a); // 5
}

在ES6中允許使用塊級作用域中聲明函數。

const命令

const聲明常量的值,一旦聲明,就不能改變。

const PI = 3.14;
PI // 3.14

PI = 1;
// TypeError: Assignment to constant variable.

const一旦聲明變數,就要進行初始化,不賦值,就報錯

const a;
// SyntaxError: Missing initializer in const declaration

const只在聲明的塊中有效,聲明的變數不會提升,存在暫時性死區,不能重覆聲明,本質是指變數指向記憶體地址所保存的數據不能改動。

const a= {};

a.prop = b;
a.prop // b 

// 將 a 指向另一個對象,就會報錯
a= {}; // TypeError: "a" is read-only

const ab = [];
ab.push('dashu'); // 可執行
ab.length = 0;    // 可執行
ab = ['dashu'];    // 報錯,這就導致了錯誤,因為把一個數組賦值給變數,就不是同個地址了

Object.freeze對象凍結

const foo = Object.freeze({});

// 下麵一行不起作用;
// 會報錯
foo.prop = 12;

頂層對象

window.a = 1;
a // 1

a = 2;
window.a // 2

// es6開始
// var,function聲明變數是全局變數,是頂層對象的屬性

var a = 1;
window.a // 1

// let const class 聲明就不是了
let b = 1;
window.b // undefined
IE: trident內核
Firefox: gecko內核
Safari: webkit內核
Opera: Blink內核
Chrome: Blink

<!DOCTYPE> 聲明位於文檔中的最前面位置,處於<html>標簽之前。

用於告訴瀏覽器文檔使用哪種HTML或XHTML規範。

區分Quirks模式和Standards模式區別:

Standards模式是標準模式,遇到一個問題是以前的規則不相容新的規則,使用了新的功能,就弄個參數,如果等於就使用新的規則,不等於就使用之前的規則,這就是Quirks模式。

區分與,佈局,樣式解析,腳本執行,三個方面。

div+css佈局table優點,改變的時候方便,只改css文件,頁面載入速度快,結構化清晰,頁面顯示簡潔,表現與結構分離,易於seo優化。

JavaScript的數據類型有:

基本數據類型:

String, Boolean, Number, Undefined, Null

引用數據類型:

Object

JavaScript中的繼承:

原型鏈繼承,構造函數繼承,組合繼承,寄生式繼承等

DOM操作:

createDocumentFragment();
createElement()
createTextNode()
appendChild()
removeChild()
replaceChild()
insertBefore()
getElementsByTagName()
getElementsByName()
getElementsById()

JavaScripttypeof返回的數據:

object number function boolean underfined

JavaScript本地對象可以實例化,內置對象不能實例化,宿主自帶document,window

var str = '123';
str = str.split('').reverse().join('');
// '321'

200:請求已成功
302:請求的資源臨時從不同的 URI 響應請求
403:伺服器已經理解請求,但是拒絕執行它
404:請求失敗

node.js, mongodb, npm, mvvm, react, angularjs, webpack等

應用 web 標準進行設計,99%的網站都需要被重構。

數組解構:

let a = 1;
let b = 2;
let c = 3;

let [a, b, c] = [1, 2, 3];

效果

效果

let [x, y, z] = new Set(['a', 'b', 'c']);
x // "a"

效果

let [x = 1] = [undefined];
x // 1

let [x = 1] = [null];
x // null
var {x = 2} = {x: undefined};
x // 2

var {x = 2} = {x: null};
x // null

let {length : len} = 'hello';
len // 5

如何優化頁面的載入速度?

減少css文件的數量和大小,壓縮css和js文件代碼;圖片的大小;把css樣式表放在頂部,把js放置在底部;減少http請求數,使用外部js或css。

頁面性能優化:壓縮,合併,減少請求,diam層析優化

記憶體泄漏的原因有:記憶體泄漏是任何對象在不使用時它還存在,導致記憶體泄漏為setTimeout,閉包,控制台日誌,迴圈等。

從伺服器推送數據到客戶端:

html5 websocket
websocket flash

庫:

jquery, yui, prototype, dojo, ext.js

框架:

modernizr, underscore, backbone

前端開發:

Sublime Text, Eclipse, Notepad, Firebug, HttpWatch

前端路由
是指
在不進行後端請求的情況下對頁面進行跳轉

雙向數據綁定:angular

單向數據綁定:knockout

單純地 View 層: React

jquery優化,優先使用id選擇器,jquery如果要使用dom元素,就建議存儲一個變數保存使用,使用dom操作的過程非常耗性能。

class前使用tag

jquery操作dom的框架,jqueryui是基於jquery做的一個ui組件庫。

jquery一個對象可以同時綁定多個事件,底層實現原理:addEventListenerattachEvent相容處理做事件註冊。

Jquery.extend 用來擴展 jQuery 對象本身
jquery.fn.extend 用來擴展 jQuery 實例的

如何將數組轉換為json字元串,然後換回來?

$.parseJSON('{"name":"dashu"}');
JSON.stringify

在jquery.fn中的init返回的this指的是?返回this又是?

this是執行init構造函數自身的,其實就是jquery實例對象,返回this實現jquery的鏈式操作。

http狀態碼:

1##: 用於指定客戶端的動作;
2##: 用於表示請求成功;
3##: 用於定位頭信息;
4##: 用於指出客戶端的錯誤;
400 語義有誤
401 當前請求需要用戶驗證
403 伺服器已經接收請求,但拒絕執行
5##: 用於指出伺服器的錯誤
503: 服務不可用

前端開發優化:

減少http請求次數,css,js代碼壓縮,圖片大小控制適合,CDN托管,Data緩存。可以用innerHTML代替dom操作,減少dom操作次數,優化js性能。

可以多用className,少用全局變數,緩存dom節點。

少用css表達式,圖片預載入,樣式放頂部,腳本放在底部,使用div+css佈局。

var str=$("a").attr("href")

將數組轉化為 json 字元串

$.fn.stringifyArray = function(array) {
return JSON.stringify(array)
}
$.fn.parseArray = function(array) {
return JSON.parse(array)
}

jquery是一個js庫,而jquery ui是在jquery基礎上,利用jquery的擴展性設計的插件。

sub,add.call(sub,3,1) == add(3,1) 
alert(4);

function add(a,b){
alert(a+b);
}
function sub(a,b){
alert(a-b);
}
add.call(sub,3,1);

非同步載入方式:

defer, ie
async,
callBack

上述描述的json術語是一種輕量級的數據交換格式,數據格式簡單,易於讀寫。

判斷對象是否屬於某個類:

instanceof

原型對象也是普通的對象,不為Null,就叫原型鏈

setInterval(fn1,500)// 重覆執行
setInterval(fn1(),500)// 只執行一次

效果

效果

效果

原生JavaScript,return false;只阻止預設行為
jQuery中的return false; 既阻止預設行為,又阻止冒泡

效果

事件委托指利用冒泡的原理,自己所要觸發的事件,讓其他元素取執行。

join()表示用數據中所用元素拼接成字元串。
split()把字元串分割開。
slice()可以從已有的數組返回選定的元素。
splice()從數據中添加或刪除,返回被刪除的部分數組。

效果

閉包讀取函數內部的變數值,並保持在記憶體中。

apply()call()

作用是一樣的,傳遞的參數就不同了。

Object.call(this,obj1,obj2,obj3)
Object.apply(this,arguments)

阻止冒泡:

ev.stopPropagation();
ev.cancelBubble = true;

效果

效果

高性能的JavaScript?

使用DocumentFragmentcloneinnerHTMLswitch,三目運算符,setInterval等。

效果

call()apply()區別在於apply的參數是數組形式,而call的參數是單個的值。

dom操作:

createDocumentFragment()
createTextNode()
appendChild()
removeChild()
replaceChild()
insertBefore()
getElementsByTagName()
getElementsByName()
getElementById()

效果

class Point {
add(x, y) {
this.x = x;
this.y = y;
}
toString() {
return '('+this.x+', '+this.y+')';
}
}

判斷一個對象是否屬於某個類:

instanceof constructor

嚴格模式

"use strict";
  function strict(){
    "use strict";
    return "這是嚴格模式。";
  }

  function notStrict() {
    return "這是正常模式。";
  }

window.onload()方法需要等所有元素載入完畢才執行,$(document).ready只要dom結構載入完畢就行。

效果

頁面載入性能優化:

壓縮css,js文件;合併Js.css文件,減少http請求,使用外部js,css文件,減少dom操作。

效果

this:

var User = {
count: 1,
add: function() {
return this.count;
}
};
console.log(User.add()); 
var func = User.add;
console.log(func());

1 和 undefined

數組去重:

var arrs = [ 1,2,2,3,4 ];
function add(){
 // 定義一個空數組
 var newArr = [];
 // 定義一個空對象
 var obj = {};
 // 定義索引
 var index = 0;
 // 定義數組的長度
 var long = arr.length
 // 迴圈索引
 for(var i = 0; i<long; i++){
  if(obj[arrs[i]]==undefined){
   obj[arrs[i]] = 1;
   newArr[index++] = arr[i];
  }else if(obj[arrs[i]==1){
   continue;
  }
  return newArr;
 }
 var new Arr2 = add(arrs);
}
// 數組去重:

function add(array){
    var aaa = []; //一個新的臨時數組
    for(var i = 0; i < array.length; i++){
        if(aaa.indexOf(array[i]) == -1){
            aaa.push(array[i]);
        }
    }
    return temp;
}

var arr = [1,2,2,4,9,6,7,5,2,3,5,6,5];
console.log(add(arr));
function add(arr){
 arr.sort();
 for(var i = 0; i<arr.length-1; i++){
  if(arr[i] == arr[i+1]){
   arr.splice(i,1);
   i--;
   }
 }
 return arr;
}
function add(arr){
 // 定義一個空數組
 var newArr=[];
 for(var i=0; i<arr.length; i++){
  if(newArr.indexOf(arr[i]) == -1){
   newArr.push(arr[i]);
  }
 }
 return newArr;
}
function add(arr){
 var obj = {};
 var newArr = [];
 for(var i = 0; i<arr.length; i++){
  if(obj[arr[i]] == nudefined){
   newArr.push(arr[i]);
    obj[arr[i]] = 1;
  }
 }
 return newArr;
}

效果

ajax的過程,創建XMLHttpRequest對象,創建一個非同步調用對象,創建新的HTTP請求,並指定HTPP請求的方法,url以及驗證信息,設置響應HTTP請求狀態變化的函數,發送HTTP請求,獲取非同步調用返回的數據。

如何解決跨域問題,跨域就是,協議,功能變數名稱,埠相同才同域,否則為跨域。ajax不可以跨域獲取數據,可以獲取文件內容,使用js腳本,函數調用,調用的參數為伺服器返回的數據。

ajax請求,XMLHttpRequest標準瀏覽器,ActiveXObjectie瀏覽器:

var ha = null; // 創建對象
if(window.XMLHttpRequest){
 ha = new XMLHttpRequest();
}else{
 ha = new ActiveXObject("Microsoft.XMLHTTP");
}
ha.open(“方式”,”地址”,”標誌位”);//初始化請求
ha.setRequestHeader(“”,””);//設置 http 頭信息
ha.onreadystatechange =function(){}//指定回調函數
ha.send();//發送請求

標簽語義化複合物文檔語義的標簽。
用正確的標簽做正確的事情,html語義化讓頁面的內容結構化,便於對瀏覽器,搜索引擎解析。

效果

效果

偽類清除浮動,after偽元素,clear:both

效果

效果

window, document, location, screen, history, navigator
alert() open() close() setInterval() setTimeout() clearInterval() clearTimeout()

效果

$.ajax({
 url: "",
 data: // post數組
 dataType: "json",
 type: "POST",
 success: function(data){
 },
 error: function(){
 }
});

記憶體泄漏:setTimeout,閉包,控制台日誌,迴圈。

<script>標簽的位置

<!DOCTYPE html>
<html>
<head>
<title></title>
<script></script>
</head>
<body>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<script></script>
</body>
</html>

非同步腳本:

<script type="text/javascript" async src=""></script>

結言

好了,歡迎在留言區留言,與大家分享你的經驗和心得。

感謝你學習今天的內容,如果你覺得這篇文章對你有幫助的話,也歡迎把它分享給更多的朋友,感謝。

作者簡介

達叔,理工男,簡書作者&全棧工程師,感性理性兼備的寫作者,個人獨立開發者,我相信你也可以!閱讀他的文章,會上癮!,幫你成為更好的自己。長按下方二維碼可關註,歡迎分享,置頂尤佳。

努力努力再努力Jeskson


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

-Advertisement-
Play Games
更多相關文章
  • 1、打開app的build.gradle文件: 頂部停用apt插件: 2、去project的build.gradle文件中聲明apt的插件路徑: ...
  • #import @interface ViewController () @property (nonatomic,retain) UIButton *beginTestBtn; @property (nonatomic,retain) UILabel *textLabel; @end @imple... ...
  • 蘋果電腦(Mac mini或Macbook或iMac)恢復出廠設置,首先要做好如下的準備: 第一:數據的備份;第二:保證正常的wifi連接;第三:有線的滑鼠鍵盤連接; 具體恢復操作步驟: 步驟一:電腦啟動時,按下鍵盤組合鍵(option + command + R,或alt + command + ... ...
  • 認識weexplus weexplus是基於weex官方的二次開發版本,weex和react native一樣同屬第2代跨平臺技術,解決了第一代性能低下,體驗不好的問題,同時保留了第一代 多平臺一套代碼,基於web技術棧,支持動態發版 等所有優點。 weexplus腳手架作者 開發 運行開發環境 ( ...
  • 說明 基於wexplus開發app是來新公司才接觸的,之前只是用過weex體驗過寫demo,當時就被用vue技術棧來開發app的開發體驗驚艷到了,這個開發體驗比react native要好很多,對於我這個純web前端來說簡直不要太好! weexplus是基於weex官方的二次開發版本,旨在解決wee ...
  • 一、前言 在上一章的學習中,我們學習了 Vue 中組件的基礎知識,知道了什麼是組件,以及如何創建一個全局/局部組件。不知道你是否記得,在上一章中,我們提到組件是一個可以復用的 Vue 實例,它與 Vue 實例也只是擁有些許的差異。本章,我們將繼續學習組件的相關基礎知識,瞭解 Vue 的組件中的 da ...
  • 續前文: "線上代碼離線翻譯Chrome插件"一馬"v0.0.8" . 主要改進如下. 項目源碼庫: "program in chinese/webextension_github_code_translator" 添加基本詞庫 發現部分用戶安裝了"一馬"但未安裝離線英漢詞典插件, 這將導致翻譯完全 ...
  • "初めてのJavaScript 第3版 ES2015以降の最新ウェブ開発" . "示例代碼" : 譯者對採用日語命名的緣由在此闡述 "初めてのJavaScript 第3版 ES2015以降の最新ウェブ開発" (2016年12月): 翻訳の過程で、一部の例を日本語の識別子(変數名や関數名など)を使って ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...