一、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
性能: