1.js 中  NaN === NaN  值为false;

2.parseInt("abc") === NaN;(不是数字)

3.tab 纯js 实现。可以给当前循环的元素添加.index 属性。当前序号。

4.操作元素时,不要混合操作 style 或者className,交替操纵容易出现费预知情况,因为js 操作改变的是行内样式,优先级高。

5.对象操作属性 可以用点操作符号  ,也可以用中括号操作。 obj.name  === obj['name']; 数组和对象中括号 区别是,对象括号里是字面量(字符串)数组的是序号索引,数字类型。 json 对象也可以通过中括号操作。

6.不固定参数求和;通过arguments 参数 ,循环该参数,求和,返回。

7.取反效果if( true ){  } else{  }

8.js 可以更改任何属性。style.属性 跟标签里一致,除了class外   tagObj.style.className = 'winyh';

9.js 定义一个函数,获取/设置css样式。通过传参。obj(操作对象)  name(属性名称) value (属性值);通过arguments 参数length 属性来判断是 获取还是设置。style 只能操作行间样式,非行间样式需要通过  currentStyle 【getComputedStyle】来获取 obj.currentStyle.width (获取元素宽度) || getComputedStyle(oDiv, null).width  oDiv是需要操作的对象。null 第二个参数随意。(浏览器兼容写法:直接判断 oDiv.currentStyle  是不是为真,即浏览器是否支持 )

function getStyle(obj,name){
if( obj.currentStyle ){
return obj.currentStyle[name]
} else {
return getComputedStyle(obj,null)[name]
}
}
//无法获取符合样式,如 background 必须传入 backgroundColor

10.两个相同长度的数组,只需要循环一次。通过  arr[i]   arrOther[i] 分别获取当前索引下的值。

11.复合样式  background   (background-image background-color  )  border  单一样式  width.

12.数组的length 既可以获取也可以设置。如清空数组的值  arr.length = 0; arr = [1,2] arr.push(3,4);

12.split()将指定字符串分割成数组。

13.splice()方法向/从数组中添加/删除项目,然后返回被删除的项目。可以实现删除,添加 和替换功能。操作会改变原数组。

1、删除功能,第一个参数为第一项位置,第二个参数为要删除几个。array.splice(index,num) 。返回值为删除内容(数组)。

2,插入功能,第一个参数(插入位置),第二个参数(0),第三个参数(插入的项)array.splice(index,0,insertValue) 返回值为空数组。

var arr = [1,2,3,4,5];

console.log(arr.splice(1,0,8,9,8), arr);
//  [1, 8, 9, 8, 2, 3, 4, 5]

3,替换功能,第一个参数(起始位置),第二个参数(删除的项数),第三个参数(插入任意数量的项)array.splice(index,num,insertValue) 返回值为删除内容(数组)

14.数组连接 arr1.concat(arr2)

15.join 数组转字符串,指定字符。

var arr = [1,2,3,4,5];
var str = arr.join(",");
console.log(str);
// 1,2,3,4,5 字符串

16.数组的sort()方法 :*只认识字符串。需要对比数字时需要传入回调函数和参数。

arr.sort(function(n1,n2){
/*if(n1<n2){
return -1;
} else if(n1>n2){
return 1;
} else{
return 0;
}*/

return n1 - n2;
});

17.定时器(定时,延时)停止 ( 定时器返回值是;

返回值是一个数字,代表当前是第几个定时器

)

setTimeout(fn, 1000) 延时

setInterval(fn , 1000 ) 每隔多久执行,无限执行。

clearTimeout()  clearInterval() 清除定时器。

18.时钟原理。

如果设置的频率是1s 则 定时器会隔一秒后才开始执行,需要立即执行的情况可以把回调函数封装,在定时器后直接执行一次。

function addZero(n){

            if(n<10){
return '0'+n;
}else{
return ''+n;
} } var time = new Date();
minute = time.getMinutes();
addZero(minute);

