Web_javascript-ECMAScript

来源:https://www.cnblogs.com/Golanguage/archive/2020/03/02/12398173.html
-Advertisement-
Play Games

javascript介紹 Web前端有三層: HTML:從語義的角度,描述頁面結構 CSS:從審美的角度,描述樣式(美化頁面) JavaScript:從交互的角度,描述行為(提升用戶體驗) 其中JavaScript基礎又分為三個部分: ECMAScript:JavaScript的語法標準。包括變數、 ...


javascript介紹

Web前端有三層:

  • HTML:從語義的角度,描述頁面結構

  • CSS:從審美的角度,描述樣式(美化頁面)

  • JavaScript:從交互的角度,描述行為(提升用戶體驗)

其中JavaScript基礎又分為三個部分:

JavaScript歷史背景介紹

 

布蘭登 • 艾奇(Brendan Eich,1961年~),1995年在網景公司,發明的JavaScript。

一開始JavaScript叫做LiveScript,但是由於當時Java這個語言特別火,所以為了傍大牌,就改名為JavaScript。如同“北大”和“北大青鳥”的關係。“北大青鳥”就是傍“北大”大牌。

同時期還有其他的網頁語言,比如VBScript、JScript等等,但是後來都被JavaScript打敗了,所以現在的瀏覽器中,只運行一種腳本語言就是JavaScript

ECMAScript是一種由Ecma國際(前身為歐洲電腦製造商協會,英文名稱是European Computer Manufacturers Association)制定的標準。

JavaScript是由公司開發而成的,問題是不便於其他的公司拓展和使用。所以歐洲的這個ECMA的組織,牽頭制定JavaScript的標準,取名為ECMAScript。

簡單來說,ECMAScript不是一門語言,而是一個標準。符合這個標準的比較常見的有:JavaScript、Action Script(Flash中用的語言)。就是說,你JavaScript學完了,Flash中的程式也就輕而易舉了。

ECMAScript在2015年6月,發佈了ECMAScript 6版本,語言的能力更強(也包含了很多新特性)。但是,瀏覽器的廠商不能那麼快去追上這個標準。
JavaScript和ECMAScript的關係

JavaScript的發展:蒸蒸日上 

http://2004.sina.com.cn/    http://2008.sina.com.cn/   http://2012.sina.com.cn/

上面三個網站可以感受一下網頁技術的發展。 

2003年之前,JavaScript被認為“牛皮鮮”,用來製作頁面上的廣告,彈窗、漂浮的廣告。什麼東西讓人煩,什麼東西就是JavaScript開發的。所以瀏覽器就推出了屏蔽廣告功能。

2004年,JavaScript命運開始改變,那一年,谷歌公司開始帶頭使用Ajax技術,Ajax技術就是JavaScript的一個應用。並且,那時候人們逐漸開始提升用戶體驗了。Ajax有一些應用場景。比如,當我們在百度搜索框搜文字時,輸入框下方的智能提示,可以通過Ajax實現。比如,當我們註冊網易郵箱時,能夠及時發現用戶名是否被占用,而不用調到另外一個頁面。

2007年喬布斯發佈了第一款iPhone,這一年開始,用戶就多了上網的途徑,就是用移動設備上網。
JavaScript在移動頁面中,也是不可或缺的。並且這一年,互聯網開始標準化,按照W3C規則三層分離,JavaScript越來越被重視。

2010年,人們更加瞭解HTML5技術,HTML5推出了一個東西叫做Canvas(畫布),工程師可以在Canvas上進行游戲製作,利用的就是JavaScript。

2011年,Node.js誕生,使JavaScript能夠開發伺服器程式了。

如今,WebApp已經非常流行,就是用網頁技術開發手機應用。手機系統有iOS、安卓。比如公司要開發一個“攜程網”App,就需要招聘三隊人馬,比如iOS工程師10人,安卓工程師10人,前端工程師10人。共30人,開發成本大;而且如果要改版,要改3個版本。現在,假設公司都用web技術,用html+css+javascript技術就可以開發App。也易於迭代(網頁一改變,所有的終端都變了)。

雖然目前WebApp在功能和性能上的體驗遠不如Native App,但是“WebApp慢慢取代Native App”很有可能是未來的趨勢。
發展歷程

JavaScript入門易學性

  • JavaScript對初學者比較友好。

  • JavaScript是有界面效果的(比如C語言只有白底黑字)。

  • JavaScript是弱變數類型的語言,變數只需要用var來聲明。而Java中變數的聲明,要根據變數的類型來定義。

JavaScript的組成

JavaScript基礎分為三個部分:

  • ECMAScript:JavaScript的語法標準。包括變數、表達式、運算符、函數、if語句、for語句等。

  • DOM:操作網頁上的元素的API。比如讓盒子移動、變色、輪播圖等。

  • BOM:操作瀏覽器部分功能的API。比如讓瀏覽器自動滾動。

PS:JS機械重覆性的勞動幾乎為0,基本都是創造性的勞動。而不像HTML、CSS中margin、padding都是機械重覆勞動。

JavaScript的特點

(1)簡單易用:可以使用任何文本編輯工具編寫,只需要瀏覽器就可以執行程式。

(2)解釋執行(解釋語言):事先不編譯、逐行執行、無需進行嚴格的變數聲明。

(3)基於對象:內置大量現成對象,編寫少量程式可以完成目標

javascript語法

學習程式,是有規律可循的,就是程式是有相同的部分,這些部分就是一種規定,不能更改,我們成為:語法。

(1)JavaScript對換行、縮進、空格不敏感。

      備註:每一條語句末尾要加上分號,雖然分號不是必須加的,但是為了程式今後要壓縮,如果不加分號,壓縮之後將不能運行。

(2)所有的符號,都是英語的。比如括弧、引號、分號。

js代碼的引入

在頁面中,我們可以在body標簽中放入<script type=”text/javascript”></script>標簽對兒,<script type=”text/javascript”></script>標簽對兒

<script type="text/javascript">

</script>

變數和賦值

變數

var a = 100;    //變數的定義和賦值
var是英語“variant”變數的縮寫。後面要加一個空格,空格後面的東西就是“變數名”,

定義變數:var就是一個關鍵字,用來定義變數。所謂關鍵字,就是有特殊功能的小詞語。關鍵字後面一定要有空格隔開。

變數的賦值:等號表示賦值,將等號右邊的值,賦給左邊的變數。

變數名:我們可以給變數任意的取名字。

 PS:在JavaScript中,永遠都是用var來定義變數,這和C、Java等語言不同
變數說明

變數名有命名規範:只能由英語字母、數字、下劃線、美元符號$構成,且不能以數字開頭,並且不能是JavaScript保留字,變數區分大小寫也就是說A和a是兩個變數。

abstract、booleanbytechar、class、const、debuggerdouble、enum、export、extends、final、float、goto
implements、import、int、interface、long、native、package、private、protected、public、short、static、super、synchronized、throws、transient、volatile
js保留字

賦值

將等號右邊的值,賦給左邊的變數;等號右邊的變數,值不變。

var a = "3";
var b = 2;
a = b

console.log(a)
console.log(b)

註釋

// 我是單行註釋
/*
    多行註釋1
    多行註釋2
*/

備註:sublime中,單行註釋的快捷鍵是ctrl+/,多行註釋的快捷鍵是ctrl+shift+/

輸入輸出信息

彈出警告框:alert語句

<script type="text/javascript">
       alert("小馬哥");
</script>
alert(英文翻譯為“警報”)的用途:彈出“警告框”。

控制台輸出console.log("") 和輸入框prompt()

console.log("")
表示在控制臺中輸出。console表示“控制台”,log表示“輸出”。
控制台在Chrome瀏覽器的F12中。控制台是工程師、程式員調試程式的地方。程式員經常使用這條語句輸出一些東西,來測試程式是否正確。

prompt()
實際上是一個輸入框,就是專門用來彈出能夠讓用戶輸入的對話框。prompt()語句中,用戶不管輸入什麼內容,都是字元串。

alert("從前有座山");                //直接使用,不需要變數
var a = prompt("請輸入一個數字");   // 需要用變數,才能接收用戶輸入的值

示例:
alert("從前有座山");                //直接使用,不需要變數
var a = prompt("請輸入一個數字");   // 必須用一個變數,來接收用戶輸入的值
console.log和prompt

代碼示例:

<script type="text/javascript">
        var a = prompt('今天是什麼天氣?');
        console.log(a);
</script>

上方代碼中,用戶輸入的內容,將被傳遞到變數 a 裡面。效果如下:

基礎數據類型

變數裡面能夠存儲數字、字元串等。和 python一樣,js中定義變數的時候不必指定類型,變數會自動的根據存儲內容的類型不同,來決定自己的類型。查看類型使用typeof方法。

數值類型:number

在JavaScript中,只要是數,就是數值型(number)的。無論整浮、浮點數(即小數)、無論大小、無論正負,都是number類型的。

var a = 100;            //定義了一個變數a,並且賦值100
console.log(typeof a);  //輸出a變數的類型
console.log(typeof(a));  //輸出a變數的類型
var num = 2.379
var newNum = num.toFixed(2)
console.log(newNum)
小數的保留

字元串類型:string

1.定義
var a = "abcde";
var b = '路飛';   //不區分單雙引號

console.log(typeof a);
console.log(typeof b);
2.常用方法
方法 說明
.length   #不加括弧的是屬性 返回長度
.trim()    #得到一個新值 移除空白
.trimLeft() 移除左邊的空白
.trimRight() 移除右邊的空白
.concat(value, ...) #s1='hello';s.concat('xx');得到helloxx 拼接
.charAt(n) #n類似索引,從0開始,超過最大值返回''空字元串 返回第n個字元
.indexOf(substring, start) #這個start是從索引幾開始找,沒有返回-1 子序列位置
.substring(from, to) #不支持負數,所以一般都不用它,瞭解一下就行了 根據索引獲取子序列
.slice(start, end) #var s1='helloworld';s1.slice(0,-5)看結果,就用它 切片
.toLowerCase() #全部變小寫 小寫
.toUpperCase()  #全部變大寫 大寫
.split(delimiter, limit)#分隔,s1.splite(' '),後面還可以加參數s1.split(' ',2),返回切割後的元素個數 分割

var str = 'alex';
var charset = str.charAt(1);
console.log(charset);//l
chartAt() 返回指定索引的位置的字元
var str1 = 'alex';
var str2  = 'sb';
console.log(str1.concat(str2,str2));//alexsbsb
concat 返回字元串值,表示兩個或多個字元串的拼接
        var a = 'hello,world'
        var r = a.match("world")
        console.log(r)
        var r = a.match("World")
        console.log(r)

        // 正則
        var a = 'abcd,dcba'
        var r = a.match(/\w+/)
        console.log(r)

        // g表示匹配多次
        var r = a.match(/\w+/g)
        console.log(r)
match() 字元串匹配和正則匹配
var a = '1234567755';
var newStr = a.replace("4567","****");
console.log(newStr);//123****755
replace(a,b) 將字元串a替換成字元串b
var str = 'alex';
console.log(str.indexOf('e'));//2
console.log(str.indexOf('p'));//-1
console.log(str.search('e'));//2
console.log(str.search('p'));//-1
indexof()/search() 查找字元的下標,如果找到返回字元串的下標,找不到則返回-1 。
var str = '小馬哥';
console.log(str.slice(1,2));//
slice(start,end) 切片。左閉右開 分割數組 接收負參數
var  str =  '我的天呢,a是嘛,你在說什麼呢?a哈哈哈';
console.log(str.substr(0,4));//我的天呢
var  str =  '我的天呢,a是嘛,你在說什麼呢?a哈哈哈';
console.log(str.substr(9,6));
var  str =  '我的天呢,a是嘛,你在說什麼呢?a哈哈哈';
console.log(str.substr(-3,3));
substr(start,length) 返回一個字元串:從指定位置開始,取指定字元數。
如果 indexStart 等於 indexEnd,substring 返回一個空字元串。
如果省略 indexEnd,substring 提取字元一直到字元串末尾。
如果任一參數小於 0 或為 NaN,則被當作 0。
如果任一參數大於 stringName.length,則被當作 stringName.length。
如果 indexStart 大於 indexEnd,則 substring 的執行效果就像兩個參數調換了一樣
substring(indexStart,indexEnd) 切子字元串。顧頭不顧尾
var  str =  '我的天呢,a是嘛,你在說什麼呢?a哈哈哈';
console.log(str.split('a'));//["我的天呢,", "是嘛,你在說什麼呢?", "哈哈哈"]  如果第二個參數沒寫,表示返回整個數組
console.log(str.split('a',2));//["我的天呢,", "是嘛,你在說什麼呢?"] 如果定義了個數,則返回數組的最大長度
split('sep',n) 切割,根據n保留切割的數組長度
var str = 'EVA';
console.log(str.toLowerCase());//eva
toLowerCase():轉小寫
var str = 'xiaomage';
console.log(str.toUpperCase());
toUpperCase():轉大寫
var  str =  '     我的天呢     ';
console.log(str.trim());//我的天呢
trim() 去除字元串兩邊的空白

布爾值:boolean

var b1 = false;
console.log(typeof b1)

空元素:null

var c1 = null;//空對象. object
console.log(c1)

未定義:undefined

var d1;
//表示變數未定義
console.log(typeof d1)

內置對象類型

數組:Array

1.數組的創建
var colors = ['red','color','yellow']; //字面量方式創建(推薦)
var colors2 = new Array();//使用構造函數(後面會講)的方式創建 使用new關鍵詞對構造函數進行創建對象
2.數組的賦值
var arr = [];
//通過下標進行一一賦值
arr[0] = 123;
arr[1] = '哈哈哈';
arr[2] = '嘿嘿嘿'
3.數組的常用方法
方法 說明
.length 數組的大小
.push(ele) 尾部追加元素
.pop() 獲取尾部的元素
.unshift(ele) 頭部插入元素
.shift() 頭部移除元素
.slice(start, end) 切片
.reverse() #在原數組上改的 反轉
.join(seq)#a1.join('+'),seq是連接符 將數組元素連接成字元串
.concat(val, ...) #連個數組合併,得到一個新數組,原數組不變 連接數組
.sort()   排序
.forEach() #講了函數再說 將數組的每個元素傳遞給回調函數
.splice() #參數:1.從哪刪(索引), 2.刪幾個  3.刪除位置替換的新元素(可多個元素) 刪除元素,並向數組添加新元素。
.map()  #講了函數再說 返回一個數組元素調用函數處理後的值的新數組

var north = ['北京','山東','天津'];
var south = ['東莞','深圳','上海'];
var newCity = north.concat(south);
console.log(newCity)
concat方法:列表的拼接
var score = [98,78,76,100,0];
var str = score.join('|');
console.log(str);//98|78|76|100|0
join方法:將數組中的元素使用指定的字元串連接起來,它會形成一個新的字元串
var score = [98,78,76,100,0];
//toString() 直接轉換為字元串  每個元素之間使用逗號隔開
           
var str = score.toString();
console.log(str);//98,78,76,100,0
toString方法:將數組轉換成字元串
var arr = ['張三','李四','王文','趙六'];
var newArr  = arr.slice(1,3);
console.log(newArr);//["李四", "王文"]
slice(start,end):切片(左閉右開)
var arr = ['張三','李四','王文','趙六'];
var item = arr.pop();
console.log(arr);//["張三", "李四","王文"]
console.log(item);//趙六
pop方法:刪除尾元素
var arr = ['張三','李四','王文','趙六'];
var newLength= arr.push('小馬哥');//可以添加多個,以逗號隔開
console.log(newLength);//5
console.log(arr);//["張三", "李四","王文","趙六","小馬哥"]
push方法:向數組末尾添加一個元素或多個元素,並返回新的長度
var names = ['alex','xiaoma','tanhuang','angle'];
names.reverse();
console.log(names);
reverse()方法:翻轉數組
var names = ['alex','xiaoma','tanhuang','abngel'];
names.sort();
console.log(names);// ["alex", "angle", "tanhuang", "xiaoma"]
sort()方法:排序
布爾類型值 = Array.isArray(被檢測的值) ;
Array.isArray(被檢測的值):判斷是否為數組
var arr = [1,2,3]
var n = arr.shift()
console.log(arr)
console.log(n)
shift():刪除並返回數組的第一個元素
var arr = [1,2,3]
var n = arr.unshift(0)
console.log(arr)
console.log(n)
var arr = [1,2,3]
var n = arr.unshift('alex','wahaha')
console.log(arr)
console.log(n)
unshift():向數組的開頭添加一個或更多元素,並返回新的長度
var array = [1,2,3,4,5,6];
array.splice(0);      //方式1:刪除數組中所有項目
array.length = 0;     //方式1:length屬性可以賦值,在其它語言中length是只讀
array = [];           //方式3:推薦
清空數組的幾種方式
關於sort()需要註意:
      如果調用該方法時沒有使用參數,將按字母順序對數組中的元素進行排序,說得更精確點,是按照字元編碼的順序進行排序。要實現這一點,首先應把數組的元素都轉換成字元串(如有必要),以便進行比較。
      如果想按照其他標準進行排序,就需要提供比較函數,也就是自己提供一個函數提供排序規則,該函數要比較兩個值,然後返回一個用於說明這兩個值的相對順序的數字。比較函數應該具有兩個參數 a 和 b,其返回值如下:
      若 a 小於 b,在排序後的數組中 a 應該出現在 b 之前,則返回一個小於 0 的值。
      若 a 等於 b,則返回 0。
      若 a 大於 b,則返回一個大於 0 的值。
示例:
function sortNumber(a,b){
    return a - b
}
var arr1 = [11, 100, 22, 55, 33, 44]
arr1.sort(sortNumber)
sort的問題
    var arr = ['alex','wusir']
    arr.forEach(fn)
    function fn(item,index){
        console.log(index,item)
    }
forEach方法,設定每一個元素執行某函數
    var arr = ['alex','wusir']
    var ret = arr.map(fn)
    function fn(name,index) {
        console.log(index,name)
        return name+'sb'
    }
    console.log(ret)
map方法,迴圈每一個元素完成某操作返回新的值組成新數組

 JSON對象

var str1 = '{"name": "chao", "age": 18}';
var obj1 = {"name": "chao", "age": 18};
// JSON字元串轉換成對象
var obj = JSON.parse(str1); 
// 對象轉換成JSON字元串
var str = JSON.stringify(obj1);

遍歷對象中的內容:

var a = {"name": "Alex", "age": 18};
for (var i in a){
  console.log(i, a[i]);
}

日期:Date

1.定義

創建日期對象只有構造函數一種方式,使用new關鍵字

var myDate = new Date();  //創建了一個date對象
2.常用方法

複製代碼
//創建日期對象
var myDate=new Date();
        
//獲取一個月中的某一天
console.log(myDate.getDate());

//返回本地時間
console.log(myDate().toLocalString());//2018/5/27 下午10:36:23
複製代碼

註意:以上getxxx的方法都是對時間的獲取,如果要設置時間,使用setxxx,請參考鏈接:http://www.runoob.com/jsref/jsref-obj-date.html

RegExp對象

RegExp相關:用的比較多 

//RegExp對象

//創建正則對象方式1
// 參數1 正則表達式(不能有空格)
// 參數2 匹配模式:常用g(全局匹配;找到所有匹配,而不是在第一個匹配後停止)和i(忽略大小寫)

// 用戶名只能是英文字母、數字和_,並且首字母必須是英文字母。長度最短不能少於6位 最長不能超過12位。

// 創建RegExp對象方式(逗號後面不要加空格),假如匹配用戶名是只能字母開頭後面是字母加數字加下劃線的5到11位的
var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$"); //註意,寫規則的時候,裡面千萬不能有空格,不然匹配不出來你想要的內容,除非你想要的內容本身就想要空格,比如最後這個{5,11},裡面不能有空格

// 匹配響應的字元串
var s1 = "bc123";

//RegExp對象的test方法,測試一個字元串是否符合對應的正則規則,返回值是true或false。
reg1.test(s1);  // true

// 創建方式2,簡寫的方式
// /填寫正則表達式/匹配模式(逗號後面不要加空格)
var reg2 = /^[a-zA-Z][a-zA-Z0-9_]{5,11}$/; 

reg2.test(s1);  // true

註意,此處有坑:如果你直接寫一個reg2.test(),test裡面啥也不傳,直接執行,會返回一個true,用其他的正則規則,可能會返回false,是因為,test裡面什麼也不傳,預設傳的是一個undefined,並且給你變成字元串undefined,所以能夠匹配undefined的規則,就能返回true,不然返回false


// String對象與正則結合的4個方法
var s2 = "hello world";

s2.match(/o/g);         // ["o", "o"]             查找字元串中 符合正則 的內容 ,/o/g後面這個g的意思是匹配所有的o,
s2.search(/h/g);        // 0                      查找字元串中符合正則表達式的內容位置,返回第一個配到的元素的索引位置,加不加g效果相同
s2.split(/o/g);         // ["hell", " w", "rld"]  按照正則表達式對字元串進行切割,得到一個新值,原數據不變
s2.replace(/o/g, "s");  // "hells wsrld"          對字元串按照正則進行替換

// 關於匹配模式:g和i的簡單示例
var s1 = "name:Alex age:18";

s1.replace(/a/, "哈哈哈");      // "n哈哈哈me:Alex age:18"
s1.replace(/a/g, "哈哈哈");     // "n哈哈哈me:Alex 哈哈哈ge:18"      全局匹配
s1.replace(/a/gi, "哈哈哈");    // "n哈哈哈me:哈哈哈lex 哈哈哈ge:18"  不區分大小寫


