Array.prototype.toString方法重写
来源:互联网 发布:鲜活的数据 英文 编辑:程序博客网 时间:2024/06/05 23:04
我们在写JavaScript时,如果要调试某个数组对象,会借助数组的toString方法。
这种写法,对于一维数组来说,很方便。
但如果对象是二维或多维数组,就显得不那么直观了。
下面有个二维数组的例子,我们来看看会是什么样的结果。
var matrix = [ [1,2,3], [4,5,6], [7,8,9]];//1,2,3,4,5,6,7,8,9console.log(matrix.toString());在这个结果,你甚至无法区分到底是几维数组以及数组元素的包含关系。
这显然是很不利于调试的。
我们可以对数组的toString方法进行一个小小的改进,让它能够体现包含及层次关系。
Array.prototype.toString = function(){var result = "[";for(var i=0;i<this.length;i++){var e = this[i];result += e.toString();if(i < this.length - 1){result += ",";}}result += "]";return result;};//[[1,2,3],[4,5,6],[7,8,9]]console.log(matrix.toString());可以看到,在方法重写后,打印出了清晰直观的结果。
甚至连多维数组也能准确无误地表示。
var array3D = [ [ [ 1, 2, 3 ] ], [ [ 4, 5, 6 ] ], [ [ 7, 8, 9 ] ] ];//[[[1,2,3]],[[4,5,6]],[[7,8,9]]]console.log(array3D.toString());
--------------------------------修改的分割线------------------------------------
昨天有专家指出,我上面这个实现不够健壮。
我本意是想写一个方便自己调试JS的程序,所以没有详细地考虑。
如果有环引用(自己引用自己的情况),原先的代码会死循环。
那么如何避免呢?
我的解决方案是:利用一个列表,记录已访问过的对象,已访问过了的话,就返回空字符串,避免死循环。
如下所示:
//存放已访问的对象var hasVisited = [];Array.prototype.toString = function(){//如果没有访问过if(hasVisited.indexOf(this) < 0){hasVisited.push(this);var result = "["; for(var i=0;i<this.length;i++){ var e = this[i];result += e.toString(); if(i < this.length - 1){ result += ","; } } result += "]"; return result;}return "";}; var a = [1,2,3];a.push(a);a.push([a]);//[1,2,3,,[]]console.log(a.toString());hasVisited = [];//[[1],[2]]console.log([[1],[2]].toString());
如果还有不足之处,欢迎大家指点!^_^
0 0
- Array.prototype.toString方法重写
- Array.prototype.splice方法重写
- JS中Array方法中常用方法九:Array.prototype.toString()
- 重写toString()方法
- 重写toString方法
- 重写toString方法
- 重写toString()方法
- 重写 toString 方法
- (49)重写toString()方法
- 重写toString方法
- 关于重写toString方法
- 重写对象toString方法
- C# 重写 ToString 方法
- Java 重写tostring方法
- 重写toString方法
- 重写toString方法-日志
- 重写toString()方法
- Java重写toString方法
- Gstreamer整体分析2——Element状态转变所做的事
- Skip the Class
- Web调试利器fiddler介绍
- 330. Patching Array***
- 密度聚类算法(一)
- Array.prototype.toString方法重写
- stack
- 500. Keyboard Row
- ACM在线模版
- (转)Android WebView常见问题及解决方案汇总
- 进程,线程的地址空间问题
- cvc-complex-type.2.4.a: Invalid content was found starting with element
- poj2187(凸包)
- sql学习日志