javascript查漏补缺,一些零碎的知识点的补充
sublime正则替换的用法
store.js的使用
记得判断是否存在容器
获取head和body
|
|
prompt的使用
弹出一个确认框。如果点击取消,则promote返回null,所以要做判断是否点击确定还是取消
键盘事件要加在document身上
键盘事件要加在document身上
ev
|
|
ev.target
ev.key和ev.keyCode
ev.key直接获取按下哪个键
ev.keyCode获取键值
oImg.onerror
|
|
open和location.href
|
|
location 是一个hash对象,location.href 是它的一个属性。
在获取时,用location.href
在赋值时,可以用location=”//www.xxx” ,也可以用 location.href=”//www.xxx”,两者效果相同
函数封装
|
|
return多个时要用json
|
|
三元运算
|
|
变量提升
所有的变量的声明语句var,都会被提升到代码的头部,这就叫做变量提升
js命名规范
js对大小写敏感,所以var a
和var A
是不同的。
要求:
第一个字符,可以是任意 Unicode 字母(包括英文字母和其他语言的字母),以及美元符号($)和下划线(_)。
第二个字符及后面的字符,除了 Unicode 字母、美元符号和下划线,还可以用数字0-9。
中文是合法的标识符,可以用作变量名。
sitch语句。
多个if…else连在一起使用的时候,可以转为使用更方便的switch结构。
switch语句采用的是严格相等运算符(===),而不是相等运算符(==)
do…while 循环
- while循环句末没有分号,而do…while 循环 句末必须要有分号
- 不管条件是否为真,do…while都会执行一次语句1234567891011do {语句} while (条件);-----------------var x = 3;var i = 0;do {console.log(i);i++;} while(i < x);
break 语句和 continue 语句
break语句用于直接跳出代码块或循环、直接停止。
123456789for (var i = 0; i < 5; i++) {console.log(i);if (i === 3)break; //i==3时跳出去,停止该循环}// 0// 1// 2// 3continue语句立即终止本次循环,并直接开始下一轮循环。
1234567var i = 0;while (i < 100){i++;if (i % 2 === 0) continue;console.log('i 当前为:' + i);}
上面代码只有在i为奇数时,才会输出i的值。如果i为偶数,则直接进入下一轮循环。
如果存在多重for循环,不带label的break语句和continue语句都只针对最内层循环。
跳转标签(label)
|
|
null和undefined
|
|
空数组([])和空对象({})对应的布尔值,都是true
|
|
js中的科学计数法
|
|
js会自动进制转换
默认情况下,JavaScript 内部会自动将八进制、十六进制、二进制转为十进制。
判断浏览器是否支持标签的某个属性
|
|
获取移动端坐标
|
|
移动端必须在ontouchstart时,ev.preventDefault();阻止屏幕的滚动
btoa
将字符串转成base64
|
|
ev.target 和 ev.currentTarget
|
|
a.href 和 a.getAttribute(‘href’)
|
|
ele.offsetTop() 和 window.scrollTo(x,y)
|
|
缓动效果
建议使用ev.currentTarget替代ev.target
过渡完成后执行某个函数
transitionend
事件
该事件在 CSS 完成过渡后触发。
动画结束后执行某个函数
animationend
事件
该事件在 CSS 动画结束播放时触发
animationiteration 该事件在 CSS 动画重复播放时触发
animationstart 该事件在 CSS 动画开始播放时触发
切换到另一个页面时,定时器错乱的解决办法
页面失去焦点的意思时,当我们由当前页面切换(此处‘切换’不是指的链接跳转)到另一个页面时,当前页面就失去了焦点
,如果我很久才回到当前页面,若该页面中有定时器时(如我们用定时器做的图片轮播),图片就会出现空白,
出现该原因是,当当前页面失去焦点时,浏览器会减慢失去焦点页面的资源加载和运行,为获得焦点的页面提供更多的资源。
但是我们失去焦点时的页面的定时器还在按程序的规定运行,而浏览器的运行又跟不上,所以就出现空白或卡顿现象。
一旦切换到别的页面,然后重新切换回来时,由于浏览器切换页面js定时器会变缓慢,当重新切换到当前窗口之前变慢的定时器堆积在一起便开始疯狂执行,会出现定时器错乱。
这是因为浏览器本着节省内存的性质,当切换到其他页面时,常用系统页面的定时器不运动,但是动画依然排列,当切换回来的时候,动画加速运动,出现错误,在轮播图之类的页面经常会发生这样的情况。
解决方法:
通过浏览器的焦点事件去执行该js(我也是才知道window窗口也是有焦点事件的)
更好的方法是监听visibilitychange
如果您使用的是jQuery,在animate前加上 $(obj).stop(true,true); 可以解决
查看是否支持某个方法或属性
|
|
多重三目运算
|
|
点击页面其他地方关闭弹出层
- 需要给document添加click事件,而不是body身上,因为body的区域并不是整个页面的宽高,而是与内部文档流的尺寸总和有关
- 为了防止点击按钮的同时触发document事件,因此需要阻断冒泡
- document的点击事件需要改写成节省内存的写法12345678910111213141516171819202122232425262728btn.onclick = function (ev) {popover.style.display = 'block';}document.onclick = function () {//添加到document上console.log(1); //浪费内存popover.style.display = 'none';}wrapper.onclick = function (ev) {ev.stopPropagation();//阻止冒泡}上面这种写法浪费内存,因为只要点击document就会触发它的click事件$('#btn').click(function() {$('#popover').show();$(document).one('click', function() {//在click事件里,给父级加上了另一个事件,这个事件会被立刻执行,因此需要给wrapper阻断冒泡,让它在被点击时才执行console.log(1); //只有弹出层show出来后,才会触发document的click事件,且只触发一次$('#popover').hide();});});//document的click事件加在了btn函数内部,它会在冒泡阶段直接执行,即使不点击document也会直接执行因此需要阻断冒泡$('#wrapper').click(function(ev) {ev.stopPropagation();});
图片加载成功或失败
图片加载成功时: onload
图片加载失败时:onerror
用console.time获取代码运行时长
|
|
form的提交监听的是form
将submit事件加在整个form上,而不是提交按钮上
这样用户按回车也能提交表单
Date对象的日期格式化
toLocaleString() 中国时间
|
|
console.log(1)的值是什么?
答案:打印出1,但是return的值是undefined
document.write()
|
|
write() 与 writeln() 的区别:点击查看
打字机效果
方法一:
方法二:
前面2中的document.write方法不会覆盖前面的内容,而innerHTML会覆盖之前的内容,,此时需要用+=
:
innerHTML += result[n-1]方法:
innerHTML += .slice(n-1,n)方法:
滚动条始终拉到最底下
|
|
移动端触摸touch事件
|
|
用setTimeout+延时递归实现setInterval
因为循环定时器的speed一旦设定就无法改变,如果想要实时改变定时器的速度,就要用setTimeout+延时递归实现setInterval
占位符的用法
|
|
利用:empty实现Skeleton Screen(加载占位图/骨架屏)
输入框的value不能一开始赋值
|
|
输入框内填入json格式(必须双引号!!)
|
|
|
|
翻转字符串
|
|
btoa()转成base-64编码
|
|
多态生成的元素绑定事件
将事件绑定到父元素,通过冒泡触发
当前元素用ev.target获取
获取checkbox
|
|
删除数据后,筛选出新数据
|
|
i++与i+=1
|
|
getAttribute()
一般用于href和src的获取
|
|
|
|