// 註意事項1:
// 如果regExpObject帶有全局標誌g,test()函數不是從字元串的開頭開始查找,而是從屬性regExpObject.lastIndex所指定的索引處開始查找。
// 該屬性值預設為0,所以第一次仍然是從字元串的開頭查找。
// 當找到一個匹配時,test()函數會將regExpObject.lastIndex的值改為字元串中本次匹配內容的最後一個字元的下一個索引位置。
// 當再次執行test()函數時,將會從該索引位置處開始查找,從而找到下一個匹配。
// 因此,當我們使用test()函數執行了一次匹配之後,如果想要重新使用test()函數從頭開始查找,則需要手動將regExpObject.lastIndex的值重置為 0。
// 如果test()函數再也找不到可以匹配的文本時,該函數會自動把regExpObject.lastIndex屬性重置為 0。

var reg3 = /foo/g;
// 此時 regex.lastIndex=0
reg3.test('foo'); // 返回true
// 此時 regex.lastIndex=3
reg3.test('xxxfoo'); // 還是返回true
// 所以我們在使用test()方法校驗一個字元串是否完全匹配時,一定要加上^和$符號,把匹配規則寫的確定一些,儘量不用上面這種的寫法/xxx/。

// 註意事項2(說出來你可能不信系列):
// 當我們不加參數調用RegExpObj.test()方法時, 相當於執行RegExpObj.test(undefined),然後將這個undefined又轉為字元串"undefined",去進行匹配了, 並且/undefined/.test()預設返回true。
var reg4 = /^undefined$/;
reg4.test(); // 返回true
reg4.test(undefined); // 返回true
reg4.test("undefined"); // 返回true
RegExp相關

數學相關:Math

1.常用方法

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

-Advertisement-
Play Games
更多相關文章
  • Mac下Jenkins Android打包 一、安裝tomcat a、下載tomcat http://tomcat.apache.org/ 下載完成後解壓到: b、啟動tomcat: c、驗證 二、安裝Jenkins a、下載 jenkins.war https://jenkins.io/index ...
  • 偶然發現 ,僅僅一個Java文件,可在嵌入式設備(例:Android手機)中啟動一個本地伺服器,接收客戶端本地部分請求。 認真學習了其源碼實現,這裡按照我的學習順序寫了一篇簡單的文章(算是學習筆記吧): + 瞭解官方描述 + 寫個Demo使用一下(Android中本地代理,播放Sdcard中的m3u ...
  • Android Q 深色主題舉例 瞭解深色主題如何應用,第一手資料是 "官方文檔" 與 相應的 "Google Sample" 官方文檔:DayNight — Adding a dark theme to your app: "https://medium.com/androiddevelopers ...
  • QQ視頻通話、抖音的視頻回顯 是如何實現的 先說為什麼會有這一篇文章: 2014年聯想曾經做過一款 短視頻軟體,叫“魔力秀”。可以說和現在的抖音基本是一樣的,但因為“魔力秀App”出生於聯想,註定無法在一個硬體公司成長為一棵參天大樹,最終只發了一個版本就結束了。 當時“魔力秀App”的視頻回顯模塊是 ...
  • Android frameworks源碼StateMachine使用舉例及源碼解析 工作中有一同事說到Android狀態機 。作為一名Android資深工程師,我居然沒有聽說過 ,因此抓緊時間學習一下。 不是 中的相關API,其存在於 層源碼中的一個Java類。可能因為如此,許多應用層的開發人員並未 ...
  • # 選中Element的方式 1、getElementById() 2、getElementsByClassName() 3、getElementsByTagName() 4、querySelector() //返回指定選擇器的第一個元素 5、querySelectorAll() //返回指定選擇器 ...
  • css層疊樣式表、css樣式由選擇符和聲明組成,而聲明又由屬性和值組成,/*選擇符{屬性:值}選擇符=>選擇器、{屬性:值}=>聲明*/ ,css/*註釋語句*/來標明(html中使用);css樣式代碼插入頁面的形式分為以下3種:內聯式、嵌入式(外聯式)和外部式三種!對於同一個元素我們同時用了三種方... ...
  • 楔子 需求一:有html標簽關係如下,請找到所有的含有a標簽的li標簽 <div <ul <li class="city" 北京</li <li class="city" <a href="" 上海</a </li <li class="city" 天津</li </ul </div <script ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...