從零學習JAVASCRIPT — 1、JavaScript 基礎一

来源:https://www.cnblogs.com/iflygofy/archive/2018/02/07/8427010.html
-Advertisement-
Play Games

1:定義:javascript是一種弱類型、動態類型、解釋型的腳本語言。 弱類型:類型檢查不嚴格,偏向於容忍隱式類型轉換。 強類型:類型檢查嚴格,偏向於不容忍隱式類型轉換。 動態類型:運行的時候執行類型檢查。 靜態類型:編譯的時候就知道每個變數的類型。 解釋型:程式不需要編譯,程式在運行的時候才翻譯 ...


1:定義:javascript是一種弱類型、動態類型、解釋型的腳本語言。

弱類型:類型檢查不嚴格,偏向於容忍隱式類型轉換。

強類型:類型檢查嚴格,偏向於不容忍隱式類型轉換。

動態類型:運行的時候執行類型檢查。

靜態類型:編譯的時候就知道每個變數的類型。

解釋型:程式不需要編譯,程式在運行的時候才翻譯成機器語言,每執行一次都要翻譯一次,因此效率比較低,但是跨平臺性好。

編譯型:程式在執行之前需要一個專門的翻譯過程,把程式編譯為機器語言的文件,運行時直接使用編譯的結果就行了。

標記語言:標記語言的存在就是用來被讀取(瀏覽)的,而其本身是沒有行為能力的,在標記語言里你會看到<和>這些尖括弧,這是用來寫出“層次”和”屬性”的,換句話說,它是被動的。並不具備與訪問者互動的能力。

編程語言:它是具有邏輯性和行為能力,這是主動的。說通俗一點,它是有思想的。

腳本語言:它介於標記語言和編程語言之間,腳本語言不需要編譯,可以直接用,由解釋器來負責解釋。


 2:JS由來及其發展史

1)Netsape發明瞭javascript。

當 Netscape Navigator 嶄露頭角時,Nombas 開發了一個可以嵌入網頁中的 CEnvi 的版本。這些早期的試驗被稱為 Espresso Page(濃咖啡般的頁面),它們代表了第一個在萬維網上使用的客戶端語言。而 Nombas 絲毫沒有料到它的理念將會成為萬維網的一塊重要基石。

當網上衝浪越來越流行時,對於開發客戶端腳本的需求也逐漸增大。此時,大部分網際網路用戶還僅僅通過 28.8 kbit/s 的數據機連接到網路,即便這時網頁已經不斷地變得更大和更複雜。而更加加劇用戶痛苦的是,僅僅為了簡單的表單有效性驗證,就要與伺服器進行多次地往返交互。設想一下,用戶填完一個表單,點擊提交按鈕,等待了 30 秒的處理後,看到的卻是一條告訴你忘記填寫一個必要的欄位。

那時正處於技術革新最前沿的 Netscape,開始認真考慮開發一種客戶端腳本語言來解決簡單的處理問題。

當時工作於 Netscape 的 Brendan Eich,開始著手為即將在 1995 年發行的 Netscape Navigator 2.0 開發一個稱之為 LiveScript 的腳本語言,當時的目的是在瀏覽器和伺服器(本來要叫它 LiveWire)端使用它。Netscape 與 Sun 及時完成 LiveScript 實現。

就在 Netscape Navigator 2.0 即將正式發佈前,Netscape 將其更名為 JavaScript,目的是為了利用 Java 這個網際網路時髦辭彙。Netscape 的賭註最終得到回報,JavaScript 從此變成了網際網路的必備組件。
View Code

2)JS之父Brendan Eich(布蘭登 · 艾奇)

Brendan Eich在1995年在Netscape發明瞭JavaScript語言,
這個語言在過去的一些年裡曾是一個最被誤解的語言,隨著AJAX和Web 2.0的發展,人們逐漸正視JavaScript。
這是一篇Computerworld對Brendan Eich的一次採訪,對JavaScript的過去、現在和未來都做了闡述。
我在1995年4月4日加入了Netscape,當時的目標是把Scheme語言或者類似的語言嵌入到Netscape的瀏覽器當中。
由於申請沒 有通過,我加入了Netscape的Server團隊,這個團隊負責Web伺服器和代理伺服器方面產品的開發,
我在這裡工作了一個月,主要進行下一代 HTTP的研發。
到了五月份的時候,我就被調回當初想加入Client團隊,從此我就開始了對JavaScript雛形的開發。
Marc Andreessen和我,連同在Sun工作的Bill Joy,
堅信HTML需要一種腳本化的語言,這種語言就算對於新手和業餘者來說也會很容易上手,
而且這種語言的代碼可以直接寫在HTML的標記之間,以源 代碼的形式作為網頁的一部分發佈。
這種信念同時成為了我們的動力。我們打算開發一個”膠水語言“,
面向網站的設計者和兼職做網站開發的程式員,以替代以前 那種通過圖片、插件和Java小程式搭建網站的方式。
我們把Java看成是由高薪程式員使用的組件語言,而膠水程式員,也就是那些網頁設計師,將通過 JavaScript把組件組合起來實現交互。
JavaScript應該和Visual Basic是類似的,而Java和C++類似。
從這個意義上說,縱觀在微軟的操作系統和應用程式中使用的編程語言家族中,
貫穿在編程語言金字塔的分工差別促進了更多的創新,使我們除了可以選擇像Java和C++那樣”真正“的編程語言以外,
還可以選擇一些”小巧“的腳本式語言,比如JavaScript。

 3)為什麼叫JavaScript

JavaScript最初的名字Mocha和LiveScript是根據什麼起的?
Mocha是Marc Andreessen起的項目名稱,但Netscape的市場部發現這個名字存在潛在的商標衝突,
所以對外決定啟用新的名稱,他們為Netscape的產品名稱啟用了Live這個首碼,比如LiveWire、LiveScript等。
但在1995-1996這個時間,Java的發展勢頭太猛了,所以大家決定沾沾光,把名字修改為JavaScript。

4)JS和JAVA語言關係

Java 和 JavaScript 是兩門不同的編程語言。
 一般認為,當時 Netscape 之所以將 LiveScript 命名為 JavaScript,是因為 Java 是當時最流行的編程語言,帶有 "Java" 的名字有助於這門新生語言的傳播。         
它們的相同之處包括:       
它們的語法和 C 語言都很相似;
它們都是面向對象的(雖然實現的方式略有不同);
JavaScript 在設計時參照了 Java 的命名規則;   
借鑒了Java的垃圾回收機制
類Self語言風格的基於原型(Prototype)的OO(Object-Oriented)模型

它們的不同之處包括:       
JavaScript 是動態類型語言,而 Java 是靜態類型語言;
JavaScript 是弱類型的,Java 屬於強類型;
JavaScript 的面向對象是基於原型的(prototype-based)實現的,Java 是基於類(class-based)的;
JavaScript 除了長得和 Java 比較像之外,語言風格相去甚遠。
JavaScript 在設計時所參考的對象不包括 Java,而包括了像 Self 和 Scheme 這樣的語言。

JavaScript最初的版本由於設計和實現都很倉促,並非一門嚴謹的編程語言,有不少漏洞廣為詬病。但是最重要的是能工作(it works!),而且由於瀏覽器的市場競爭和模仿,被快速廣泛支持。從而形成了事實上的語言標準。
當然JavaScript本身也隨著Web一起演進而變得更為成熟和強大。在客戶端領域擊敗了Java Applet、VBScript乃至其後起之秀Flash的ActionScript,是如今無可置疑的Web客戶端第一編程語言,並開始向系統級語言擴展(NodeJS)。

5)JS標準化---ECMAScript

1997 年,JavaScript 1.1 作為一個草案提交給歐洲電腦製造商協會(ECMA)。第 39 技術委員會(TC39)被委派來“標準化一個通用、跨平臺、中立於廠商的腳本語言的語法和語義”(http://www.ecma-international.org/memento/TC39.htm)。由來自 Netscape、Sun、微軟、Borland 和其他一些對腳本編程感興趣的公司的程式員組成的 TC39 錘煉出了 ECMA-262,該標准定義了名為 ECMAScript 的全新腳本語言。

在接下來的幾年裡,國際標準化組織及國際電工委員會(ISO/IEC)也採納 ECMAScript 作為標準(ISO/IEC-16262)。從此,Web 瀏覽器就開始努力(雖然有著不同的程度的成功和失敗)將 ECMAScript 作為 JavaScript 實現的基礎。

6)發展歷程

1     1995: JavaScript出生,小名叫LiveScript。
2     1997: ECMAScript標準確立。
3     1999: ES3出現,與此同時IE5風靡一時。
4     2000–2005: XMLHttpRequest也就是AJAX大獲流行,給了JS第2次生命。
5     2009: ES5出現,(就是我們大多數人現在使用的)例如forEach, Object.keys, Object.create 以及JSON標準。
6     2015: ES6/ECMAScript2015出現。主要是一些語法糖(好的語法改進),但缺少功能突破。

 


 3:JS組成

 

 

什麼是DOM
JavaScript最主要的操作對象毫無疑問是HTML文檔,我們使用面向對象的方法來對文檔內容進行抽象和概念化,以便於程式對其進行操作。這樣的文檔對象模型就是DOM(Document Object Model),本質上是一種應用程式介面(API)。
HTML文檔的DOM結構和XML的DOM結構類似,都是一種樹形結構。樹的根節點就是document,然後有父節點、子節點、祖先、後代、兄弟節點這些關係。
什麼是BOM JavaScript除了要能操作文檔,還需要能操作瀏覽器,比如獲取瀏覽器視窗大小,或者刷新頁面。和DOM類似,瀏覽器也提供了對象模型來支持JS的訪問。這個模型就是BOM(Browser Object Model)。 BOM主要包含如下6個對象: window對象,它是BOM的根對象,其它的BOM對象都是windows對象的屬性 document對象表示瀏覽器中載入頁面的文檔對象,而這個對象也就是DOM模型的根對象 location對象包含了瀏覽器當前的URL信息 navigator對象包含了瀏覽器本身的信息 screen對象包含了客戶端屏幕及渲染能力的信息 history對象包含了瀏覽器訪問網頁的歷史信息。 JavaScript只有通過調用BOM/DOM API才能賦予網頁文檔動態交互特性,才能真正使得HTML變成動態的HTML。

 


4:文件引入

 <script>標簽用於定義客戶端腳本。它既可以包含腳本語句,也可以通過src屬性指定外部腳本文件。

屬性:

language:用來指定<script>標簽中的腳本類型,即javascript。已廢棄,大多數瀏覽器已經忽略它了,所以不要在使用。

type:它也是用來指定<script>標簽中的腳本類型,即text/javascript。它也是type的預設值,所以可以忽略指定。

src:指定外部的腳本文件。如果指定該屬性,script標簽包含的JS腳本不會執行。

不可以使用單標簽,即<script type=“text/javascript”/>。

1) 引入外部文件

1 <script type="text/javascript" src="JS文件"></script>

2.存放在HTML的<head>或<body>中

1 2 3 <script type="text/javascript">     Js代碼內容 </script>
  • HTML的head中
  • HTML的body代碼塊底部(推薦)

3) 為什麼要放在<body>代碼塊底部?

  • HTML代碼從上到下執行,先載入CSS,避免html出現無樣式狀態;
  • 將JavaScript代碼塊放在<body>最後,可以讓網頁儘快的呈現給用戶,減少瀏覽者的等待時間,避免因為JS代碼塊阻塞網頁的呈現。

