前端筆記知識點整合之JavaScript(五)關於數組和字元串那點事

来源:https://www.cnblogs.com/rope/archive/2019/03/23/10584670.html
-Advertisement-
Play Games

一、數組 1.1數組概念 數組(array)是一個有序的數據集合。說白了,數組就是一組數。數組內部可以存放一個或多個單獨的數據,整體組成數組。 定義數組最簡單的方式:數組字面量。 數組的字面量“[]”。習慣將數組賦值給一個變數。 數組的字面量就是方括弧,這是定義數組最簡單的方式,至於更多創建數組的方 ...


一、數組

1.1數組概念

數組(array)是一個有序的數據集合。說白了,數組就是一組數。數組內部可以存放一個或多個單獨的數據,整體組成數組。

定義數組最簡單的方式:數組字面量。

數組的字面量[]”。習慣將數組賦值給一個變數。

 

var arr = [];

var arr = [1,2,3,4,5,6,7,888,999,666];
arr[5] = 88; //把數組下標為5的項改為88(設置數組中的某一項)
console.log(arr);
console.log(arr[0]); //1
console.log(arr[8]); //999
console.log(arr[9]); //666
console.log(arr[12]); //undefined

 

數組的字面量就是方括弧,這是定義數組最簡單的方式,至於更多創建數組的方式,後續會提到。

裡面用,”逗號隔開每個值,最後一項沒有逗號。

變數arr就是一個數組變數,裡面存儲的不是一個數字,而是一組數。可以使用下標(編號)或稱為“索引值(index)”,來精確訪問數組中的某一項,下標從0開始。

 

數組中,並不規定保存相同類型的值,但是實際應用中,一般還是將相同類型的值保存在一起。

下麵的數組中,存儲的記憶體類型都不一樣,是合法。

function fn(){
   alert("你好");
}
var arr = [3,4,"麽麽噠!",12,true,[],fn];
console.log(arr);
console.log(arr[6]);
arr[6]();//數組下標為6的項,是以函數,是函數就能運行

 


 

1.2數組length屬性

數組有一個length屬性,英語是“長度”的意思,表示這個數組的項的個數。

什麼是“屬性”,數組是對象,對象就有屬性,屬性就是描述這個對象的特點、特征、特性。用來表示一個對象的屬性,用“.”點來表示一個對象的屬性:

 

 arr.length;

 

var arr = [100,200,3,4,5,6,7,888,999,666,12345,3333,7777];
console.log(arr);
console.log(arr.length); //12 數組中有幾項,就彈出幾
console.log(arr[0] + 1); //數組第0項是100,所以100+1 =101
console.log(arr[arr.length-1]); //獲取數組最後一項,數組最大下標是arr.length-1,比arr.length-1還大是undefined

console.log(arr[100]); //undefined
arr[4] = "我是下標第4項";
arr.length = 18; //強行把數組長度屬性改為18
arr[66] = 8989; //可以跳躍設置數組,設置下標為66的項,並拉長了數組
console.log(arr); 

 

寫一個小於數組元素的值會縮短數組,寫0會徹底清空數組arr.length = 2;那麼只會有兩項,其餘都丟失了

 arr.length = 2;

 arr.length = 100;

案例:

用數組判斷星期幾:

var arr = ["星期天","星期一","星期二","星期三","星期四","星期五","星期六"];
//假如今天是星期二、判斷1000天後是星期幾
var week = (1000 % 7 + 2) % 7;//0~6
console.log(week);
console.log(arr[week]);

隨機點名:

var stuName = ["王大錘","李鐵錘","二蛋","二狗子","黑貓","白貓","小丸子"];
var num = parseInt(Math.random() * stuName.length);
console.log(stuName[num]);
document.write('<h1>'+stuName[num]+'</h1>');

 


 

1.3數組的遍歷

 

數組裡面存放的是一組數,我們經常需要對這些數字都進行一些操作。

就需要用for迴圈語句來遍歷它。這是一個經典的for殼子:

 

var arr = [21,214,52,85,88,2,53,77,100,76];
for(var i = 0;i <= arr.length - 1;i++){
   if(arr[i] % 2 == 0){
       console.log(arr[i]); //取出每一項能整除2的數據,進行輸出
   }
}

//給數組中的每一項都乘以2,數組遍歷,計算後給每一項賦值
for(var i = 0;i <= arr.length - 1;i++){
   arr[i] *= 2;
}
console.log(arr);


//數組樣本
var arr = [...];
//遍歷,計算偶數的個數
//計算平均數,平均數就是:總和/個數
var count = 0; //累加偶數個數
var sum = 0; //計算平均數
for(var i = 0;i < arr.length;i++){
    sum += arr[i]; //計算所有項的總和
    if(arr[i] % 2 == 0){
        count++; //如果是偶數,計數器+1
    }
}
alert("偶數的個數是:" + count);
console.log("平均數是:" + (sum / arr.length));

 


1.4數組是引用類型

 var arr = [1,2,3,4];

 console.log(typeof arr); //object

 

用typeof arr 檢測,會發現數組是Object,數組是對象。

怎麼檢測數組是數組呢?高級JS再說。

 

基本類型:是保存值,判斷時,是判斷值是否相等。 

var a = 1; //基本類型
var b = a; //會把a的值複製一個副本給b
console.log(a);//1
console.log(b);//1
console.log(a == b);//true,值是相等的

 

引用類型:保存記憶體地址,比較時是判斷記憶體地址是否相等。

//都是數組[1,2,3,4],記憶體、長度、項的位置完全一樣,但是不相等。
var a = [1,2,3,4];
var b = [1,2,3,4]; //因為數組是引用類型,要比較地址,a和b變數指向地址不一樣,不能判相等。
console.log(a == b);//數組中的值一樣,但引用類型判斷記憶體地址是否相同,所以是false

var a = [1,2,3,4];
var b = a; //b變數引用了a變數的值,所以都指向同一個記憶體地址
console.log(a == b);//true
var a = [1,2,3,4];
var b = a; //b變數引用了a變數的值,所以都指向同一個記憶體地址
b[0] = 88; //修改的是數組b下標為0的項
console.log(a); //數組a和b下標為0的項都被修改為88
console.log(b);
console.log(a == b);//true

 

 

var a = [1,2,3,4];
var b = a; //b變數引用了a變數的值,所以都指向同一個記憶體地址
b[0] = 88; //修改的是數組b下標為0的項
console.log(a);
console.log(b);
b = [6,7,8,9]; //b現在是新的數組(指向了新的記憶體地址),不再繼續影響a
console.log(a);
console.log(b);
console.log(a == b);//false

基本類型和引用類型講解:

 

 

 

如果a裡面存儲的是基本類型,那麼b=a就是把a的值複製一份給b

如果a裡面存儲的是引用類型,那麼b將指向a現在指向的記憶體地址,a的值不會複製一份,ab指向同一個記憶體地址。

 

在瀏覽器載入HTML頁面時,首先會開闢一個供js代碼執行的環境-->"全局作用域"(window/global)

棧記憶體(作用域):存儲基本數據類型的值;提供js代碼執行的環境;

 

堆記憶體:存儲引用數據類型的值,首先會開闢一個新的記憶體空間,然後把代碼存儲到這個空間中,最後把空間的地址給相關的變數-->我們把新開闢的這個記憶體空間稱之為"堆記憶體"

堆記憶體的作用:存儲引用數據類型值

 


二、數組的方法

數組是對象,現在要知道對象有屬性和方法。屬性已經介紹了,數組有length屬性。

屬性:就是描述對象的特點。比如“性別”,“姓名”,“身高”,“體重”。

方法:就是對象能執行的事情。比如“吃飯”,“睡覺”,“摳腳打dota”。

現在就要學習數組能執行什麼方法,看以下手冊:

 

2.1數組的頭尾操作pop()push()shift()unshift()

push() 向數組的末尾添加一個或多個元素,並返回新的長度。

unshift() 向數組的開頭添加一個或多個元素,並返回新的長度。

shift() 刪除並返回數組的第一個元素

pop() 刪除並返回數組的最後一個元素

push()方法,向數組的末尾添加一個或更多元素,並返回新的長度。

 

 var arr = ['','','西',''];

 arr.push('','','');

 console.log(arr);

unshift()向數組的開頭添加一個或更多元素,並返回新的長度。

 

 var arr = ['','','西',''];

 arr.unshift('一萬','八萬','九萬');

 console.log(arr);

 

