///////////////////////////////////////////////////////////////////////////////
對(duì)于一個(gè)常駐的變量(對(duì)象)闻坚,比如:
oUserinfo={
uid:xx,
wid:xx,
info:{}
}
通常需要一些方法來(lái)對(duì)其進(jìn)行修改沽翔,常用的寫法是
oUseinfo.setUid=function(xxx){
//這里是各種判定
this.uid=xxx;
}
在使用的時(shí)候可以直接使用oUserinfo.setUid(xxx);
而不用每次修改的時(shí)候進(jìn)行判定了
場(chǎng)景:1、對(duì)象常駐 2窿凤、屬性經(jīng)常會(huì)被改變 3仅偎、觸發(fā)屬性改變的時(shí)候需要做很多判斷和輸入值的調(diào)整、拼接等轉(zhuǎn)換操作
///////////////////////////////////////////////////////////////////////////////
chrome插件開(kāi)發(fā):
manifest中的一些重要屬性:
1卷玉、點(diǎn)擊插件彈出小窗口:
"browser_action": {
"default_icon": "images/logo.png",
"default_title":"hello title",
"default_popup":"popup.html"
},
小窗口中的內(nèi)容為default_popup中的html文件
2哨颂、監(jiān)聽(tīng)點(diǎn)擊插件:
"background": {
"scripts":["background.js"],
"persistent": false
},
監(jiān)聽(tīng)腳本在background.js
注意:background中還可以設(shè)置page屬性,是一個(gè)html文件相种,但page和scripts這兩個(gè)屬性只能使用一個(gè)威恼,否則會(huì)報(bào)錯(cuò)
另外,如果想要監(jiān)聽(tīng)插件點(diǎn)擊寝并,則不可以使用default_pupup屬性
3箫措、要想插件自動(dòng)更新,則可以使用以下屬性:?
"update_url":"http://192.168.101.7/h5pro/apps/chrome_plugins/demo",
目錄設(shè)置到插件目錄衬潦,這樣斤蔓,就不用每次更改插件都重新加載了,很方便開(kāi)發(fā)镀岛。當(dāng)然弦牡,如果改了manifest文件,則還是需要重新加載的
4漂羊、獲取一些重要權(quán)限:?
"permissions":[
"http://*/",
"notifications",
"tabs",
"activeTab",
"storage",
"cookies"
],
"http://*/"這個(gè)權(quán)限非常重要驾锰,這樣你就可以講該插件應(yīng)用到所有的網(wǎng)站了,否則走越,該插件只能在localhost使用
5椭豫、關(guān)于content_scripts:?
"content_scripts": [{
"matches": ["http://*/*","https://*/*"],
"css": ["css/1.css"],
"js": ["js/jquery.js","js/1.js"]
}]
這里的matches很重要,只有滿足matches的網(wǎng)址才會(huì)被應(yīng)用該插件旨指。
js中1.js可以被自動(dòng)執(zhí)行
///////////////////////////////////////////////////////////////////////////////
并排的幾個(gè)display:inline-block的元素為什么會(huì)出現(xiàn)錯(cuò)位呢赏酥?
是因?yàn)閕nline-block是基于baseline定位的,當(dāng)他們大小不一致的時(shí)候谆构,就會(huì)出現(xiàn)上下不整齊的情況裸扶,只要設(shè)置好他們的高度相同,則不會(huì)再錯(cuò)位了
///////////////////////////////////////////////////////////////////////////////
這是一種十分推薦的寫法:
(function(){
}).call(this);
這里的this是外部的環(huán)境搬素,在內(nèi)部用this.xxx定義的變量實(shí)際上是可以在外部被訪問(wèn)到的姓言,而內(nèi)部的變量則對(duì)外不可見(jiàn)瞬项。好處:
1、一個(gè)js文件何荚,如果使用這種寫法作為整體結(jié)構(gòu)囱淋,那么,this指向window餐塘,這樣的話妥衣,就不用擔(dān)心過(guò)多無(wú)用變量暴露在外面,而僅僅是將你需要賦給全局的變量用this.xxx
2戒傻、十分簡(jiǎn)潔地就可以實(shí)現(xiàn)內(nèi)部變量賦值給外部環(huán)境税手。
///////////////////////////////////////////////////////////////////////////////
判斷是否為數(shù)組類型:
typeof [] =>object
[] instanceof Array =>true
所以判斷數(shù)組不能采用typeof來(lái)判斷,而應(yīng)該用instance
///////////////////////////////////////////////////////////////////////////////
本地存儲(chǔ):
localStorage需纳、sessionStorage芦倒、cookie
localStorage和sessionStorage區(qū)別:前者是永久性存儲(chǔ),后者是會(huì)話級(jí)存儲(chǔ)不翩,窗口或標(biāo)簽關(guān)閉后就沒(méi)有了
前兩者都都是window內(nèi)置對(duì)象兵扬,有setItem、removeItem口蝠、setItem器钟、clear等方法(這些方法都是繼承自Storage,因?yàn)樗麄兊腳_proto__都是Storage)妙蔗。他們的改變會(huì)出發(fā)window的storage事件傲霸,所以,可以用window.addEventListener(’storage’,function(){},false)來(lái)監(jiān)聽(tīng)本地存儲(chǔ)的變化
而cookie則是document的一個(gè)屬性眉反,增刪查改都需要手動(dòng)添加昙啄,而且,每次的請(qǐng)求都會(huì)講cookie發(fā)送給服務(wù)端寸五,會(huì)額外增加帶寬梳凛。
cookie跨域解決(php):
A 機(jī)器所在的域:a1.main.com,A 有應(yīng)用 main.php
B 機(jī)器所在的域:b1.test.com播歼,B 有應(yīng)用 test.php
在 main.php 里設(shè)置 cookie 的時(shí)候, cookie 的設(shè)置方法如下:
setcookie( "TestCookie", ?"okol", ?time() + 3600, ?"/", "b1.test.com", 1 ); //將cookie共享域名添加上
If-Modified-Since:當(dāng)資源過(guò)期時(shí)(使用Cache-Control標(biāo)識(shí)的max-age)掰读,發(fā)現(xiàn)資源具有Last-Modified聲明秘狞,則再次向web服務(wù)器請(qǐng)求時(shí)帶上頭 If-Modified-Since,表示請(qǐng)求時(shí)間蹈集。web服務(wù)器收到請(qǐng)求后發(fā)現(xiàn)有頭If-Modified-Since 則與被請(qǐng)求資源的最后修改時(shí)間進(jìn)行比對(duì)烁试。若最后修改時(shí)間較新,說(shuō)明資源又被改動(dòng)過(guò)拢肆,則響應(yīng)整片資源內(nèi)容(寫在響應(yīng)消息包體內(nèi))减响,HTTP 200靖诗;若最后修改時(shí)間較舊,說(shuō)明資源無(wú)新修改支示,則響應(yīng)HTTP 304 (無(wú)需包體刊橘,節(jié)省瀏覽),告知瀏覽器繼續(xù)使用所保存的cache颂鸿。
///////////////////////////////////////////////////////////////////////////////
regex="a.*?d";// 懶惰匹配
regex2="a.*d"http:// 貪婪匹配
///////////////////////////////////////////////////////////////////////////////
es6的forEach促绵、map、filter:
// forEach僅僅是遍歷數(shù)組
forEach((value, index, callback) =>{
? ? xxx
});
// 而map則是按照return返回值對(duì)每個(gè)每個(gè)數(shù)組進(jìn)行操作嘴纺,遍歷操作之后的值為return之后的值
map((value, index, callback) => {
? ? return xxx;
});
// filter 則是過(guò)濾器败晴,return 出的結(jié)果為true則通過(guò),否則不通過(guò)
filter((callback) => {
? ? return true/false; // 一旦返回true栽渴,則通過(guò)尖坤,返回的值被判斷為true則通過(guò),否則不通過(guò)闲擦,比如慢味,0不通過(guò),1會(huì)通過(guò)
});
///////////////////////////////////////////////////////////////////////////////
String()和toString() 區(qū)別:
前者可以把null佛致、undefined轉(zhuǎn)換成'null'贮缕、'undefined',后者這么轉(zhuǎn)則會(huì)報(bào)錯(cuò)
數(shù)字轉(zhuǎn)換成字符串時(shí)俺榆,前者不存在進(jìn)制轉(zhuǎn)換感昼,后者可以轉(zhuǎn)換成對(duì)應(yīng)進(jìn)制
String(null) => 'null'
10.toString(8); => 12