1.全局變量統(tǒng)一定義,以__開頭,如:
var __data = {};
2.局部變量盡量以變量含義字符串,遇特殊字符串需注意,如:
function domo() {
var tlocation = ''; // 盡量避免與內(nèi)置對(duì)象有沖突的變量名
}
3.所有數(shù)據(jù)盡量放在js變量中。
3.1.隱藏?cái)?shù)據(jù)如盡量寫在js全局變量中,因?yàn)闉g覽器(如ff)可能會(huì)默認(rèn)將該值緩存,會(huì)造成該值在js中被修改后刷新頁(yè)面
被置為該修改值而不是初始值;
如果需要將隱藏?cái)?shù)據(jù)放在form中提交,兩種解決辦法,一是在提交前js賦值,二是input增加一個(gè)屬性
3.2.一些隱私性數(shù)據(jù)放在json中,或者編碼后存放,不過js數(shù)據(jù)都在客戶端放著,想做到絕對(duì)保險(xiǎn)是不太可能的;
如果不想數(shù)據(jù)被抓到,就只好采用類似applet這種小程序來實(shí)現(xiàn),網(wǎng)銀和淘寶這種私密性很強(qiáng)的登錄都采用了類似的插件機(jī)制。
3.3.大量從服務(wù)器端返回的數(shù)據(jù)怎么存放?
是和數(shù)據(jù)顯示放在一起的一大堆隱藏的input里,還是用了jquery后放在對(duì)象的data里?
從實(shí)際應(yīng)用中,現(xiàn)在我更傾向于放在一個(gè)統(tǒng)一的全局json里,為每個(gè)對(duì)象置一個(gè)key就可以了,如:
var __data = {};
function back(jsons) {
__data = {}; // 有數(shù)據(jù)清理需求的需要做這個(gè)工作
$.each(jsons, function(i, json) {
__data[json.id] = json; // 當(dāng)然這里的json.id就是這個(gè)唯一性的key,至于這個(gè)key如何生成,可以自行設(shè)置
});
...
}
如此,每次取數(shù)據(jù)的時(shí)候只需要用key去全局json中取,修改也非常方便,如:
var data = __data[key];
data.anykey = 'anyvalue';
針對(duì)這兩句代碼補(bǔ)充兩點(diǎn):
json的key類似數(shù)組的下標(biāo),但是實(shí)際是一個(gè)字符串,如果沒有這個(gè)key,返回undefined;
取出來的data如果本身是個(gè)基本數(shù)據(jù)類型,那么修改data的值不會(huì)對(duì)全局json的值產(chǎn)生影響;
如:
var __data = { com : 'haah', obj : { da : 'en', db: 23 } };
var com = __data.com;
var obj = __data.obj;
com = 'hooh'; // 只是修改了com變量本身,__data.com的值不變;對(duì)于基本數(shù)據(jù)類型的變量,需要直接修改其值,__data.com = 'hooh';
obj.da = 'cn'; // 因?yàn)閛bj變量實(shí)際是__data.obj的引用,因此修改其值是修改__data本身;
第二點(diǎn)其實(shí)和java中對(duì)于對(duì)象的引用是一致的。
ps:使用jquery可以簡(jiǎn)化大量代碼,也可以避免一些瀏覽器兼容問題,特殊問題可以繞開jquery自行編寫;