pop()刪除數組的最後一項,只能刪最後一項,無法刪多項。並返回被刪除的元素。

 var arr = ['東','南','西','北'];

 var last = arr.pop(); //刪除數組的最後一項

 console.log(last);    //pop有返回值,返回值就是被刪除的那一項

 arr.pop();

 arr.pop();

 console.log(arr);//["東"]

 

shift()刪除數組的開頭項,只能刪第一項,無法刪多項。並返回被刪除的元素

 var arr = ["東","南","西","北"];

 var first = arr.shift(); //刪除數組的第一項,並返回刪除的值

 console.log(first); //shift有返回值,返回值就是被刪除的那一項

 arr.shift();

 console.log(arr);

 

 


題目1:尾刪頭插

 

var arr = ["東","南","西","北"];
arr.unshift(arr.pop()); // ["北", "東", "南", "西"]
console.log(arr);
arr.unshift(arr.pop()); // ["西", "北", "東", "南"]
console.log(arr);
arr.unshift(arr.pop()); // ["南", "西", "北", "東"]
console.log(arr);
arr.unshift(arr.pop()); // ["東", "南", "西", "北"]
console.log(arr);
arr.unshift(arr.pop()); // ["北", "東", "南", "西"]
console.log(arr);

題目2:頭刪尾插

 

var arr = ["東","南","西","北"];
arr.push(arr.shift()); // ["南", "西", "北", "東"]
console.log(arr);
arr.push(arr.shift()); // ["西", "北", "東", "南"]
console.log(arr);
arr.push(arr.shift()); // ["北", "東", "南", "西"]
console.log(arr);
arr.push(arr.shift()); // ["東", "南", "西", "北"]
console.log(arr);
arr.push(arr.shift()); // ["南", "西", "北", "東"]
console.log(arr);

2.2數組合併concat()

concat()合併兩個或更多的數組,並返回結果。

該方法不會改變現有的數組,而僅僅會返回被連接數組的一個副本。

 

var arr1 = ["東","南","西","北"];
var arr2 = ['一條','二條'];
var arr = arr1.concat(arr2); //concat是把arr1和arr2合併為一個新數組返回
console.log(arr1);//不變
console.log(arr2);//不變
console.log(arr); //合併的新數組

concat的參數非常靈活,可以是數組變數、數組字面量、散的值也行。

 var arr3 = arr1.concat(arr2,['一筒','五條'],'么雞');

 console.log(arr);

 


2.3數組截取slice()

slice()方法可以從已有的數組中返回選定的元素。

arr.slice(start,end)

參數

描述

start

必需。規定從何處開始選取。如果是負數,那麼它規定從數組尾部開始算起的位置。也就是說,-1 指最後一個元素,-2 指倒數第二個元素,以此類推。

end

可選。規定從何處結束選取。該參數是數組片斷結束處的數組下標。如果沒有指定該參數,那麼切分的數組包含從 start 到數組結束的所有元素。如果這個參數是負數,那麼它規定的是從數組尾部開始算起的元素。

返回值返回一個新的數組,包含從 start end(不包括該元素)的中的元素。

 

 var arr1 = ['','','西','','','',''];

 var arr2 = arr1.slice(1,4); //截取下標123的為一個新數組並返回

 console.log(arr2);  //["", "西", ""]

arr.slice(start,end) 返回一個新的數組,包含從 start end(不包括該元素)的元素。

 

只寫start開始參數:

 var arr = ["","西","","","","",""];

 var arr2 = arr.slice(3); //從下標3開始,截取到後面全部的項

 console.log(arr2);   // ["", "", "", ""]

 

slice(a,b)取出了b-a項:

從倒數第4倒數第2項(不包括倒數第2項)。""是倒數第1項。slice(a,b)取出了b-a

 var arr = ["","西","","","","",""];

 var arr2 = arr.slice(-4,-2); //從下標倒數第四個開始,截取到倒數第二個

 console.log(arr2);   // ["", ""]

 

 var arr = ["","西","","","","",""];

 var arr2 = arr.slice(-4); //從下標倒數第四個開始,截取到後面全部的項

 console.log(arr2);   // ["","","",""]

 

 var arr1 = ["","","西","","","",""];

 //var arr2 = arr1.slice(3,1); //順序錯誤

 var arr2 = arr1.slice(3,3);   //順序錯誤

 console.log(arr2);//[] 空數組


