1.巧用判断:
在js中,NaN,undefined,Null,0,"" 在转换为bool的时候,是false,所以,可以这样写。
if(!obj) {}
表示一个对象如果为false的时候所做的事情,因为如果obj为以上任何一个,那么就是false,!false即是true,这样,就不需要 if(obj==null || obj == NaN ....)。
2.巧用运算符:
有一个很经典的技巧,得到时间戳。
var dataspan = new Date()*1;
我们知道,js是弱类型语言,Date()会返回一个表示时间的字符串,用这个字符串进行算术运算,将得到转换,也就是结果的时间戳。
3.巧用正则表达式:
/.a/ig.exec('xsas')
//相当于创建一个reg对象,调用了exec方法,当然也能调用其他的方法,如:test(),match()等。
4.取数组最大值和最小值:
var values = [1,2,3,40,23];
var max = Math.Max.apply(Math,values);
调用Max.apply,设置对象的为Math,然后传递一个Values,就能确定最大值。
5.内存优化:
function p(){this.p='moersing'}; var p1 = new p();
p1.xx
p1.xx
.......
p1=null; //执行完操作之后,最后手动解除对p1的引用。
6.最受欢迎的创建对象方式(原型模式):
function c(){
this.name ='moersing';
this.age=18;
this.books=['javascript develop','C# develop'];
}
c.prototype={
displayBookName:function (){
foreach(var t in this.books)
{
document.write(this.books[t]);
}
}
}
原型构造模式的最大缺点在于引用类型的共享,所以,将引用类型定义在构造函数中,而将通用方法定义在原型中,使用this引用。
7.块级作用域和私有变量
在javascript中,没有块级作用域和私有变量这一说,但是,利用一些特性,则能模仿这些效果。
7.1块级作用域:
(function(){
//块级作用域
}
)();
匿名函数外面加上一个括号,我管它叫"函数标准化",也就是说,可以像标准函数那样调用,如:
var name =function(){};
(name)();//一般不会这么写;
这么做的好处就是,在()外部无法访问到函数中变量,也就成了块级作用域,这种方式一般用在编写插件的时候,不会再全局 (global)中添加额外的变量,而且,在函数执行完毕之后,其内部定义的变量就被销毁了,所以,也不会有闭包特性存在的问题。
7.2私有变量:
function private()
{
var name = 'moersing';
this.getName = function(){
return this.name;
}
}
私有变量实际上就是利用函数的作用域作为限制(外部无法访问),然后定义一个方法,这个方法返回相应的变量,仅此而已。
8.DOM之NodeList:
nodeList是一个动态的元素,这意味着,在文档中添加任何元素,nodeList都会实时更新,如:
var alldiv = document.getElementsByTagName('div');
for(var i=0;i
var div = document.createElement('div');
div.innerHTML= i.toString();
document.body.appendChild(div);
}
这段代码会造成无限循环,在循环里面创建了一个div,然后appendChild方法将其添加到body中,那么,所有alldiv会立即就更新,所以,i
var alldiv = document.getElementsByTagName('div');
var len,i;
for(i=0,len=alldiv.length;i
var div = document.createElement('div');
div.innerHTML= i.toString();
document.body.appendChild(div);
}
这里建议:最好不要频繁的对NodeList操作,因为每次操作都会执行一次DOM树的查询。
除了以上介绍的方法外,HTML5 新加入的API(selector API Level1)也能解决这个问题,它类似C#的linq及时查询,至于什么是linq及时查询,以后我会更新blog,敬请关注:
var allDiv= document.querySelectorAll('div');
for(var i=0;i
var div = document.createElement('div');
div.innerHTML= i.toString();
document.body.appendChild(div);
}
querySelectorAll需要一个参数,一个CSS选择器,类似jquery中的$(),它返回的NodeList是一个及时的,非动态的DOM集合。
另外还有一个querySelector,返回匹配的第一个元素,有关HTML5 API 详 见
http://www.w3.org/standards/techs/dom#w3c_all
或者
https://developer.mozilla.org/zh-CN/docs/Web/API
另外,本人也在酝酿一篇blog,专门讲HTML5 API的,敬请关注。
9.DOM性能:
不要做这种傻事(我做过。。。)
for(var i=0;i {
document.querySelector('ul').innerHTML="
}
给对象的innerHTML赋值,会调用内置的C++解析器解析这个字符串,虽然速度很快,但是最好不要这样操作,会有一定的性能流失。
最好这样做:
var ih=null;
for(var i=0;i
{
ih+="
}
document.querySelector('ul').innerHTML=ih;
另外的一些性能优化话题,等有时间再更新。
以上所述就是本文的全部内容了,希望大家能够喜欢。

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

foreach不是es6的方法。foreach是es3中一个遍历数组的方法,可以调用数组的每个元素,并将元素传给回调函数进行处理,语法“array.forEach(function(当前元素,索引,数组){...})”;该方法不处理空数组。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3汉化版
中文版,非常好用

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

禅工作室 13.0.1
功能强大的PHP集成开发环境

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

WebStorm Mac版
好用的JavaScript开发工具