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 相关文章推荐
URI、URL和URN之间的区别与联系
Dec 20 Javascript
Cookie 注入是怎样产生的
Apr 08 Javascript
js常用排序实现代码
Dec 28 Javascript
基于jquery实现图片相关操作(重绘、获取尺寸、调整大小、缩放)
Dec 25 Javascript
基于javascript实现随机颜色变化效果
Jan 14 Javascript
使用BootStrap和Metroui设计的metro风格微网站或手机app界面
Oct 21 Javascript
javascript基于原型链的继承及call和apply函数用法分析
Dec 15 Javascript
利用Javascript裁剪图片并存储的简单实现
Mar 13 Javascript
JS代码实现电脑配置检测功能
Mar 21 Javascript
利用vscode调试编译后的js代码详解
May 14 Javascript
webpack分离css单独打包的方法
Jun 12 Javascript
vue 动态设置img的src地址无效,npm run build 后找不到文件的解决
Jul 26 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
使用eAccelerator加密PHP程序
2008/10/03 PHP
JS 网站性能优化笔记
2011/05/24 PHP
PHP中ob_start函数的使用说明
2013/11/11 PHP
php 删除指定文件夹的实例讲解
2017/07/25 PHP
PHP调用全国天气预报数据接口查询天气示例
2019/02/20 PHP
laravel框架实现去掉URL中index.php的方法
2019/10/12 PHP
thinkphp5框架路由原理与用法详解
2020/02/11 PHP
Javascript Object.extend
2010/05/18 Javascript
js简单实现HTML标签Select联动带跳转
2013/10/23 Javascript
node.js中使用node-schedule实现定时任务实例
2014/06/03 Javascript
jQuery实现带动画效果的二级下拉导航方法
2015/03/11 Javascript
详解AngularJS中的filter过滤器用法
2016/01/04 Javascript
探索Vue.js component内容实现
2016/11/03 Javascript
js的OOP继承实现(必看篇)
2017/02/18 Javascript
JavaScript实现随机五位数验证码
2019/09/27 Javascript
深入了解Vue3模板编译原理
2020/11/19 Vue.js
Nest.js 授权验证的方法示例
2021/02/22 Javascript
使用Python写个小监控
2016/01/27 Python
python-opencv颜色提取分割方法
2018/12/08 Python
Python 如何优雅的将数字转化为时间格式的方法
2019/09/26 Python
Python操作redis和mongoDB的方法
2019/12/19 Python
浅析python连接数据库的重要事项
2021/02/22 Python
Python3压缩和解压缩实现代码
2021/03/01 Python
用CSS3写的模仿iPhone中的返回按钮
2015/04/04 HTML / CSS
CSS3中animation实现流光按钮效果
2020/12/21 HTML / CSS
泰国折扣酒店预订:Hotels2Thailand
2018/03/20 全球购物
Java中各种基本数据类型的默认值都是什么
2016/12/22 面试题
学习雷锋月活动总结
2014/07/03 职场文书
校庆团日活动总结
2014/08/28 职场文书
邓小平理论心得体会
2014/09/09 职场文书
党的群众路线教育实践活动个人整改落实情况汇报
2014/10/28 职场文书
初中作文评语集锦
2014/12/25 职场文书
毕业典礼主持词
2015/06/29 职场文书
nginx基于域名,端口,不同IP的虚拟主机设置的实现
2021/03/31 Servers
SpringCloud Alibaba项目实战之nacos-server服务搭建过程
2021/06/21 Java/Android
C3 线性化算法与 MRO之Python中的多继承
2021/10/05 Python