2.3多功能splice()添加、刪除、替換

 array.splice(index,howmany,item1,.....,itemX)

 

參數

描述

index

必需。整數,規定添加/刪除項目的位置,使用負數可從數組結尾處規定位置。

howmany

必需。要刪除的項目數量。如果設置為 0,則不會刪除項目。

item1, ..., itemX

可選。向數組添加的新項目。

返回值

類型

描述

Array

包含被刪除項目的新數組,如果有的話。

說明

splice() 方法可刪除從 index 處開始的零個或多個元素,並且用參數列表中聲明的一個或多個值來替換那些被刪除的元素。如果從數組對象中刪除了元素,則返回的是含有被刪除的元素的數組。

 

確定一件事:一旦應用,arr立即改變,並不需要重新賦值,換句話說,這個函數不返回新的數組。

//**************替換一些項**********
var arr = ["A","B","C","D","E","F","G"];
arr.splice(3,2,"蘋果","香蕉"); //從數組下標3開始,刪除兩項,改為後替換的內容
console.log(arr);

 

//**************替換一些項**********
var arr = ["A","B","C","D","E","F","G"];
arr.splice(3,2,"蘋果","香蕉","葡萄","橘子"); //從數組下標3開始,刪除兩項,插入4項
console.log(arr);

 

// **************更改一些項**********
var arr = ["A","B","C","D","E","F","G"];
arr.splice(2,4,"哈哈"); //從數組下標3開始,刪除兩項,插入1項
console.log(arr); //["A", "B", "哈哈", "G"]

 

// **************更改一個項**********
var arr = ["A","B","C","D","E","F","G"];
arr.splice(2,1,"哈哈"); //從數組下標3開始,刪除兩項,插入1項
console.log(arr); //["A", "B", "哈哈", "D", "E", "F", "G"]

 

//**************刪除一些項**********
var arr = ["A","B","C","D","E","F","G"];
arr.splice(2,4); //沒有東西可以替換,直接刪除4項
console.log(arr); //["A", "B", "G"]

 

//**************插入一些項,但不刪除**********
var arr = ["A","B","C","D","E","F","G"];
arr.splice(2,0,"嘻嘻","哈哈"); //從下標2開始插入2項,不刪除
console.log(arr); //["A", "B", "嘻嘻", "哈哈", "C", "D", "E", "F", "G"]


 

splice依據參數的多少,和參數是什麼,有多功能。現在你要能反應過來。

刪除數組的最後5項。

 arr.pop();

 arr.pop();

 arr.pop();

 arr.pop();

 arr.pop();

簡化為:

 for(var i = 1 ; i <= 5 ; i++){

  arr.pop();

 }

也可以:

 

var arr = ["A","B","C","D","E","F","G","H","I","J","K","L"];
//arr.splice(-5);
arr.splice(-5,5);         
console.log(arr);    

2.4倒序reverse();

reverse()方法就是立即讓數組倒置:

 

var arr = ["A","B","C","D","E","F","G"];
arr.reverse();   //不需要賦值
console.log(arr);  //["G", "F", "E", "D", "C", "B", "A"]


2.5排序sort()

sort()方法排序

var arr = ["G","A","C","B","I","H","G","I","B"];
arr.sort();
console.log(arr);

//sort函數預設是按照字元順序排的,隱式將數字轉為string
//比字元編碼順序
var arr = [23,435,456,23,2,345,2,32,11,324,32,43,65,667,78,43];
arr.sort();
console.log(arr);

sort()裡面有一個參數,這個參數是一個函數。

 

var arr = [41,4,52,64,99,66,88,77,100,412,78,43,2];
// 升序排序,從小到大
arr.sort(function(a,b){
    //如果a要放在b前面,那麼return負數
    //如果a要放在b後面,那麼return正數
    //如果a和b不區分大小,那麼return 0
    if(a < b){
        return -1;  //滿足第一個條件,返回值是-1,a要排在b前面
    }else if(a > b){
        return 1;   //滿足第二個條件,返回值是1,a要排在b後面
    }else if(a == b){
        return 0;
    }
});
console.log(arr);

 

 

