一、 讓代碼簡潔:一些簡略的表達方式也會產生很好的優化
eg:x=x+1;在不影響功能的情況下可以簡寫為x++;
二、 變數名方法名盡量在不影響語意的情況下簡單。(可以選擇首字母命名)
eg:定義數組的長度可以取名為:ArrLen而不需要取為ArrayLength。
三、 關於JS的循環,循環是一種常用的流程式控制制。
JS提供了三種循環:for(;;)、while()、for(in)。在這三種循環中for(in)的效率最差,因為它需要查詢Hash鍵,因此應盡量少用for(in)循環,for(;;)、while()循環的性能基本持平。當然,推薦使用for循環,如果循環變數遞增或遞減,不要單獨對循環變數賦值,而應該使用嵌套的++或–運算符。
四、 如果需要遍歷數組,應該先緩存數組長度,將數組長度放入局部變數中,避免多次查詢數組長度。
因為我們常常要根據字元串、數組的長度進行循環,而通常這個長度是不變的,比如每次查詢a.length,就要額外進行一個操作,而預先把var len=a.length,則就少了一次查詢。
五、 盡量選用局部變數而不是全局變數。
局部變數的訪問速度要比全局變數的訪問速度更快,因為全局變數其實是window對象的成員,而局部變數是放在函數的棧里的。
六、 盡量少使用eval。
每次使用eval需要消耗大量時間,這時候使用JS所支持的閉包可以實現函數模板。
七、 減少對象查找
因為javaScript的解釋性,所以a.b.c.d.e,需要進行至少4次查詢操作,先檢查a再檢查a中的b,再檢查b中的c,如此往下。所以如果這樣的表達式重復出現,只要可能,應該盡量少出現這樣的表達式,可以利用局部變數,把它放入一個臨時的地方進行查詢。
八、 字元串連接。
如果是追加字元串,最好使用s+=anotherStr操作,而不是要使用s=s+anotherStr。
如果要連接多個字元串,應該少使用+=,如s+=a;s+=b;s+=c;應該寫成s+=a + b + c;
而如果是收集字元串,比如多次對同一個字元串進行+=操作的話,最好使用一個緩存。怎麼用呢?使用JavaScript數組來收集,最後使用join方法連接起來,如下
var buf = new Array();for(var i = 0; i < 100; i++){ buf.push(i.toString());}var all = buf.join("");
九、 類型轉換
1. 把數字轉換成字元串,應用"" + 1,雖然看起來比較丑一點,但事實上這個效率是最高的,性能上來說:("" +) > String() > .toString() > new String()
盡量使用編譯時就能使用的內部操作要比運行時使用的用戶操作要快。
String()屬於內部函數,所以速度很快,而.toString()要查詢原型中的函數,所以速度遜色一些,new String()用於返回一個精確的副本。
2. 浮點數轉換成整型,這個更容易出錯,很多人喜歡使用parseInt(),其實parseInt()是用於將字元串轉換成數字,而不是浮點數和整型之間的轉換,我們應該使用Math.floor()或者Math.round()。Math是內部對象,所以Math.floor()其實並沒有多少查詢方法和調用的時間,速度是最快的。
3. 對於自定義的對象,如果定義了toString()方法來進行類型轉換的話,推薦顯式調用toString(),因為內部的操作在嘗試所有可能性之後,會嘗試對象的toString()方法嘗試能否轉化為String,所以直接調用這個方法效率會更高
十、 盡量作用JSON格式來創建對象,而不是var obj=new Object()方法。
② 網站運行時間js代碼,初始時間精細到秒
function siteTime(){
window.setTimeout("siteTime()", 1000);
var seconds = 1000
var minutes = seconds * 60
var hours = minutes * 60
var days = hours * 24
var years = days * 365
var today = new Date()
var todayYear = today.getFullYear()
var todayMonth = today.getMonth()
var todayDate = today.getDate()
var todayHour = today.getHours()
var todayMinute = today.getMinutes()
var todaySecond = today.getSeconds()
/* Date.UTC() -- 返回date對象距世界標准時間(UTC)1970年1月1日午夜之間的毫秒數(時間戳)
year - 作為date對象的年份,為4位年份值
month - 0-11之間的整數,做為date對象的月份
day - 1-31之間的整數,做為date對象的天數
hours - 0(午夜24點)-23之間的整數,做為date對象的小時數
minutes - 0-59之間的整數,做為date對象的分鍾數
seconds - 0-59之間的整數,做為date對象的秒數
microseconds - 0-999之間的整數,做為date對象的毫秒數 */
var t1 = Date.UTC(2014,0,14,11,19,00)
var t2 = Date.UTC(todayYear,todayMonth,todayDate,todayHour,todayMinute,todaySecond)
var diff = t2-t1
var diffYears = Math.floor(diff/years)
var diffDays = Math.floor((diff/days)-diffYears*365)
var diffHours = Math.floor((diff-(diffYears*365+diffDays)*days)/hours)
var diffMinutes = Math.floor((diff-(diffYears*365+diffDays)*days-diffHours*hours)/minutes)
var diffSeconds = Math.floor((diff-(diffYears*365+diffDays)*days-diffHours*hours-diffMinutes*minutes)/seconds)
document.getElementById("sitetime").innerHTML=" 已運行"+diffYears+" 年 "+diffDays+" 天 "+diffHours+" 小時 "+diffMinutes+" 分鍾 "+diffSeconds+" 秒"
}
siteTime()
③ js怎麼把時間轉換成年月日時分秒的形式
需要准備的材料分別有:電腦、html編輯器、瀏覽器。
1、首先,打開html編輯器,新建版html文件,例如:權index.html。
④ 我想用js寫一個程序,能夠計算出來,整個代碼的運行時間,這個怎麼寫出來呀
代碼開始時獲得系統時間
var date1=new Date();
代碼結束時獲得系統時間
var date2=new Date();
將時間轉成毫秒專然後得到兩者屬毫秒差
var haomiao=date2.getTime()-date1.getTime();
然後你將毫秒轉成你需要的時間就行。比如多少秒haomiao/1000.
多少分 haomiao/(1000*60)
以此類推
⑤ javascript怎麼調用時間
你好, javascript腳本可以嵌入在內的任意地方,但它何時被調用呢?當瀏覽器打開HTML文件後,會直接運行不是聲明函數的腳本或通過事件調用腳本函數,下面分析這幾種情況。 1 瀏覽器在打開頁面時執行腳本 當瀏覽器打開一個HTML文件時
⑥ 如何在html中加入javascript腳本語言來實現時間的自動更新
Javascript是一種由Netscape的LiveScript發展而來的原型化繼承的面向對象的動態類型的區分大小寫的客戶端腳本語言,主要目的是為了解決伺服器端語言,比如Perl,遺留的速度問題,為客戶提供更流暢的瀏覽效果。當時服務端需要對數據進行驗證,由於網路速度相當緩慢,只有28.8kbps,驗證步驟浪費的時間太多。於是Netscape的瀏覽器Navigator加入了Javascript,提供了數據驗證的基本功能。
ECMAScript"標准制定的網頁腳本語言。這個標准由 ECMA 組織發展和維護。ECMA-262 是正式的 JavaScript 標准。這個標准基於 JavaScript (Netscape) 和 JScript (Microsoft)。Netscape (Navigator 2.0) 的 Brendan Eich 發明了這門語言,從 1996 年開始,已經出現在所有的 Netscape 和 Microsoft 瀏覽器中。ECMA-262 的開發始於 1996 年,在 1997 年 7 月,ECMA 會員大會採納了它的首個版本。 在 1998 年,該標准成為了國際 ISO 標准 (ISO/IEC 16262)。這個標准仍然處於發展之中。 在 2005年12月,ECMA發布ECMA-357標准(ISO/IEC 22537)出台,主要增加對擴展標記語言XML的有效支持。 目前javascript 的最新版本為4.0。
1、運算符
運算符就是完成操作的一系列符號,它有七類: 賦值運算符(=,+=,-=,*=,/=,%=,<<=,>>=,|=,&=)、算術運算符(+,-,*,/,++,--,%)、比較運算符(>,<,<=,>=,==,===,!=,!==)、邏輯運算符(||,&&,!)、條件運算(?:)、位移運算符(|,&,<<,>>,~,^)和字元串運算符(+)。 可能很多人不知道"==="是什麼。 在這里,我為大家解釋一下,在javascript中,「=="是等同運算符。 等同運算符的比較規則: 當兩個運算數的類型不同時:將他們轉換成相同的類型, 1)一個數字與一個字元串,字元串轉換成數字之後,進行比較。 2)true轉換為1、false轉換為0,進行比較。 3)一個對象、數組、函數 與 一個數字或字元串,對象、數組、函數轉換為原始類型的值,然後進行比較。(先使用valueOf,如果不行就使用toString) 4)其他類型的組合不星等。 想兩個運算數類型相同,或轉換成相同類型後: 1)2個字元串:同一位置上的字元相等,2個字元串就相同。 2)2個數字:2個數字相同,就相同。如果一個是NaN,或兩個都是NaN,則不相同。 3)2個都是true,或者2個都是false,則相同。 4)2個引用的是同一個對象、函數、數組,則他們相等,如果引用的不是同一個對象、函數、數組,則不相同,即使這2個對象、函數、數組可以轉換成完全相等的原始值。 5)2個null,或者2個都是未定義的,那麼他們相等。 而「===」是全同運算符,全同運算符遵循等同運算符的比較規則,但是它不對運算數進行類型轉換,當兩個運算數的類型不同時,返回false;只有當兩個運算數的類型相同的時候,才遵循等同運算符的比較規則進行比較。 例如:null==undefined 會返回真 , 但是null===undefined 就會返回假!
2、表達式
運算符和操作數的組合稱為表達式,通常分為四類:賦值表達式、算術表達式、布爾表達式和字元串表達式。
3、語句
Javascript程序是由若干語句組成的,語句是編寫程序的指令。Javascript提供了完整的基本編程語句,它們是: 賦值語句、switch選擇語句、while循環語句、for循環語句、for each循環語句、do while循環語句、break循環中止語句、continue循環中斷語句、with語句、try...catch語句、 if語句(if..else,if...else if ...)、let語句。
4、函數
函數是命名的語句段,這個語句段可以被當作一個整體來引用和執行。使用函數要注意以下幾點: 1)函數由關鍵字function定義(也可由Function構造函數構造); 2)使用function關鍵字定義的函數在一個作用域內是可以在任意處調用的(包括定義函數的語句前);而用var關鍵字定義的必須定義後才能被調用; 3)函數名是調用函數時引用的名稱,它對大小寫是敏感的,調用函數時不可寫錯函數名; 4)參數表示傳遞給函數使用或操作的值,它可以是常量,也可以是變數,也可以是函數,在函數內部可以通過arguments對象(arguments對象是一個偽數組,屬性callee引用被調用的函數)訪問所有參數; 5)return語句用於返回表達式的值。 6)yield語句扔出一個表達式,並且中斷函數執行直到下一次調用next。 一般的函數都是以下格式: function myFunction(params){ //執行的語句 } 函數表達式: var myFunction=function(params){ //執行的語句 } var myFunction = function(){ //執行的語句 } myFunction();//調用函數 匿名函數,它常作為參數在其他函數間傳遞: window.addEventListener('load',function(){ //執行的語句 },false);
5、對象
Javascript的一個重要功能就是面向對象的功能,通過基於對象的程序設計,可以用更直觀、模塊化和可重復使用的方式進行程序開發。 一組包含數據的屬性和對屬性中包含數據進行操作的方法,稱為對象。比如要設定網頁的背景顏色,所針對的對象就是document,所用的屬性名是bgcolor,如document.bgcolor="blue",就是表示使背景的顏色為藍色。
6、事件
用戶與網頁交互時產生的操作,稱為事件。事件可以由用戶引發,也可能是頁面發生改變,甚至還有你看不見的事件(如Ajax的交互進度改變)。絕大部分事件都由用戶的動作所引發,如:用戶按滑鼠的按鍵,就產生click事件,若滑鼠的指針在鏈接上移動,就產生mouseover事件等等。在Javascript中,事件往往與事件處理程序配套使用。 而對事件的處理,W3C的方法是用addEventListener()函數,它有三個參數:事件,引發的函數,是否使用事件捕捉。為了安全性,建議將第三個參數始終設置為false; 傳統的方法就是定義元素的on...事件,它就是W3C的方法中的事件參數前加一個「on」。而IE的事件模型使用attachEvent和dettachEvent對事件進行綁定和刪除。javascript中事件還分捕獲和冒泡兩個階段,但是傳統綁定只支持冒泡事件。
7、變數
如 var myVariable = "some value"; 變數有它的類型,上例中myVariable的類型為string(字元串) javascript支持的常用類型還有: object:對象 array:數組 number:數; boolean:布爾值,只有true和false兩個值,是所有類型中佔用內存最少的; null:一個空值,唯一的值是null; undefined:沒有定義和賦值的變數 實際上javascript的變數是弱變數類型,你賦值給他的是字元串,他就是String . 是數字他就是整形。是true和false他就是boolean型(注意,不能加引號,不然會被當成字元串處理)。
編輯本段特點
能夠具有交互性,能夠包含更多活躍的元素,就有必要在網頁中嵌入其它的技術。如:Javascript、VBScript、Document Object Model(DOM,文檔對象模型)、Layers和 Cascading Style Sheets(CSS,層疊樣式表),這里主要講Javascript。那麼Javascript是什麼東東?Javascript就是適應動態網頁製作的需要而誕生的一種新的編程語言,如今越來越廣泛地使用於Internet網頁製作上。 Javascript是由 Netscape公司開發的一種腳本語言(scripting language),或者稱為描述語言。在HTML基礎上,使用Javascript可以開發互動式Web網頁。Javascript的出現使得網頁和用戶之間實現了一種實時性的、動態的、交互性的關系,使網頁包含更多活躍的元素和更加精彩的內容。 運行用Javascript編寫的程序需要能支持Javascript語言的瀏覽器。Netscape公司 Navigator 3.0以上版本的瀏覽器都能支持 Javascript程序,微軟公司 Internet Explorer 3.0以上版本的瀏覽器基本上支持Javascript。微軟公司還有自己開發的Javascript,稱為JScript。 Javascript和Jscript基本上是相同的,只是在一些細節上有出入。 Javascript短小精悍, 又是在客戶機上執行的,大大提高了網頁的瀏覽速度和交互能力。 同時它又是專門為製作Web網頁而量身定做的一種簡單的編程語言。 JavaScript 使網頁增加互動性。JavaScript 使有規律地重復的HTML文段簡化,減少下載時間。JavaScript 能及時響應用戶的操作,對提交表單做即時的檢查,無需浪費時間交由 CGI 驗證。JavaScript 的特點是無窮無盡的,只要你有創意。
編輯本段開發工具
javascript程序是純文本的,且不需要編譯,所以任何純文本的編輯器都可以編輯javascript文件。在Dreamweaver CS5中不僅有很好的代碼高亮,還有較全的代碼提示和錯誤提示,相比其他編輯器來說是十分強大的。 Visual Studio 2008 支持javascript調試,使程序開發起來更加方便。
編輯本段使用技巧
在網頁的用法
Javascript加入網頁有兩種方法: 1、直接加入HTML文檔 這是最常用的方法,大部分含有Javascript的網頁都採用這種方法,如: <script type="application/javascript"> <!-- document.write("這是Javascript!採用直接插入的方法!"); //-Javascript結束--> </script> 在這個例子中,我們可看到一個新的標簽: <script>……</script>,而<script language="Javascript"> 用來告訴瀏覽器這是用Javascript編寫的程序,需要調動相應的解釋程序進行解釋。(w3c已經建議使用新的標准:<script type="application/javascript">) HTML的注釋標簽<!--和-->:用來去掉瀏覽器所不能識別的Javascript源代碼的,這對不支持 Javascript 語言的瀏覽器來說是很有用的。 注意在非xhtml文檔中插入script標簽時,如果不是引用外部文件,應該在script內加上cdata聲明,避免大於和小於運算符引起的瀏覽器解析錯誤 //-Javascript結束:雙斜杠表示 Javascript的注釋部分,即從//開始到行尾的字元都被忽略。 至於程序中所用到的document.write()函數則表示將括弧中的文字輸出到窗口中去, 這在後面將會詳細介紹。 另外一點需要注意的是,<script>……</script>的位置並不是固定的,可以包含在<head>......</head> 或<body>.....</body>中的任何地方。 還有一個更高級版本的嵌入腳本,它使用了HTML中的CDATA語法(Character Data,就是把CDATA中的文本全部當作純文本處理,除非遇到CDATA的結束) <script language="javascript" type="text/javascript"><!--//--><!CDATA[[//><!-- //javascript代碼 //--><!]]></script>
引用方式
如果已經存在一個Javascript源文件(通常以js為擴展名),則可以採用這種引用的方式,以提高程序代碼的利用率。其基本格式如下: <script src=「url」 type="text/javascript"></script> 其中的Url就是程序文件的地址。同樣的,這樣的語句可以放在HTML文檔頭部或主體的任何部分。 如果要實現「直接插入方式」中所舉例子的效果,可以首先創建一個Javascript源代碼文件「Script.js」,其內容如下: document.write("這是Javascript!採用直接插入的方法!"); 在網頁中可以這樣調用程序:<script src="Script.js" type="text/javascript"></script> 。 也可以同時在導入文件時制定javascript的版本,例如:<script src="Script.js" type="text/javascript; version=1.8"></script> 注意:凡是指定了src屬性的script標簽里的內容都會被忽略.
腳本的調試
JavaScript Editor
隨著用JavaScript編程的深入,你會開始理解那些JavaScript給出的不透明錯誤信息。一旦你理解了你常犯的一般性錯誤,你就會很快知道怎樣避免它們,這樣你寫的代碼中的錯誤將越來越少。編程實際上是一種能隨著時間不斷飛快進步的技術。但是不管變得多麼熟練,你仍然要花一些時間調試你的代碼。如果你做過家庭作業,或有過JavaScript編程經驗,你會知道相當多的時間是花在調試上。這很正常 - 這只是編程者必須做的事之一。實際上,按照大量的研究,程序員平均百分之五十的時間花在解決代碼中的錯誤。 調試的技巧: 根據瀏覽器的提示信息 選擇瀏覽器是很重要的,不同的瀏覽器的錯誤提示都不同,在瀏覽器中錯誤信息最容易理解的,能最快找出錯誤的,就是firefox和opera了。它們都會給出詳細的出錯原因和行號。 使用調試工具 如果你是Firefox的用戶,那麼你可以到添加組件的網頁中搜索一些用於網頁開發的組件 推薦:Firebug 一款非常優秀的組件,可以指出你的腳本中的錯誤,查看DOM樹,查看cookie,ajax通信,並且還有CSS的調試工具,而且也有不少firebug的擴展。 javascript debugger 這是mozilla開發的調試工具,項目代號叫venkman,和gecko的javascript解析器無縫集成,功能非常強大。 清除瀏覽器緩存 有時瀏覽器會在網頁明明修改過的時候卻依然使用緩存里的網頁來顯示,這時最好強制刷新網頁以重新載入數據,如果還不行就清除緩存。 輸出變數 如果你使用firebug調試的話,可以很方便地在腳本里用console.log()來輸出變數的值,而且幸運的是,firebug還會對你輸出的變數進行解析,在控制台里顯示一個清晰的變數結構 如果你沒有firebug,那麼可以用alert代替,不過當有幾百個變數輸出時,很可能不得不強行關閉瀏覽器。在網頁里專門放置一個調試用的div也是一種不錯的解決辦法。
⑦ 如何調用js文件
寫個js文件 文件名暫定為 a.js
a.js裡面的內容如下:
function showTime(){
var time = new Date();
alert(time);
}
寫一個html文件 文件名暫定為 b.html(把a.js和b.html放一個文版件夾)
b.html裡面的內容如下:
<html>
<head><title>time<title/>
<script src="a.js" type="text/javascript"></script>
<head>
<body>
點擊顯示權時間:<input type="button" onclick="showTime()" />
<body/>
<html/>
自己運行下試試~
⑧ js怎麼讓定時器開始就有時間而不是一秒之後
<!>
<htmllang="en">
<head>
<metacharset="UTF-8">
<metaname="viewport"content="width=device-width,initial-scale=1.0">
<metahttp-equiv="X-UA-Compatible"content="ie=edge">
<title>Document</title>
</head>
<body>
<div></div>
</body>
<script>
letnum=5;
lettimeOut=()=>{
document.querySelector("div").innerHTML=num;
setInterval(()=>{
if(num==0){
num=5;
}else{
num--;
}
document.querySelector("div").innerHTML=num;
},1000)
}
timeOut()
</script>
</html>
請採納