5:js註釋

註釋可用於提高代碼的可讀性。Javascript不會執行註釋,用戶也不會看到註釋,註釋只是方便開發者更好的理解JS代碼。

單行註釋:以//開頭。

// 這是一行單行註釋 

多行註釋:以/*開頭,以*/結尾。 

/* 第一行註釋 第二行註釋 */

文檔註釋:以/**開頭,以*/結尾。 

/** 這是文檔的註釋 */

重要註釋:以/*!開頭,以*/結尾 

/*! 這是非常重要的註釋 */ 


6:js變數

變數是存儲信息的容器,用var關鍵詞來聲明(創建)變數。

1)變數定義(聲明):

先定義後賦值:

var age;    //var 是關鍵字,age是變數名

age = 20;  //20是數據 “=”是賦值

定義的同時賦值: var age=20;

一條語句中聲明多個變數,該語句以var開頭,並使用英文逗號分隔。

  var x= '加數', y= '加數',z='和';

2)變數的分類

全局變數:在所有的函數外部定義的變數和不寫 var 則為全局變數 

局部變數:在函數內部定義的變數且必須以var開頭申明

1 2 3 4 5 6 7 8 9 10 <script type="text/javascript">     // 全局變數     name = 'xiaoming';      function func(){             // 局部變數             var age = 18;             // 全局變數             sex = "man"     } </script>

  

1 2 3 4 5 6 7 8 9 10 var a = 5; var b = 6; var c = 12; //在此之前定義的三個變數都是全局變數(頁面關閉後被刪除) function sum() {     var c = a + b;//局部變數(生存周期:函數執行完畢後被刪除)     console.log(c);//在此輸出的是局部變數,則輸出結果:11 } sum(); console.log(c); //在此輸出的變數是全局變數,則輸出的結果:12

  

1 2 3 4 5 6 7 8 9 var a = 5;//全局變數 (function () {     var a = 7;//局部變數,作用域為此函數代碼塊內     sum(); })();   function sum() {     console.log(a + 4);//a的值是全局變數的值,故輸出的結果為9 }

   

註:1, 變數也可以不定義,但強烈不推薦。 2, 變數必須先賦值再使用


  7:變數命名規則及常用命名法

1)變數命名規則:以字母、數字、下劃線和$組成,但是不能以數字開頭。且JS語句和JS變數都是嚴格區分大小寫不能用拼音來命名。

2)變數常用命名法推薦西班牙命名法,以 小寫字母b,f,i,s開頭表示類型,後接大寫開頭的有意義的單詞。

駝峰命名法(Camel):第一個單詞的首字母小寫,後面的單詞首字母大寫。

帕斯卡命名法(Pascal):所有單詞的首字母大寫。

匈牙利命名法(Hungarian):在變數名最前面添加相應小寫字母來標識變數的類型,後面的單詞首字母大寫。 

1 2 3 4 5 6 7 8 9 10 11 // 駝峰命名法 //   var haveGoodGoods = '有好貨';   // 帕斯卡命名法    var HaveGoodGoods;   // 匈牙利命名法    var sHaveGoodGoods = '有好貨';

  

 3)儘量使用有意義的單詞作為變數名(語義化),也儘量不要與HTML、CSS中的關鍵字衝突。

                  保留關鍵字列表


8:數據類型

  • 基本數據類型:字元串類型(string)、數值類型(number)、布爾類型(boolean)、undefined、null。

1)字元串類型:必須要由成對的單引號或雙引號包起來。內容可以是任意文本,只要不包含包圍字元串的引號就可以。如果一定要包含,則用反斜杠轉義。

// 字元串類型
var data = 'this is a string';

//字元串包含引號轉義

 var data = '"this is a str\'ing'; 

\0 空位元組 \n 換行 \t 製表 \b 空格 \r 回車 \f 進紙 \\ 斜杠 \' 單引號 \" 雙引號  

 