按五角星的個數排序:

var arr = ["★★★","★★★★★","★★","★","★★★★","★★★★","★★★★★★"];
arr.sort(function(a,b){
   // 若 a 小於 b,在排序後的數組中 a 應該出現在 b 之前,則返回一個小於 0 的值。
   // 若 a 等於 b,則返回 0。
   // 若 a 大於 b,則返回一個大於 0 的值。
   if(a < b){
       return -1; //滿足第一個條件,返回值是-1,a在b前面
   }else if(a > b){
       return 1; //滿足第二個條件,返回值是1,a在b後面
   }else if(a == b){
       return 0;
   }
});
console.log(arr);


 

2.6數組分割join()

join() 方法用於把數組中的放入一個字元串,並且可以通過指定的分隔符進行分隔的

var arr = [1,2,3,4,5,6,7];
var str = arr.join("★"); //轉為字元串用新變數接收
console.log(str);

語法:

 var str = arr.join(分隔符);

 

如果不寫分隔符,預設用逗號分割:

 var arr = [1,2,3,4,5,6,7];

 var str = arr.join();

 console.log(str);

 

 

如果是空字元串""就不分割:

 var arr = [1,2,3,4,5,6,7];

 var str = arr.join("");

 console.log(str);

 


三、字元串的屬性和方法

3.1字元串屬性

屬性length就是字元串的長度

1 var str = "我們都非常喜歡JavaScript!希望能找到能帶你*****飛的工作。";

1 console.log(str.length);

中文、數字、英語字母、空格、特殊符號,都算1個長度


 

3.2字元串方法

3.2.1 charAt()查找字元串

返回字元串中指定下標位置的字元,下標從0開始

 //返回字元串中指定下標位置的字元,下標從0開始

 console.log("abcdef".charAt(0)) ;//a

 console.log("abcdef".charAt(2)) ;//a

 

 "abcdef".charAt(0);  

 "abcdef".charAt(2) ;//c

 和數組下標類似的。

var str = "abcdefg"
for(var i = 0 ; i < str.length ; i++){
    console.log(str.charAt(i));
}

 


 

3.2.2 indexOf()查找字元串下標

indexOf(檢索的字元串,開始檢索的位置)

返回某個指定的字元串值在字元串中首次出現的下標位置(索引值)。

 console.log(str.indexOf("非常喜歡"));

 

如果要檢索的字元串值沒有完全匹配的值,則該方法返回 -1

console.log(str.indexOf("喜歡呀"));

 


3.2.3 lastIndexOf()

該方法可返回一個指定的字元串值最後出現的位置,在一個字元串中的指定位置從後向前搜索。

 console.log(str.lastIndexOf(""));


3.2.4 replace()替換

該方法用於在字元串中用一些字元替換另一些字元,或替換一個與正則表達式匹配的子串。

 "abcdefghijka".replace("a","蘋果");//a替換乘蘋果,只替換一個

a替換乘蘋果,只替換一個

 


 

3.2.5 split()字元串分割為數組

方法用於把字元串分割成數組(字元串→數組),從什麼地方拆分,就是參數

 "我愛你親愛祖國人民幣".split("");  

 

 1嘻嘻2嘻嘻3嘻嘻4嘻嘻5嘻嘻6".split("嘻嘻")

 


3.2.6 substr()提取字元串

方法可在字元串中抽取從 start 下標開始的指定數目的字元  

"字元串".substr(start,length)

start參數:開始下標,可以為正數,也可以為負數,-1最後一個,-2指倒數第二個,以此類推。

length參數:截取總長度。可以不寫,直接截取到最後。

 

var str1 = str.substr(4,9); //從下標4開始,截取9個
var str2 = str.substr(-9,4);//從下標-9開始,截取4個
var str3 = str.substr(-9); //從下標-9開始,截取到最後
console.log(str1);
console.log(str2);
console.log(str3);


3.2.7 substring()提取字元串

方法用於提取字元串中介於兩個指定下標之間的字元。

"字元串".substring(start,end); 不包括end參數只能是正數,都是索引值。

截取時,從開始位置截取到結束位置,不包含結束位置。在選擇開始位置之前,會先比較以下兩個參數的大小,其中小的作為start值,大的作為stop