把当前时间拼接成字符串,(6位)循环页面的六个图片,然后通过 字符串下标操作字符串。str[i]  (ie低版本不兼容  换成 str.charAt(i) ) 。更改 oImg[i].src 属性。

var time = new Date();
获取年 time.getFullYear();
获取月 time.getMonth()+1;
获取日 time.getDate();
获取星期几 time.getDay();
获取时 time.getHours();
获取分 time.getMinutes();
获取秒 time.getSeconds();

19.延时提示框效果。多次移入移出时需要清除定时器效果,重置开始定时器。

20.无缝滚动

元素 offsetLeft 属性【对象的直接属性,不在style对象里】 左偏移量。距离浏览器边框,非父元素的偏移量。

1.offsetWidth属性可以返回对象的padding+border+width属性值之和,style.width返回值就是定义的width属性值。

2.offsetWidth属性仅是可读属性,而style.width是可读写的。

3.offsetWidth属性返回值是整数,而style.width的返回值是字符串,并且带有单位。

4.style.width仅能返回以style方式定义的内部样式表的width属性值。

(元素里再获取 oDiv.getElementById("id1“))

改变元素位置需要先把元素设置成脱离标准文档流。然后通过更改left 属性来改变元素位置。

DOM操作

1.获取所有子节点  obj.childNodes (包含了空的文本节点 文本节点没有style属性)  ||  children 属性 获取所有子节点。但是不包含文本节点。子节点只会取到第一层。

2.nodeType  获取节点类型。nodeType == 1 元素节点   nodeType == 3 是文本节点。

3.parentNode 获取父节点。offsetParent 获取元素第一个有定位的父级。

4.firstChild 第一子节点。 lastChild 最后一个子节点。 firstElementChild  firstElementChild 可解决兼容性问题。

5.nextSinling 下一个兄弟(同级)元素  previousSibling 上一个兄弟元素。

操作元素属性方法:点操作,中括号操作,以下方法。

设置元素属性 setAttribute("class", "winyh")

获取元素属性 getAttribute("value", ''dfjasfkas");

移除元素属性 removeAttribute("value");

<input value="123" id="btn" />

            var btn = document.getElementById('btn');
btn.value = 456;
btn['value'] = 456;
btn.setAttribute('value', 456);
//三种操作属性的方式

6.通过 class 获取元素

document.getElementsByClassName("test");// 返回数组

if   (arr[i].className = "test") { ... }

封装函数通过class 获取元素集合。

DOM操作应用

1.创建dom元素  document.createELement("input");  创建的元素可以给它赋值属性   nInput.value = "123";

2.appendChild();给父元素追加子节点    parent.appendChild(ele);

3.insertBefore();给父节点插入元素。 parent.insertBefore(待插入元素, 在谁之前);两个参数。

4.removeChild();在父元素里删除子元素。parent.removeChild(childele);

5.文档碎片 var frag = document.createDoumentFragment();  parent.appendChild(frag)// 低浏览器可以提高性能。

DOM操作应用高级

表格快捷操作  tboies()  rows() cells() .innerHTML

新增的li 元素。需要先计算基础数据,然后在基础上++自增;

表格搜索:循环,当前元素满足条件时,标记元素,当不满足时,清空标记。

忽略大小写 可以把比对的两个元素都转换成大写或者小写。

模糊搜索:字符串的search()函数

多关键字搜索,切割搜索的字符串,然后循环。

li排序 把元素类数组对象 循环存入 创建的 Array数组。appendChild()会把子元素先从原来的元素里删除,再插入新父元素中。

图片或者logo 效果淡入淡出效果是:更改图片透明度。opacity:0.3;    /*兼容IEde 写法*/filter:Alpha(opacity=50);定时器修改opacity值完成渐变效果。

像素 如果有小数,浏览器渲染时直接取整数,没有四舍五入的过程。Math 向上取整和向下取值整不会考虑四舍五入。直接向上或者向下取整。

JS运动

分享到动画功能:

缓冲动画:动画速度和目标距离是成正比的。不要忘了速度取整。速度需要除以一个缓冲系数。

匀速运动:当剩余距离小于运动速度时,默认为到达了。Math.abs(),最后让left值等于目标值;

重复点击速度加快的问题:因为开启了多个定时器,点击时需要清除定时器,保持每次只有一个定时器在运行。

多物体运动时:让每个运动对象都有定时器。清除时清除对应的定时器。不要公用相关变量。

逐渐显示:从上到下显示,可以初始给高度值为0;然后缓冲增加到指定高度。

opaticy style赋值时 0.3 给 30

链式运动:

scrollTop   scrollLeft 滚动条的距离

JS事件对象

e.clientX   e.clientY 可视区里鼠标坐标 (绝对坐标需要 + scrollTop   + scrollLeft)  e.keyCode 按键码

防止拖出可视区:方法

oncontextmenu 事件(鼠标右键)

document.oncontextmenu = function(){
return false;//阻止默认事件,避免右键弹出
}

阻止默认时间来实现输入值只可以输入数字(监听keydown事件,判断keyCode 码是否是数字键所属的码,以及删除功能的码 ,如果不是return false 阻止默认事件,阻止输入,按键无效)

拖拽

1.计算拖拽边缘限制运动范围  ::距离不变

2.不能拖出某个对象原理

3.磁性吸附 (判断距离给一个差值)

4.setCapture() 事件捕获。

5.带框的拖拽虚框

6.自定义滚动条 控制div宽高

window.onload = function(){

            var oDiv = document.querySelector(".container");
var disX = disY =null;
oDiv.onmousedown = function (ev) {
e = ev || event;
disX = e.clientX - oDiv.offsetLeft;
disY = e.clientY - oDiv.offsetTop; document.onmousemove = function (e){
var l = e.clientX - disX;//物体位置
var t = e.clientY - disY;//物体位置 if(l<0){
l = 0;
} else if(l>document.documentElement.clientWidth - oDiv.offsetWidth){
l = document.documentElement.clientWidth - oDiv.offsetWidth
} if(t<0){
t = 0;
} else if(t>document.documentElement.clientHeight - oDiv.offsetHeight){
t = document.documentElement.clientHeight - oDiv.offsetHeight;
} oDiv.style.left = l + 'px';
oDiv.style.top = t + 'px';
console.log(e.clientX, e.clientY);
} document.onmouseup = function (e){
document.onmousemove = null;
document.onmouseup = null;
}
} }

事件绑定:attachEvent()---带on  onclick    addEventListener()

if( oBtn.attachEvent ){ ... }

自定义滚动条

BOM应用

1.window.open(url);window.close();只能关闭open方法打开的窗口。用户打开的关闭会有兼容问题

2.document.write()会先清空后写入

3.每一个新打开的窗口都有window对象

4.window.location 当前页面地址。

5.window.navigator.agent  (对象包含有关访问者浏览器的信息);

6.可视区 (窗口改变时 可视区尺寸会变化 window.document.clientHeight/Width) 可视区离文档顶部距离(scrollTop 也是滚动距离  document.cocumentElement.scrollTop || document.body.scrollTop)快速回到顶部功能就是让scrollTop属性赋值为0

7.document.cookie 大小限制 4k 时间过期之前一直存在。同一个网站共享同一套cookie. 给cookie 赋值多次不会覆盖,而是添加。

设置过期时间:计算14天后星期几

var  odate = new Date();
oDate.steDate(oDate.getDate+14);
document.cookie = "user=winyh;expires="+oDate

获取cookie  字符串通过 split(“;”)分割;删除cookie 可以直接给过期时间 -1天。

用cookie记住用户名: 提交用户名时 先设置cookie 然后在 页面加载时获取cookie ,赋值给表单输入框。

Ajax 

window.onload = function(){
//1.创建ajax 对象
if( window.XMLHttpRequest ){
var oAjax = new XMLHttpRequest();
} else {
var oAjax = new ActiveXObject("Microsoft.XMLHTTP");
} //2.链接服务器
//open(方法, 文件地址 , 同异步(布尔值))
oAjax.open("get", "url" , true); //3.发送请求
oAjax.send(); //4.接受返回
oAjax.onreadystatechange = function(){
// readyState 与服务器交互到哪一步了
if( oAjax.readyState == 4 ){
//状态码 请求成功还是失败
if(oAjax.status == 200){
console.log(oAjax.resposeText);
} else {
console.log(oAjax.status);
}
}
}
}
// 可以封装函数,将成功和失败的语句封装成成功的函数,失败的函数。将状态或者数据的当作参数传入 封装的处理 函数。
function sentAjax(url, success, fail){

                if( window.XMLHttpRequest ){
var oAjax = new XMLHttpRequest();
} else {
var oAjax = new ActiveXObject("Microsoft.XMLHTTP");
} oAjax.open("get", url , true);
oAjax.send(); oAjax.onreadystatechange = function(){
if( oAjax.readyState == 4 ){
if(oAjax.status == 200){
success(oAjax.resposeText);
} else {
//当传入失败的回调函数时才执行
if(fail){
fail(oAjax.status);
}
}
}
}
}

面向对象

抽象

封装

继承

属性和方法

this 指向当前事件发生的对象,当前方法属于谁。

尽量避免在系统对象上定义方法和属性。否则会覆盖、

构造函数  首字母大写,函数内部变量赋值一个 new Object() 然后在对象上添加属性和方法。最后返回 定义的对象。(工厂方式)非设计模式--函数重复,新建很多对象后资源浪费,

var oDiv = document.querySelector(".container");
var disX = disY =null;
oDiv.onmousedown = function (ev) {
e = ev || event;
disX = e.clientX - oDiv.offsetLeft;
disY = e.clientY - oDiv.offsetTop; document.onmousemove = function (e){
oDiv.style.left = e.clientX - disX + 'px';
oDiv.style.top = e.clientY - disY + 'px';
console.log(e.clientX, e.clientY);
} document.onmouseup = function (e){
document.onmousemove = null;
document.onmouseup = null;
}
}

鼠标跟随效果:

引用没有定义的变量---报错

引用没有定义的属性---underfind

body元素没有内部元素时撑不起来

正则

使用 console.time() 和 console.timeEnd() 来标记循环耗时

console.time('Timer1');

var items = [];

for(var i = 0; i < 100000; i++){
items.push({index: i});
} console.timeEnd('Timer1');
//这个对象是一个函数
function fn() {
return 20;
}
console.log(fn + 10);
console.log(fn + 'hello'); fn.toString = function() {
return 10;
}
console.log(fn + 10);
console.log(fn + 'hello'); fn.valueOf = function() {
return 5;
} console.log(fn + 10);
console.log(fn + 'hello');
// 输出结果分别是多少? function fn() {
return 20;
}10
function fn() {
return 20;
}hello 20
10hello 15
5hello

当函数fn用+连接一个字符串或者是数字的时候,如果我们没有重新定义valueOf和toString,其隐式转换会调用默认的toString()方法,将函数本身内容作为字符串返回; 
如果我们自己重新定义toString/valueOf方法,那么其转换会按照我们的定义来,其中valueOf比toString优先级更高

js 技巧(智能社教程温故)的更多相关文章

  1. 在VS中让一个JS文件智能提示另一个JS文件中的成员

    “在VS中如何让一个JS文件智能提示另一个JS文件中的成员” 有时候会有这种情况:当我的一个Web页面引用了两个JS文件(假如分别叫common.js和JScript1.js),如果JScript1. ...

  2. JS技巧

    2016-08-09 200多个js技巧代码(Down) word下载 200多个js技巧代码 目录 1.文本框焦点问题... 6 2.网页按钮的特殊颜色... 6 3.鼠标移入移出时颜色变化... ...

  3. Visual Studio中让一个JS文件智能提示另一个JS文件中的成员

    当一个Web页面引用了两个JS文件(假如分别叫common.js和JScript1.js),如果JScript1.js中需要调用大量的common.js中的方法,这时候在JScript1.js中智能提 ...

  4. Atom编辑器折腾记_(13)JS代码智能提示补全(插件:atom-ternjs)

    题外话 官方正式版尽管内置了.autocomplete-plus;最为明显的一个功能就是记忆你已经输入过的名称进行匹配; 可是针对于某些语言来说,还是有些不足的-.当中JS的补全上就明显不足了-所以须 ...

  5. 提升开发幸福感的10条JS技巧

    鱼头总结一些能够提高开发效率的JS技巧,这些技巧很实用,觉得挺好,想推荐给大家,所以有了这篇文章. 生成随机UID const genUid = () => {  var length = 20 ...

  6. 你应该了解的25个JS技巧

    目录 1. 类型检查小工具 2. 检查是否为空 3. 获取列表最后一项 4. 带有范围的随机数生成器 5. 随机 ID 生成器 6. 创建一个范围内的数字 7. 格式化 JSON 字符串,string ...

  7. VS使用过程中,编写JS没有智能提示解决方法

    问题:编写基本Script代码没有问题,但是在编写DOM代码时候没有智能提示.也就是在编写一般javascript代码时候没有问题,但是要写DOM代码的时候发现没有智能提示,如document等都需要 ...

  8. 冷门JS技巧

    前端已经被玩儿坏了!像console.log()可以向控制台输出图片等炫酷的玩意已经不是什么新闻了,像用||操作符给变量赋默认值也是人尽皆知的旧闻了,今天看到Quora上一个帖子,瞬间又GET了好多前 ...

  9. 转载:冷门js技巧

    前端已经被玩儿坏了!像console.log()可以向控制台输出图片等炫酷的玩意已经不是什么新闻了,像用||操作符给变量赋默认值也是人尽皆知的旧闻了,今天看到Quora上一个帖子,瞬间又GET了好多前 ...

随机推荐

  1. 南阳理工大学oj 题目15 括号匹配(二)

    括号匹配(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:6   描述 给你一个字符串,里面只包含"(",")","[&qu ...

  2. POJ-2336 Ferry Loading II(简单DP)

    Ferry Loading II Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3763 Accepted: 1919 Desc ...

  3. 【转】.NET 应用程序是怎么运行的

    原文:http://www.cnblogs.com/xishuai/p/mono-dotnetcore.html  .NET应用程序运行过程 C#程序运行过程 CLR结构

  4. python xlwt 设置单元格样式-合并单元格

    xlwt模块详解--合并单元格 import xlwtworkbook = xlwt.Workbook()worksheet = workbook.add_sheet('My sheet')# 合并第 ...

  5. 记录一下自己的.tmux.conf,.vimrc

    ~/.tmux.conf set -g default-terminal "screen-256color" set -g prefix C-a bind C-a send-pre ...

  6. 2018/04/17 每日一个Linux命令 之 tar

    10天没有更新这个每日学习 linux 了,因为实在很忙,晚上还要看会其他知识. 但是也不应该给自己找理由,还是应该每天的坚持下去 -- tar 用于在 linux 解压缩/文件 这个命令下面的参数非 ...

  7. 详解回调函数——以JS为例解读异步、回调和EventLoop

      回调,是非常基本的概念,尤其在现今NodeJS诞生与蓬勃发展中变得更加被人们重视.很多朋友学NodeJS,学很久一直摸不着门道,觉得最后在用Express写Web程序,有这样的感觉只能说明没有学懂 ...

  8. Service 的 onStartCommand(Intent, int, int) 返回值

    (1)START_NOT_STICKY If the system kills the service after onStartCommand() returns, do not recreate ...

  9. 【Pyton】【小甲鱼】正则表达式(一)

    正则表达式学习: >>> import re >>> re.search(r'FishC','I love FishC.com!') <_sre.SRE_Ma ...

  10. Python3学习之路~2.2 简单的购物车程序

    程序:购物车程序 需求:启动程序后,让用户输入工资,然后打印商品列表允许用户根据商品编号购买商品用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 可随时退出,退出时,打印已购买商品和余额 代码 ...