2)數值類型:可以帶小數點,也可以不帶小數點。
 var number = 123;
 var number = 123.4;
 var number = '123.4';

轉換:

parseInt(..)    將某值轉換成整數,不成功則NaN

parseFloat(..) 將某值轉換成浮點數,不成功則NaN

特殊值:

   NaN,非數字。可以使用 isNaN(num) 來判斷,切記不能用if(typeof(num)==NaN)。

  Infinity,無窮大。可以使用 isFinite(num) 來判斷。

3)布爾類型:只有兩個值:true,false。

// 布爾類型 true 和 false
 var bool = true;

4)undefined:表示變數未定義。

5)null:用來表示尚未存在的對象

  • 引用數據類型:對象(object),函數(function)。

1)定義對象(冒號前面的字元串稱為鍵,冒號後面的是值)
   var person = {name: '小明', age: 20};  //name鍵    小明值

2)定義數組
   var arr = ['小白', '男', 20];

3)定義函數(此處數據類型不進行深究)

1 2 3 4 5 6 7 8 9 10 11 12 // 普通函數(聲明式創建函數)  function func(arg){      return true;  } // 匿名函數 (表達式創建函數) var func = function(arg){     return "nick"; } // 自執行函數 (function(arg){     console.log(arg); })('nick')
// 通過構造函數的方式創建函數
// 構造函數:出現在new運算符後的函數,稱為構造函數
var funcName = new Function ();document.write(typeof func);   //typeof來查看變數的類型
1 2 3 // 執行函數    func();

 


9:運算符

  • 算術運算符:+、-、*、/、%(取餘)、++(遞增)、--(遞減)

  +運算符:可用於把字元串變數連接起來。

  var  a=1+"5"  //結果為15(字元串)

  //當用/運算符的時候,Math.round的用法(四捨五入)。

1 2 3 4 var a = 9 ,b = 7; // Math.round:四捨五入到整數位 表達式Math.round(9/7)=1,如果想四捨五入到某小數位則先乘後除 var c = Math.round(9 / 7 * 100) / 100; document.write(c);

 

  parseInt:將字元串轉換成整數,從字元串左側依次查找數值,直到碰到非數值的字元結束

  parseFloat:將字元串轉換成浮點數(帶有小數點的數值)。

  NaN:not a number  (NaN類型是Number,可用typeof來查看相關類型)

1 2 3 4 5 6 7 var a = '0.128.6.7px';   var b = parseInt(a);   //b=0   var b = parseFloat(a);  //b=0.128   document.write(b); 
1 2 3 4 5 6 var a = 10.4, b = 7; //var c = a% b ; /*按照正常演算法3.4,但是js定義的變數都是弱類型,精度相對來說較低出來的結果大概是 3.400000000000000000004,結果接近我們處理的方式如下:*/ var c = a * 10 % b / 10; document.write(c);
1 2 3 4 5 6 7 // ++ (自增) => 前自增(++a)、後自增(a++) var a = 5; // a的前自增:變數本身先自增1,然後再將結果賦予當前位置 // a的後自增:變數的值先賦予當前位置,然後變數本身再自增1 var b = 4 + a++; document.write(a); // 6 document.write(b); // 9

  --a和a--原理同++a和a++

1 2 3 4 5 6 7 var a = 4, b = 3; var c = (a++ + ++b + b-- + --a) % 5; //表達式對應值:4+4+4+4 //對應位置a、b的值: a++=5、++b=4、 b--=3、--a=4 document.write(c); document.write(a); document.write(b);

  賦值運算符:=、+=、-=、*=、/=、%=

1 2 3 4 5 var a = 4, b = 5; a += b; // a = a + b; a %= b; // a = a % b; document.write(a); document.write(b);
  • 關係(比較)運算符:>、<、>=、<=、==、===、!=、!==

===與==的區別:

對於string和number等基本類型,不同類型之間比較:

1、==比較會將變數隱式轉換成同一類型的值進行比較。