var str = "我們都非常喜歡JavaScript!希望能找到能帶你*****飛的工作。";
var str1 = str.substring(4,9);    //從下標4開始,截取到下標為9的位置(不包括結束)
// var str2 = str.substring(-9,4);//錯誤的,不能用負數
var str3 = str.substring(9,4);    //從下標4開始,截取到下標為9的位置(不包括結束)
var str4 = str.substring(4);     //從下標4開始,截取到最後
console.log(str1);
console.log(str3);
console.log(str4);


3.2.8 slice()字元串截取

方法可提取字元串的某個部分,並以新的字元串返回被提取的部分。(該方法在數組中學習過)

一個新的字元串。包括字元串 stringObject start 開始(包括 start)到 end 結束(不包括 end)為止的所有字元。

 

var str = "我們都非常喜歡JavaScript!希望能找到能帶你*****飛的工作。";
var str1 = str.slice(4,9);  //從下標4開始,截取到下標為9的位置(不包括結束)
var str2 = str.slice(-9,-4); //從下標-9開始,截取到下標為-4的位置(不包括結束)
var str3 = str.slice(3); //從下標3開始,截取到最後
console.log(str1);
console.log(str2);
console.log(str3);

三種截取方法的相同和不同點:

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

-Advertisement-
Play Games
更多相關文章
  • 最近在學習es6的Promise,其中涉及到了Promsie的事件執行機制,因此總結了關於Promise的執行機制,若有錯誤,歡迎糾錯和討論。 在阮一峰老師的書中《es6 標準入門》對Promise的基礎知識做出了詳細的介紹,在此就不一一介紹了,直接開始整體,將Promsie中關於事件執行機制的問題 ...
  • 布爾值、null和undefined、全局對象、包裝對象、不可變的原始值和可變的對象引用。 ...
  • 簡介 每個Node應用都有一個包含該應用元數據的文件 package.json,包含應用名、版本號以及依賴等信息。 我們使用NPM從NPM庫下載並安裝第三方包。 所有下載的包以及其依賴都保存在node_modules文件夾,這個文件夾應該排除在源代碼版本控制(如git、SVN等)外。 Node的包版 ...
  • 經過這幾天的博客瀏覽,讓我見識大漲,其中有一篇讓我感觸猶深,JavaScript語言本身是沒有面向對象的,但是那些大神們卻深深的模擬出來了面向對象,讓我震撼不已。本篇博客就是在此基礎上加上自己的認知,如有錯誤,還請見諒。 具體來說實現模擬面向對象主要是利用JavaScript函數閉包這個概念css3 ...
  • js代碼暫時性死區 只要塊級作用域存在let命令,它所聲明的變數就“綁定”這個區域,不再受外部的影響。這麼說可能有些抽象,舉個例子: ? 1 2 3 4 5 var temp = 123; if(true) { console.log(temp); let temp; } ? 1 2 3 4 5 v ...
  • setTimeout()函數:用來指定某個函數或某段代碼在多少毫秒之後執行。它返回一個整數,表示定時器timer的編號,可以用來取消該定時器。 例子 ? 1 2 3 4 5 console.log(1); setTimeout(function () { console.log(2); }, 0); ...
  • 一、正則表達式 1.1正則概述和體驗 正則表達式是被用來匹配字元串中的字元組合的模式,常用來做表單驗證。在JavaScript中,正則表達式也是對象,是一種引用類型。 案例:正確輸入一個電話號碼,010-12345678,用戶輸入正確返回“對”,錯誤返回“錯” 字元串的方法: split() 根據匹 ...
  • js解析器:瀏覽器中專門用來讀取js腳本解析和執行步驟: 1)找內容——根據關鍵詞:var function 參數,全部找到之後預解析結束 a = <!--undefined--> 1//所有變數在正式運行之前,都會提前賦值undefined fn = funciong fn(){ console. ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...

 

參數

參數正負

第二個參數

slice

正:開始和結束的下標

負:從後往前數

兩個參數不能顛倒位置

可以為正,可以為負

可以不寫

substring

開始和結束的下標

兩個參數的大小,可以隨意互換

只能是正數

可以不寫

substr

第一個參數:是下標或者後面往前的位置

第二個參數:截取長度

第一個參數:可以為負或正

可以不寫