Javascript是遵循ECMAScript標准下的一個產物,自然ECMAScript的標准其要遵循
1-1 ECMAScript的變量是松散類型的
1-1-1 ECMAScript的變量是松散類型的,即可以用來保存任何類型的數據(未經初始化的變量,會保存一個特殊值undefined).
var message; alert(message); //undefined
1-1-2 可以在修改變量的同時修改值的類型。
var message = "hi"; message = 100; //有效但是不推薦
1-1-3解決方法
前兩天看了網易的前端開發規范倒是挺不錯的,可以方便的讓程序員看懂定義的變量類型。
方法:類型前綴+有意義的單詞 單詞首字母都要大寫
s:表示字符串。例如:sName,sHtml; n:表示數字。例如:nPage,nTotal; b:表示邏輯。例如:bChecked,bHasLogin; a:表示數組。例如:aList,aGroup; r:表示正則表達式。例如:rDomain,rEmail; f:表示函數 例如:fGetHtml o:表示以上未涉及到的其他對象 如:oButton //例外情況 1:作用域不大臨時變量可以簡寫,如:str,num,bol,obj,fun,arr. 2:循環變量可以簡寫,比如:i,j,k等
1-1-4(擴展)強類型定義語言
松散類型是與強類型而言的,就如Java是強類型定義語言,在聲明變量前要加上變量的類型String,int,boolean等.8種基本類型語言,在未經初始化時會根據類型賦上相應的初始化值.int類型未0,boolean類型為false;
Java 編譯器對所有的表達式和參數都要進行類型相容性的檢查以保證類型是兼容的。任何類型的不匹配都是錯誤的,在編譯器完成編譯以前,錯誤必須被改正。
java中基礎類型是儲存在棧空間中的。int a=3;即a指向了一個int類型的數值3.接着int b=3;程序會現在棧內存中查找是否有3這個數值,如果沒有則創建一個,然后將b指向,如果存在則將b直接指向。
1-2局部變量
function test(){ var message = "hi"; //局部變量 } test(); alert(message); //message已銷毀,不存在message變量,導致出錯
1-3 全局變量
javascript的全局對象即為window,在未使用var生命時,相當於未window動態添加了一個message屬性,因為message不像java需要提前聲明成員變量,javascript在使用時
可以動態添加。
var obj = {}; obj.name = "han"; alert(obj.name); // "han"
function test(){ message="hi"; } test(); alert(message); // "hi"; 這里不添加var關鍵字,從而創建了一個全局變量 alert(window.message); // "hi";javascript的全局對象即為window,在未用var生明時,相當於為window動態添加了一個message屬性.t
雖然省略var操作符可以定義全局變量,但是不推薦這樣做。因為在局部變量中定義全部變量很難維護,而且如果有意地忽略了var操作符,也會由於相應變量不會馬上就有定義而導致不必要的混亂
1-4同時定義多個變量:
var message = "hi", found = "false", age = 29;
本文參考了《JavaScript高級程序設計》