2、===如果類型不同,其結果就是不等。

如果是array和object等引用類型,==和===沒有區別,如果兩個的變數是同一個對象就為true,否則為false。

基本類型和引用類型進行比較,==會將引用類型轉換成基本類型,再進行值比較。而===因為類型不同,結果為false。

1 2 3 4 5 6 7 8 9 10 // == 和 === // 基本數據類型 var a = 5, b = '5'; document.write(a == b); //true document.write(a === b);//fasle   // 引用數據類型:看兩側的變數是否為同一個對象,是則true,不是則false var a = {}, b = {}; document.write(a == b); //false document.write(a === b); //false
  • 邏輯運算符:&&、||、!

  •  三目運算符(簡化代碼):? :
1 2 3 // 三目運算符:condition ? if_true : if_false;   var c = 5 > 4 ? '恩' : '哦'; alert(c); //c=恩

 10:運算符的優先順序(自上而下遞減 ,水平同級)

1》.(對象、類的屬性或欄位訪問)     [](數組下表)       ()(函數調用)    :(三目表達式的分組—表達式的分組)

2》++、--、!、delete(刪除對象的某個屬性及屬性值)、new(創建構造函數和創建對象)、typeof

3》*、/、%

4》+、-、+  加、減、字元串連接

5》關係運算符、instanceof(判斷某個對象是否是某個類的一個實例)

6》邏輯運算符

7》賦值運算符

()作用:可以表達式分組、改變運算符的優先順序、函數調用。

例:a=!6<7  =>   true

推理:a=(!6)<7    =>     a=false<7     =>    a=0<7    =>        true               



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

-Advertisement-
Play Games
更多相關文章
  • jQuery實現身份證輸入添加空格 表單驗證身份證輸入,並且輸入時前6位添加一個空格,中間8位後添加一個空格,及身份證格式驗證 參考:基於jquery實現的銀行卡號每隔4位自動插入空格的實現代碼 參考網址: http://www.jb51.net/article/97966.html 源碼代碼如下: ...
  • 今年工作進度到這裡結束,整理一下今年收集的自用js庫,後期會更新,代碼已貼github=>https://github.com/lpg-kobe/personal-github /** * @param {long} //通用函數庫 * @param {onerror} //js錯誤調試 * @au ...
  • 最近學習vue時看到了let,const變數定義,查閱相關資料整理了一下,所以就總結下加深印象,js中三種變數方式var、const、let的區別 1.var定義的變數是可以修改,如果不初始化會輸出undefined,不會報錯。 2.const定義變數不可修改,而且必須初始化,const聲明一個只讀 ...
  • 前段時間開發中,遇到一個父元素和子元素都有事件時,發現會出現事件冒泡現象,雖然知道ev.stopPropagation()和ev.stopPropagation()其中一個是阻止事件冒泡,卻不知ev.preventDefault()和ev.stopPropagation()以及return fals ...
  • /* 定義替換對象鍵值 */var setReferArgs = function(){ var referArgs = new Object(); referArgs['#userID\#'] = userId; referArgs['\#userName\#'] = userName; retu ...
  • 形狀 一 自適應的橢圓 1.難題 1> 圓 你可能註意到過, 給任何正方形元素設置一個足夠大的border-radius, 就可以把它變成一個圓形。所用到的CSS 代碼如下所示: *當任意兩個相鄰圓角的半徑之和超過border box 的尺寸時,用戶 代理必須按比例減小各個邊框半徑所使用的值,直到它 ...
  • 今天學習了tab選項卡切換。 js代碼: 1 <script> 2 var lis = document.querySelectorAll("#tab-title li"); 3 var i = 0, len = lis.length; 4 for (; i < len; i++){ 5 var l ...
  • 一、語法 transition: property duration timing-function delay transition屬性是個複合屬性,她包括以下幾個子屬性: transition-property :規定設置過渡效果的css屬性名稱 transition-duration :規定完 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...