Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
avaScript 的Document.createElement()方法用于創建新的 HTML 元素。以下是實際效果:
const root = document.body;
const newElement = document.createElement('div');
newElement.textContent = 'Hello World';
root.append(newElement);
如您所見,創建元素很容易。令人厭煩的部分是必須設置其所有屬性,然后將其添加到 DOM。更糟糕的是,創建具有相同屬性集的多個元素需要大量重復的代碼。
幸運的是,我們可以將元素創建抽象為一個函數。實際上,我們可以使用對象將屬性傳遞給元素。使用Object.entries()我們可以迭代對象并設置屬性。看起來是這樣的:
const root = document.body;
const createElement = (el, parent, prepend = false) => {
const { nodeName = 'div', ...attrs } = el;
const element = document.createElement(nodeName);
Object.entries(attrs).forEach(([attr, value]) => {
element[attr] = value;
});
if (prepend) parent.prepend(element);
else parent.append(element);
};
createElement(
{
nodeName: 'div',
textContent: 'Hello world',
},
root
);
createElement(
{
nodeName: 'p',
textContent: 'Hi',
},
root,
true
);
這非常有用,但是如果我們想要創建一個元素的 HTML 字符串會發生什么呢?我們有一個createElement 片段,它可以按照這些思路做一些事情。唯一缺少的部分是將其附加到父元素。
更多內容請訪問我的網站:https://www.icoderoad.com
JavaScript 語句向瀏覽器發出的命令。語句的作用是告訴瀏覽器該做什么。
JavaScript 語句
JavaScript 語句是發給瀏覽器的命令。
這些命令的作用是告訴瀏覽器要做的事情。
下面的 JavaScript 語句向 id="demo" 的 HTML 元素輸出文本 "你好 Dolly" :
實例
document.getElementById("demo").innerHTML = "你好 Dolly";
嘗試一下 ?
分號 ;
分號用于分隔 JavaScript 語句。
通常我們在每條可執行的語句結尾添加分號。
使用分號的另一用處是在一行中編寫多條語句。
實例:
a = 5;
b = 6;
c = a + b;
以上實例也可以這么寫:
a = 5; b = 6; c = a + b;
嘗試一下 ?
您也可能看到不帶有分號的案例。 在 JavaScript 中,用分號來結束語句是可選的。 |
JavaScript 代碼
JavaScript 代碼是 JavaScript 語句的序列。
瀏覽器按照編寫順序依次執行每條語句。
本例向網頁輸出一個標題和兩個段落:
實例
document.getElementById("demo").innerHTML="你好 Dolly";
document.getElementById("myDIV").innerHTML="你最近怎么樣?";
JavaScript 代碼塊
JavaScript 可以分批地組合起來。
代碼塊以左花括號開始,以右花括號結束。
代碼塊的作用是一并地執行語句序列。
本例向網頁輸出一個標題和兩個段落:
實例
function myFunction()
{
document.getElementById("demo").innerHTML="你好Dolly";
document.getElementById("myDIV").innerHTML="你最近怎么樣?";
}
JavaScript 語句標識符
JavaScript 語句通常以一個 語句標識符 為開始,并執行該語句。
語句標識符是保留關鍵字不能作為變量名使用。
下表列出了 JavaScript 語句標識符 (關鍵字) :
<table class="reference" "style="width: 100%" style="border: 0px; margin: 4px 0px; padding: 0px; width: 729px; color: rgb(51, 51, 51); font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, STHeiti, 'Microsoft Yahei', sans-serif; font-size: 12px; line-height: normal; text-align: start; white-space: normal;">
語句 | 描述 |
---|---|
break | 用于跳出循環。 |
catch | 語句塊,在 try 語句塊執行出錯時執行 catch 語句塊。 |
continue | 跳過循環中的一個迭代。 |
do ... while | 執行一個語句塊,在條件語句為 true 時繼續執行該語句塊。 |
for | 在條件語句為 true 時,可以將代碼塊執行指定的次數。 |
for ... in | 用于遍歷數組或者對象的屬性(對數組或者對象的屬性進行循環操作)。 |
function | 定義一個函數 |
if ... else | 用于基于不同的條件來執行不同的動作。 |
return | 退出函數 |
switch | 用于基于不同的條件來執行不同的動作。 |
throw | 拋出(生成)錯誤 。 |
try | 實現錯誤處理,與 catch 一同使用。 |
var | 聲明一個變量。 |
while | 當條件語句為 true 時,執行語句塊。 |
JavaScript 對大小寫敏感。
JavaScript 對大小寫是敏感的。
當編寫 JavaScript 語句時,請留意是否關閉大小寫切換鍵。
函數 getElementById 與 getElementbyID 是不同的。
同樣,變量 myVariable 與 MyVariable 也是不同的。
空格
JavaScript 會忽略多余的空格。您可以向腳本添加空格,來提高其可讀性。下面的兩行代碼是等效的:
var person="Hege";
var person = "Hege";
對代碼行進行折行
您可以在文本字符串中使用反斜杠對代碼行進行換行。下面的例子會正確地顯示:
document.write("你好 \
世界!");
不過,您不能像這樣折行:
document.write \
("你好世界!");
您知道嗎?
提示:JavaScript 是腳本語言。瀏覽器會在讀取代碼時,逐行地執行腳本代碼。而對于傳統編程來說,會在執行前對所有代碼進行編譯。
如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!
通常說代碼可維護就意味著它具備以下的特點:
要想讓代碼容易維護,首先必須使其可讀。代碼縮進是保證可讀性的重要基礎,如果所有人都是用相同的縮進,整個項目的代碼就會更容易讓人看懂。縮進通常使用空格數而不是tab鍵來定義,因為tab鍵在不同文本編譯器中的顯示不同,一般來說縮進是4個空格。
可讀性的另一方面是代碼注釋。在大多數的編程語言中,廣泛接受的做法是為每個方法都編寫注釋。
一般來說,以下地方應該寫注釋:
代碼中變量和函數的適當命名對于其可讀性和可維護性至關重要。
只要應用程序的某個部分對另一部分依賴的過于緊密,代碼就會變得緊密耦合,因而難以維護。
典型的問題是在一個對象中直接引用另一個對象,這樣,修改其中一個,可能必須還得修改另一個。緊密耦合的軟件難以維護,肯定需要頻繁的重寫。
web開發中最常見的耦合是HTML和JavaScript,在網頁中,HTML和JavaScript分別代表不同層面的解決方案,HTML是數據,JavaScript是行為。這是因為它們之間要相互操作,需要通過不同的方式將這兩種技術聯系起來。可惜的是,其中一些方式會導致HTML與JavaScript緊密耦合。
把JavaScript直接嵌入在HTML中,要么使用包含嵌入代碼的
<!-- 使用<script>造成緊密耦合 -->
<script>
document.write("hello 哪吒編程");
</script>
<!-- 使用事件處理程序屬性造成緊密耦合 -->
<input type="button" value="Click me" onclick="dosomething()"/>
雖然技術上這樣做沒有問題,但實踐中,這樣會將表示數據的HTML與定義行為的JavaScript緊密耦合在一起,理想情況下,HTML和JavaScript應該完全分開,通過外部文件引入JavaScript,然后使用DOM添加行為。
一般來說,應該避免在JavaScript中創建大量的HTML。同樣,這主要是為了做到數據層和行為層各司其職,在出錯時更容易定位問題所在。
web應用程序的另一層是CSS,負責頁面樣式顯示、
JavaScript和CSS緊密相關,都構建咋HTML之上,因此經常一起使用。
CSS和JavaScript緊密相連的例子:
element.style.color = "red";
element.style.backgroundColor = "blue";
每個web應用程序中都會有大量事件處理程序在監聽各種事件。可是,其中很少能做到應用程序邏輯與事件處理程序分離。
以下是解耦應用程序邏輯和業務邏輯時應該注意的幾點:
做到以上幾點能夠給任何代碼的可維護性帶來巨大的提升,同時也能為將來的測試和開發提供很多可能性。
1、尊重對象所有權
2、不聲明全局變量
最多可以創建一個全局變量,作為其他對象和函數的命名空間。
3、不要比較null
4、使用常量
隨著作用域鏈中作用域數量的增加,訪問當前作用域鏈外部變量所需要的時間也會增加,訪問全局變量始終比訪問局部變量要慢,因為必須遍歷作用域鏈,任何可疑縮短遍歷作用域鏈時間的舉措都能提升代碼性能。
改進代碼性能非常重要的一件事,可能就是要提防全局查找。全局變量和函數相比于局部變量始終是最費時間的,因為需要經歷作用域鏈查找。
如果for循環中多次引用document,可以通過在局部作用域中保存document對象的引用,能夠明顯提升這個函數的性能,因為只需要作用域鏈查找。
在性能很重要的代碼中,應避免使用with語句,與函數類似,with語句會創建自己的作用域,因此也會加長其中代碼的作用域鏈。在with語句中的diamagnetic一定比在它外部執行的代碼慢,因為作用域鏈查找時多一步。
循環時編程中常用的語法構造,因此在JavaScript中十分常見,優化這些循環時性能優化的重要內容,因為循環會重復多次運行相同的代碼,所以運行時間會自動增加。
因為每次循環都會計算終止條件,所以它應該盡可能地快。
循環體是最花時間的部分,因此要盡可能優化。要確保其中不包含可以輕松轉移到循環外部的密集計算。
最常見的循環時for和while循環,這兩種循環都屬于先測試循環。do-while就是后測試循環,避免了對終止條件初始化評估,因此會更快。
如果循環的次數是有限的,那么通常拋棄循環而直接多次調用函數會更快。
JavaScript代碼語句的數量影響執行的速度。一條可以執行多個操作的語句,比多條語句中每個語句執行一個操作要快。那么優化的目標就是尋找可以合并的語句,以較少整個腳本的執行時間。
任何時候只要使用迭代性值(遞增或者遞減),都要盡可能使用組合語句。
比如
let name = values[i++]
替代
let name = values[i];
i++;
在所有JavaScript代碼中,涉及DOM的部分無疑是非常慢的。DOM操作和交互需要占用大量時間,因為經常需要重新渲染整個或部分頁面。此外,看起來簡單的操作也可能花費很長時間,因為DOM中攜帶著大量信息。理解如何優化DOM交互可以極大地提升腳本的執行速度。
訪問DOM時,只要訪問的部分是顯示頁面的一部分,就是在執行實時更新操作。之所以稱其為實時更新,是因為涉及立即更新頁面的顯示,讓用戶看到。每次這樣的更新,無論是插入一個字符還是刪除頁面上的一個內容,都會導致性能損失。這是因為瀏覽器需要為此重新計算數千項指標,之后才能執行更新。實時更新的次數越多,執行代碼所需的時間也越長。
在頁面中創建新DOM節點的方式有兩種,使用DOM方法如createElement()和appendChild(),以及使用innerHTML。對于少量DOM更新,兩種技術區別不大,但對于大量DOM更新,使用innerHTML要比使用標準DOM方法創建同樣的結構快得多。
在給innerHTML賦值時,后臺會創建HTML解析器,然后使用原生DOM調用,而不是JavaScript的DOM方法來創建DOM結構,原生DOM方法速度更快,因為該方法時執行編譯代碼而非解釋代碼。
大多數web應用程序會大量使用事件處理程序實現用戶交互。一個頁面中事件處理程序的數量與頁面響應用戶交互的速度有直接關系,為了減少對頁面響應的影響,應該盡可能使用事件委托。
事件委托利用了事件的冒泡,任何冒泡的事件都可以不在事件目標上,而在目標的任何祖先元素上處理。基于這個認知,可以把事件處理程序添加到負責多個目標的高層元素上。只要可能,就應該在文檔級添加事件處理程序,因為在文檔級可以處理整個頁面的的事件。
由于web應用程序存在很大的性能問題,只要訪問HTMLCollection,無論是它的屬性還是方法,就會觸發查詢文檔,而這個查詢相當耗時,減少訪問HTMLCollection的次數可以極大地提升腳本的性能。
可以優化HTMLCollection訪問最關鍵的地方就是循環。
[機智]點擊獲取資料
*請認真填寫需求信息,我們會在24小時內與您取得聯系。