博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在编写javascript时要注意的一些细节
阅读量:5948 次
发布时间:2019-06-19

本文共 1474 字,大约阅读时间需要 4 分钟。

自动分号插入

Js不像其他语言强制要求;号结尾不然编译不过,原因是JS有自动;号的插入。

var text=function(){}text()

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

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

然后JS插入;号有一个固定的规则,但这规则并不能适用于任何场景就会把;号插乱。

结论
建议绝对不要省略分号,同时也提倡将花括号和相应的表达式放在一行,对于只有一行代码的 if 或者 else 表达式,也不应该省略花括号。这些良好的编程习惯不仅可以提到代码的一致性,而且可以防止解析器改变代码行为的错误处理。

不要用eval

这并不是eval 不好而是因为容易被用错。

eval只是一个普通的函数,只不过他有一个快速通道通向编译器,可以将string变成可执行的代码。有类似功能的还有Function , setInterval 和 setTimeout。
1、 eval不容易调试。用chromeDev等调试工具无法打断点调试,所以麻烦的东西也是不推荐使用的…
2、说到性能问题,在旧的浏览器中如果你使用了eval,性能会下降10倍。在现代浏览器中有两种编译模式:fast path和slow path。fast path是编译那些稳定和可预测(stable and predictable)的代码。而明显的,eval不可预测,所以将会使用slow path ,所以会慢。
还有一个是,在使用类似于Closure Compiler等压缩(混淆)代码时,使用eval会报错。
(又慢又报错,我还推荐吗?)
3、关于安全性,我们经常听到eval是魔鬼,他会引起XSS攻击,实际上,如果我们对信息源有足够的把握时,eval并不会引起很大的安全问题。而且不光是eval,其他方式也可能引起安全问题。比如:
莫名其妙给你注入一个<script src="">标签,或者一段来历不明的JSON-P请求,再或者就是Ajax请求中的eval代码…
所以啊,只要你的信息源不安全,你的代码就不安全。不单单是因为eval引起的。
你用eval的时候会在意XSS的问题,你越在意就越出问题,出的多了,eval就成噩梦了。
4、效率问题是程序逻辑问题。对于一些有执行字符串代码需求的程序中,不用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是弱类型用==的时候会自己去转类型,那么就可能导致出错误的判断

转载地址:http://pgbxx.baihongyu.com/

你可能感兴趣的文章
Oracle Golden Gate 系列十七 -- GG 一对多 real-time data distribution 说明 与 示例
查看>>
大照片背景在网页设计中应用的精美作品范例(下篇)
查看>>
Realtek 8192cu win8 驱动
查看>>
property 中的strong 与weak
查看>>
使用HDFS java api 创建文件出错。
查看>>
支持多个文档类型的文档视结构程序
查看>>
【原创】FIFO的基础和时序分析学习
查看>>
Nginx学习之十一-Nginx启动框架处理流程
查看>>
[置顶] 吃论扯谈---吃货和Office 365订阅的关系
查看>>
蓝桥杯 基础练习 十六进制转十进制(水题,进制转换)
查看>>
php有些系统会报错或提示 Cannot modify header information - headers already sent by
查看>>
从零開始开发Android版2048 (五) 撤销的实现
查看>>
OpenGL 4 : 一个漂亮的心 For you, My Love
查看>>
2007年硕士研究生面试时的英文自我介绍
查看>>
POJ1789:Truck History(Prim算法)
查看>>
SD卡
查看>>
使用servletAPI三种方式简单示例
查看>>
单片机不同晶振怎么计算延迟时间?
查看>>
视频会议十大开源项目排行
查看>>
SQL Server Management Studio 简单使用说明
查看>>