在编写javascript时要注意的一些细节

自动分号插入

Js不像其余语言强制要求;号结尾否则编译不过,缘由是JS有自动;号的插入。chrome

var text=function(){}
text()

这样你不加;号也能运行其实在内部js是须要;号去帮助解析的编程

var text=function(){};  //没有;号解析报错,JS则自动加入;号

而后JS插入;号有一个固定的规则,但这规则并不能适用于任何场景就会把;号插乱。
结论
建议绝对不要省略分号,同时也提倡将花括号和相应的表达式放在一行,对于只有一行代码的 if 或者 else 表达式,也不该该省略花括号。这些良好的编程习惯不只能够提到代码的一致性,并且能够防止解析器改变代码行为的错误处理。浏览器

不要用eval

这并非eval 很差而是由于容易被用错。
eval只是一个普通的函数,只不过他有一个快速通道通向编译器,能够将string变成可执行的代码。有相似功能的还有Function , setInterval 和 setTimeout。
一、 eval不容易调试。用chromeDev等调试工具没法打断点调试,因此麻烦的东西也是不推荐使用的…
二、说到性能问题,在旧的浏览器中若是你使用了eval,性能会降低10倍。在现代浏览器中有两种编译模式:fast path和slow path。fast path是编译那些稳定和可预测(stable and predictable)的代码。而明显的,eval不可预测,因此将会使用slow path ,因此会慢。
还有一个是,在使用相似于Closure Compiler等压缩(混淆)代码时,使用eval会报错。
(又慢又报错,我还推荐吗?)
三、关于安全性,咱们常常听到eval是魔鬼,他会引发XSS攻击,实际上,若是咱们对信息源有足够的把握时,eval并不会引发很大的安全问题。并且不光是eval,其余方式也可能引发安全问题。好比:
莫名其妙给你注入一个<script src="">标签,或者一段来历不明的JSON-P请求,再或者就是Ajax请求中的eval代码…
因此啊,只要你的信息源不安全,你的代码就不安全。不仅仅是由于eval引发的。
你用eval的时候会在乎XSS的问题,你越在乎就越出问题,出的多了,eval就成噩梦了。
四、效率问题是程序逻辑问题。对于一些有执行字符串代码需求的程序中,不用eval而用其余方式模拟反而会带来更大的开销。安全

有用到this的地方就记住这句话

谁调用我,我就指谁。new 谁指谁。函数

用setTimeout与setInterval要注意的地方

function fn1(){
};
var text=setTimeout(fn1,1000);

这里要注意的是这二个函数的 第一个参数(fn1)都会把this指向window还有第一个参数能够为string('fn1()')但不要这样用由于这样等于setTimeout 本身隐式使用了eval。工具

function fn1() {
    this.value = 42;
    this.method = function() { 
        // 会将第一个参数的 this 指向全局对象      
        console.log(this.value); // 输出:undefined  
    };
    setTimeout(this.method, 500);
}

'=='与'==='

判断的时候最好用===,由于js是弱类型用==的时候会本身去转类型,那么就可能致使出错误的判断性能

相关文章
相关标签/搜索