一、childNodes:獲取節點,不一樣瀏覽器表現不一樣;
IE:只獲取元素節點;
非IE:獲取元素節點與文本節點;
解決方案:if(childNode.nodeName=="#text") continue 或者 if(childNode.nodeType != '3') continue
二、children:獲取元素節點,瀏覽器表現相同。
所以建議使用children。
全部對象都有 __proto__
屬性,都指向創造對象的函數對象的 prototype
。javascript
上傳文件要使用 formdata
包裝。css
Promise.prototype.catch
方法是 .then(null, rejection)
的別名。這句話來自ruanyifeng ES6的書Promise對象,catch。html
// bad promise .then(function(data) { // success }, function(err) { // error }); // good promise .then(function(data) { //cb // success }) .catch(function(err) { // error });
上面代碼中,第二種寫法要好於第一種寫法,理由是第二種寫法能夠捕獲前面then
方法執行中的錯誤,也更接近同步的寫法(try/catch
)。所以,建議老是使用catch
方法,而不使用then
方法的第二個參數。前端
同一個 EventTarget 註冊了多個相同的 EventListener,那麼重複的實例會被拋棄。因此這麼作不會使得 EventListener 被調用兩次,也不須要用 removeEventListener 手動清除多餘的EventListener,由於重複的都被自動拋棄了。在jQuery中,click()的重複調用,會致使註冊多個click事件。vue
當使用 addEventListener()
爲一個元素註冊事件的時候,句柄裏的 this
值是該元素的引用。其與傳遞給句柄的 event
參數的 currentTarget
屬性的值同樣,而 target
是直接接受事件的子元素。scrollIntoView()
使 div 底部滾動到視窗。大概意思是把滾動條滾動到可視區域。java
使用 const 的對象和數組的內容是能夠被修改的,但數據結構不可變。內容可變,是由於內存存的對象和數組 是 引用。node
在 webpack 裏,全部的文件都是模塊。loader 的做用就是把文件轉換成 webpack 能夠識別的模塊。webpack和gulp的開發文檔寫的是真的好,言簡意賅,通俗易懂。webpack
關於事件循環,執行下一個 task 以前總會清空 microtask。git
npm 新舊版本覆蓋可能會形成迷之問題,這個時候能夠試試 node_module 整個刪掉重裝,即刪掉文件夾,而後執行cnpm install。web
*、/ 和 - 操做符都是數字運算專用的。當這些運算符與字符串一塊兒使用時,會強制轉換字符串爲數字類型的值。若是想要顯示轉換可使用 parseInt
document.title
能夠直接修改當前 html 的標題。
利用對象淺拷貝修改對象,指向同一對象的兩個變量修改對象的效果同樣。這句話很不通順,不明???
腦洞題:1 和 2 只用一次的狀況下怎麼獲得 4 答案:1<<2。
連等賦值從右到左。不建議使用,會出現迷之狀況
compositionstart
事件觸發於一段文字的輸入以前(相似於 keydown 事件,可是該事件僅在若干可見字符的輸入以前,而這些可見字符的輸入可能須要一連串的鍵盤操做、語音識別或者點擊輸入法的備選詞)。也就是,它區別於得到焦點事件,它只有真正輸入可見字符時,才觸發。
void 0
(void後面加任何東西)用於生成一個絕對的 undefined
(不會被重定義),但跟函數會有反作用
注意 localStorage
保存的只能是字符串,因此是沒有 null
的。??
坑一個
typeof [] === 'object' // true typeof null === 'object' // true
import 同步,require異步(待補充)
new()
作了些什麼?
var obj = new Base(); var obj = {}; obj.__proto__ = Base.prototype; Base.call(obj);
stage 0 到 4 的含義:
stage 0 is "i've got a crazy idea",
stage 1 is "this idea might not be stupid",
stage 2 is "let's use polyfills and transpilers to play with it",
stage 3 is "let's let browsers implement it and see how it goes",
stage 4 is "now it's javascript".
Object.getOwnPropertyNames(obj).length === 0
判斷 obj
是否是空對象。getBoundingClientRect()
用於獲取元素寬高以及距離頁面邊框距離,十分方便。&&
的使用場景:左邊爲真繼續執行右邊,如 isDog && bark()
。||
的使用場景:左邊爲假繼續執行右邊,如 let i = value || defalutValue
。一、childNodes:獲取節點,不一樣瀏覽器表現不一樣;
IE:只獲取元素節點;
非IE:獲取元素節點與文本節點;
解決方案:if(childNode.nodeName=="#text") continue 或者 if(childNode.nodeType != '3') continue
二、children:獲取元素節點,瀏覽器表現相同。
所以建議使用children。
var
date =
new
Date(
'2014-04-23 18:55:49:123'
)來生成時間戳。還要記得坑:getMonth()+1
ueditor.addListener("ready", function () {
ueditor.setContent('str');
});
ueditor.ready(function() {
ueditor.setContent('str');
});
作表單:
數據獲取,數據必填項,數據檢驗(類型和內容),數據提交(包含:傳輸正常異常如404,提交成功失敗如res.err.code==0)
gbTurntable.init({ id: 'turntable', config: function (callback) { // 獲取獎品信息 if (prizeList.length == 0) { callback && callback([{ text: '' }, { text: '' }]); } else { callback && callback() } } });
這裏callback && callback()的前面一個callback是檢測有沒有傳入正確的回調函數名,沒有則不會調用回調函數
<html> <head> </head> <body> </body> <script> var obj = { say: function () { console.log(this) } } obj.say() obj.say.apply(this) </script> </html>
輸出:
多個特性的元素應該分多行撰寫,每一個特性一行。如下爲 vscode 裏 vetur 的設置:
"vetur.format.defaultFormatterOptions": { "js-beautify-html": { "wrap_attributes": "force" } }
/deep/
覆蓋子組件 css從 commit 關閉 issues 的方法:commit 信息寫 Fixes #33
,其餘關鍵字還有 close closes closed fix fixes fixed resolve resolves resolved
git reset --soft HEAD^
回退一次 commit
div 的默認寬度是父元素寬的 100%
iso設備,對於非<a> <button>等標籤,點擊事件是無效的,解決方法是加上cursor:pointer
逐幀動畫 animation: animate-name 3s steps(每次循環的幀數) infinite;
@keyframes animate-name{
from{
<!--原位-->
background-position: 0 0;
}
to{
<!--最後一幀-->
background-position: -1540px 0 ;
}
}
"Break out" of a parent's containing width to take the full screen of a page w/this nice utility class:
有關vm之妙,請看:
http://www.cnblogs.com/wengxuesong/archive/2016/05/16/5497653.html
https://aotu.io/notes/2017/04/28/2017-4-28-CSS-viewport-units/
.full-width { ??
width: 100vw;
position: relative;
left: 50%;
right: 50%;
margin-left: -50vw;
margin-right: -50vw;
}
行內元素與下一個元素中間有空格(正常排版),會引發一些詭異的縫隙,常見的例如元素之間有間隔,或看起來空了一行(像加了padding)
pre 標籤設置自動換行 white-space: pre-wrap;
隱藏一個元素,同時讓這個元素的寬度可獲取:設置 overflow: hidden
能夠根據元素高度裁剪視區,設置 height: 0; overflow: hidden
雖然文檔流中佔用了位置,因爲高度爲 0,最終表現特徵達到了咱們指望的 display: none
。此時該元素 clientHeight
、offsetHeight
爲 0,可是 scrollHeight
是有值的。scrollHeight
是一個元素沒有滾動條時的全部內容高度,當一個元素沒有滾動條時 scrollHeight === offsetHeight
。
當 Render Tree 中部分或所有元素的尺寸、結構、或某些屬性發生改變時,瀏覽器從新渲染部分或所有文檔的過程稱爲迴流。
當頁面中元素樣式的改變並不影響它在文檔流中的位置時(例如:color、background-color、visibility等),瀏覽器會將新樣式賦予給元素並從新繪製它,這個過程稱爲重繪。
迴流必將引發重繪,重繪不必定會引發迴流。
文字的垂直居中,讓line-height=height(場景:一般在我把文字的容器設置了hieght,這時文字就會上下不居中)
button設置了border後就再也不有點擊(凹下凸上)的效果
使用僞類時,必定要寫content:''
僅用於firefox和chrome瀏覽器 ie不支持
*::-moz-selection {color:#fc5;background-color:#0f581a;}
移動端優化經常使用 CSS 屬性:
user-select: none; // 禁止文字被選中
outline:none; // 去除點擊外邊框,點擊無輪廓
-webkit-touch-callout: none; // 長按連接不彈出菜單
-webkit-tap-highlight-color: rgba(0,0,0,0); // 去除點擊高亮
@keyframes 的屬性要先後對應,不然不造成動畫
img 元素圖像自適應居中,與 background-size
效果同樣
object-fit: cover;
<img />
標籤千萬記得寫寬高,否則會花式塌陷
flex-grow
所在元素若是未定寬度的話,寬度會被子元素撐開
一個英文單詞默認不換行,不管多長,因此要設置 word break
多行文字居中
.mulit_line{
border:1px dashed #cccccc;
padding-left:5px;
}
.mulit_line span{
display:inline-block;
line-height:14px;
vertical-align:middle;
}
safari 中控制慣性滾動 -webkit-overflow-scroll
滾動條樣式可能使滾動條強制顯示(未肯定)
flex 佈局不換行加 flex-shrink: 0;
實現 div 不壓縮無限並排,能夠用於 swiper 等場景。
巧用貓頭鷹選擇器 *+*
float
自帶 display: block
鼠標禁用 .disabled { pointer-events: none; }
注意 :last-child 與 :last-of-type 的區別
::after 表示法是在 CSS3 中引入的,:: 符號是用來區分僞類和僞元素的。支持CSS3的瀏覽器同時也都支持 CSS2 中引入的表示法 :after。
父元素若是存在 transform 屬性,子元素的 position: fixed 屬性無效
less 中的 calc 問題:height: calc(~"100% - 50px");
vh 在部分瀏覽器中包含地址欄部分,當心使用。
要注意到兩個屬性:box-sizing和display
一個css神器:calc()和vh / vm ,詳見https://mp.weixin.qq.com/s/ZLeTRaEP4zrjnZRvk5EESA
當你進行頁面優化時,先找到最能提升用戶體驗的點先優化
rem+vw的好文:http://caibaojian.com/vw-vh.html
alt + shift + 鼠標點擊 縱向選擇
vetur 分號問題: 安裝 prettier,而後配置 "prettier.singleQuote":true,"prettier.semi": false
可使用插件 document this 方便寫註釋
html tag 屬性分行 wrap_attributes:force
選定變量後按 F12 找到定義位置
快速迭代開發的項目,每一個工做日發佈至少一個版本
項目分輕重,重要的項目慢慢打磨(如B、C端),次要的項目保證功能使用(如後臺管理系統),合理分配開發時間,如有要求安排酌情安排
若是別人發現一個bug,而後你檢查後發現不是bug,你也要裝做修復的樣子,不然別人會一臉不情願想證實給你看,你是錯的。若是下次還出現同樣的問題,你就再解釋緣由,別人就不會抓着你不放
在組件化編程中,悼念被同名組件浪費了幾個鐘的 debug 時間[蠟燭]
iOS 的回彈效果,動的是 body 部分,html 是不動的
學習一個語言以前先看規範,當咱們已經熟悉掌握一門編程語言時,學習另外一門語言,就先學習它的規範,找異同,這樣最快
safari 的 formdata 只支持 append,其餘方法須要 polyfill
rc 的意思是 run commands
導航欄高度 88px,標籤欄高度 98px(iphone5和6經常使用)
關於 HTTP 304 Not Modified,簡單來講,請求內容沒有發生變化的時候,根據設置,服務器可能直接取緩存返回
一個很重要的技巧,ctrl+F5去緩存(更新緩存)刷新,適用Chrome,能夠減小不少開發沒必要要的麻煩
作一個C端項目時,oppo手機出現兼容性問題,整個js炸掉,頁面數據加載失敗。使用微信PC端查看時,出現一樣問題,所以,若解決微信PC端顯示的問題,就可能能夠解決掉某些真機運行出現
的這個問題。
首先,怎麼定位問題,我用的是vConsole,打印的錯誤:
Uncaught SyntaxError Block-scoped declarations (let, const, function, class) not yet supported outside strict mode
HomeIndexbid=1&campusId=1&code=021bRAZR14r6D71VZ22S1EerZR1bRAZ6&state=89013
微信配置完成
Uncaught ReferenceError controlMusicTop is not defined
HomeIndexbid=1&campusId=1&code=021bRAZRr6D71VZq011S1EerZR1bRAZ6&state=103713
第一個錯誤時ES6兼容性問題,注意檢查頁面是否存在let、=>、const、等ES6語法。
第二個錯誤是wx.ready()執行時,controlMusicTop 這個方法尚未生成,解決方法是用方法體代替方法名 。
值得注意的是,vConsole引入與調用必須放在頁面頂部header,防止因其餘js腳本影響vConsole執行。
npm和package.json
管理本地安裝 npm 包的最好方式就是建立 package.json
文件,npm init
便可在當前目錄建立一個 package.json
文件,輸入 npm init
後會彈出一堆問題,嫌麻煩能夠直接輸入 npm init --yes
跳過回答問題步驟,直接生成默認值的 package.json
文件。
參考:https://segmentfault.com/a/1190000015758071
一、注意版本兼容性
二、請求封裝爲一個方法,包括域名,錯誤處理等
三、小程序的data數據獲取不到?我當時的狀況的是用 wx.getStorage 拿數據而後zaisuccess中給它setData,可是console.log()死活獲取不到,敲黑板:由於wx.getStorage 的回調方法是異步的!
四、刷新頁面後執行 onLoad一次,此後點擊導航欄回到頁面,都再也不執行
五、保存對象用this.obj=obj,而不是setData
六、取數據注意用that和this.data.xxx
七、彈出獲取權限的框(容許和拒絕),如今要單獨彈,用wx.authorize(),這是不少獲取用戶信息接口的基礎前提,如過去phoneNumber和userInfo。scope 爲 "scope.userInfo" 時,沒法彈出受權窗口,請使用 <button open-type="getUserInfo"></button>
八、將圖片完整顯示出來不被壓縮,mode="widthFix"+width:100%
九、體驗版沒數據返回:1 真機測試找不到填寫參數的入口 2 體驗版能夠在後臺修改路徑時添加參數,可是看不到錯誤信息 3 排除後發現原來是 域名的問題,沒有設置好https的域名
十、VM245:1 invokeWebviewMethod 數據傳輸長度爲 1075593 已經超過最大長度 1048576 ,這裏的問題,是setData()的問題,若爲對象數組,一是數組長度太長,二是單個對象太大,最好先對後臺返回的數據進行控制,方式返回過多時出現問題
WEB項目的BUG,大多來自於以下:
數據:一、數據的錄入過濾和格式控制或限定(類型和格式) 二、對視圖的意外的影響(顯示長度溢出、類型,格式)
顯示:兼容性和(自)適應性
語言:版本,如ES6
性能: