JavaScript中日常收集常见的10种错误(推荐)


Posted in Javascript onJanuary 08, 2017

 1 对于this关键词的不正确使用

Game.prototype.restart = function () { 
this.clearLocalStorage(); 
this.timer = setTimeout (function() { 
this.clearBoard(); 
}, 0); 
};

运行上面的代码将会出现如下错误:

uncaught typeError:undefined is not a function

为什么会有这个错? this是指代当前对象本身,this的调用和它所在的环境密切相关。上面的错误是因为在调用setTimeout函数的时候,实际调用的是window.setTimeout,而在window中并没有clearBoard();这个方法;

下面提供两种解决的方法。

1,将当前对象存储在一个变量中,这样可以在不同的环境被继承。

Game.prototype.restart = function() { 
this.clearLocalStorage(); 
var self = this; 
this.timer = setTimeout(function(){ 
self.clearBoard(); }, 0); 
}; //改变了作用的对象

2,使用bind()方法, 不过这个相比上一种会复杂,bind方法官方解释: msdn.microsoft.com/zh-cn/library/ff841995

Game.prototype.restart = function () { 
this.clearLocalStorage(); 
this.timer = setTimeout(this.reset.bind(this)), 
}; 
Game.prototype.reset = function() { 
this.clearBoard(); 
};

2 传统编程语言的生命周期误区

在js中变量的生存周期与其他语言不同,举个例子

for (var i=0; i<10;i++){ 
/* */ 
} 
console.log(i); //并不会提示 未定义,结果是10

在js中这种现象叫:variable hoisting(声明提前)

可以使用let关键字。

3 内存泄漏

在js中无法避免会有内存泄漏,内存泄漏:占用的内存,但是没有用也不能及时回收的内存。

例如以下函数:

var theThing = null; 
var replaceThing = function() { 
var priorThing = theThing; 
var unused = function() { 
if (priorThing) { 
console.log(‘hi'); 
}; 
}; 
theThing = { 
longStr: new Array(1000000).join(‘*'), 
someMethod: function () { 
console.log(someMessage); 
} 
} 
setInterval(replaceThing, 1000);

如果执行这段代码,会造成大量的内存泄漏,光靠garbage collector是无法完成回收的,代码中有个创建数组对象的方法在一个闭包里,这个闭包对象又在另一个闭包中引用,,在js语法中规定,在闭包中引用闭包外部变量,闭包结束时对此对象无法回收。

4 比较运算符

console.log(false == ‘0'); // true 
console.log(null == undefinded); //true 
console.log(” \t\r\n” == 0);

以上所述是小编给大家介绍的JavaScript中日常收集常见的10种错误(推荐),希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
js小技巧--自动隐藏红叉叉
Aug 13 Javascript
Autocomplete Textbox Example javascript实现自动完成成功
Aug 17 Javascript
文本域中换行符的替换示例
Mar 04 Javascript
JavaScript中的Math.sin()方法使用详解
Jun 15 Javascript
javascript实现一个数值加法函数
Jun 26 Javascript
JavaScript仿淘宝页面图片滚动加载及刷新回顶部的方法解析
May 24 Javascript
浅谈js构造函数的方法与原型prototype
Jul 04 Javascript
ui组件之input多选下拉实现方法(带有搜索功能)
Jul 14 Javascript
AngularJS基础 ng-href 指令用法
Aug 01 Javascript
Centos7 中安装 Node.js v4.4.4
Nov 03 Javascript
详解React 元素渲染
Jul 07 Javascript
vue中可编辑树状表格的实现代码
Oct 31 Javascript
详解js中==与===的区别
Jan 08 #Javascript
JavaScript 动态三角函数实例详解
Jan 08 #Javascript
你不知道的 javascript【推荐】
Jan 08 #Javascript
js时间控件只显示年月
Jan 08 #Javascript
javascript函数的四种调用模式
Jan 08 #Javascript
jquery与ajax获取特殊字符实例详解
Jan 08 #Javascript
浅谈DOM的操作以及性能优化问题-重绘重排
Jan 08 #Javascript
You might like
php读取html并截取字符串的简单代码
2009/11/30 PHP
MySQL时间字段究竟使用INT还是DateTime的说明
2012/02/27 PHP
CodeIgniter框架数据库事务处理的设计缺陷和解决方案
2014/07/25 PHP
PHPUnit安装及使用示例
2014/10/29 PHP
php实现简易聊天室应用代码
2015/09/23 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
2017/02/28 PHP
php实现生成code128条形码的方法详解
2017/07/19 PHP
php利用ob_start()清除输出和选择性输出的方法
2018/01/18 PHP
使用PHP访问RabbitMQ消息队列的方法示例
2018/06/06 PHP
sina的lightbox效果。
2007/01/09 Javascript
js跳转页面方法实现汇总
2014/02/11 Javascript
轻松创建nodejs服务器(6):作出响应
2014/12/18 NodeJs
javascript实现连续赋值
2015/08/10 Javascript
jQuery Form 表单提交插件之formSerialize,fieldSerialize,fieldValue,resetForm,clearForm,clearFields的应用
2016/01/23 Javascript
深入学习JavaScript的AngularJS框架中指令的使用方法
2016/03/05 Javascript
学习Node.js模块机制
2016/10/17 Javascript
如何使用Bootstrap 按钮实例详解
2017/03/29 Javascript
bootstrap表格内容过长时用省略号表示的解决方法
2017/11/21 Javascript
jQuery实现简单日历效果
2020/07/05 jQuery
VSCode 配置uni-app的方法
2020/07/11 Javascript
如何HttpServletRequest文件对象并储存
2020/08/14 Javascript
使用Python写一个贪吃蛇游戏实例代码
2017/08/21 Python
python库matplotlib绘制坐标图
2019/10/18 Python
Django项目基础配置和基本使用过程解析
2019/11/25 Python
远程Wi-Fi宠物监控相机:Petcube
2017/04/26 全球购物
女大学生毕业找工作的自我评价
2013/10/03 职场文书
音乐专业应届生教师求职信
2013/11/04 职场文书
生产经理的自我评价分享
2013/11/07 职场文书
荷叶圆圆教学反思
2014/02/01 职场文书
毕业生自荐书
2014/02/03 职场文书
大学第二课堂活动总结
2014/07/08 职场文书
新党章心得体会
2014/09/04 职场文书
2015年秘书个人工作总结
2015/04/25 职场文书
2015年外贸业务员工作总结范文
2015/05/23 职场文书
债务追讨律师函
2015/06/24 职场文书
田径运动会广播稿
2015/08/19 职场文书