当前位置: 首页 > 编程日记 > 正文

ES5和ES6数组遍历方法详解

ES5和ES6数组遍历方法详解

在ES5中常用的10种数组遍历方法:

1、原始的for循环语句
2、Array.prototype.forEach数组对象内置方法
3、Array.prototype.map数组对象内置方法
4、Array.prototype.filter数组对象内置方法
5、Array.prototype.reduce数组对象内置方法
6、Array.prototype.some数组对象内置方法
7、Array.prototype.every数组对象内置方法
8、Array.prototype.indexOf数组对象内置方法
9、Array.prototype.lastIndexOf数组对象内置方法
10、for...in循环语句

ES6中新增加了一种:

1.for...of循环语句

ES5三种数组循环示例如下:

原始for循环语句

Example1

var a = [1,2,3];
for(var i=0;i<a.length;i++){console.log(a[i]);  //结果依次为1,2,3
}

代码解读:原始for循环的优点在于大家都比较熟悉,容易理解,劣势是写起来比较繁琐,需要定义额外更多的变量,所以一下是针对于原始for循环的改良的两种写法:
Example1:写法改良版

var a = [1,2,3];
for(var i=a.length;i--;){console.log(a[i]);  //结果依次为3,2,1
}

Example2:性能改良版

var a = [1,2,3];
for(var i = 0,len=a.length; i < len; i++) {console.log(a[i]);  //结果依次为1,2,3
}

注意:以上代码可以写成这样呢,如果懵逼了的话接着看原始for循环的解读,我们都知道for循环包含三个语句块——>for(语句1;语句2;语句3){被执行的代码},其中,语句1一般为变量定义语句(不仅可以只定义一个变量哦),在循环开始前执行,而且只执行一次语句2定义循环的是否继续执行的条件,同样也是在循环开始前执行,语句1之后执行,每次重新开始循环都会再次执行语句3则在循环结束之后执行,并且每次结束的时候都会再次执行,这里要注意的是如果被执行的代码中途return出来了那是不会再执行一次语句3的,所以以上代码解释如下:因为i--这个语句在每次循环开始前都会再次先用 i 是true和false来判断是否继续执行,这里同样要注意的是由于i----i的区别,这里由于是i--所以会先判断i的值再去做‘减减’的操作,所以这里最后如果打印 i 的值,会发现其实是-1

数组内置方法Array.prototype.forEach

Example

var a = [1,2,3];
a.forEach(function(value,key,arr){console.log(value)    // 结果依次为1,2,3console.log(key)      // 结尾依次为0,1,2console.log(arr)      // 三次结果都为[1,2,3],该参数貌似没什么用
})

代码解读:forEach方法最大的好处就是便于使用,而且不用定义额外的参数变量,但是从效率以及性能角度来说它是劣于原始for循环的,而且也不能强制return结束循环,原因如下:

**forEach循环**一看就是通过**回调函数**来提供参数的,而回调函数在JS中是**闭包**的一种,闭包的作用是用来生成**私有作用域**的,所以,每一个回调函数都是一个**独立的作用域**,都拥有自己独立的存储空间,互不影响,而且内部变量还不及时释放,这也就是为什么在能不用闭包的情况下就不要用闭包的原因,而在闭包中return的话,也只是在当前回调函数中返回了,可是forEach中的其他的回调函数(闭包)仍然存在,所以,导致return是没办法结束循环的。下面写一个forEach循环实现例子供大家参考理解:

Example

Array.prototype.forEachCopy = function(callback){var arr =  this;for(var i=0;i<arr.length;i++){callback(arr[i],i,this);}
}
var a = [1,2,3];
a.forEachCopy(function(value,key,arr){console.log(value)    // 结果依次为1,2,3console.log(key)      // 结尾依次为0,1,2console.log(arr)      // 三次结果都为[1,2,3]
})

数组内置方法Array.prototype.map

Example

var a = [1,2,3];
var b = a.map(function(value,key,arr){console.log(value)    // 结果依次为1,2,3console.log(key)      // 结尾依次为0,1,2console.log(arr)      // 三次结果都为[1,2,3]return value+1;
})
console.log(a); // 结果为[ 1, 2, 3 ]
console.log(b); // 结果为[ 2, 3, 4 ]

代码解读:map和forEach不同,在forEach中return语句是没有任何效果的,而map则可以改变当前循环的值,并且最终会返回一个新的被改变过值之后的数组(map如果不用return就和forEach一样了),由于这个特性,map一般用来处理需要修改某一个数组的值。map和forEach在其他的方面都是一样的,也不能return结束循环等特性,下面写一个map循环实现的例子供大家参考理解:
Example

Array.prototype.mapCopy = function(callback){var arr =  this;var arrCopy = [];for(var i=0;i<arr.length;i++){var cbValue = callback(arr[i],i,this);arrCopy.push(cbValue);}return arrCopy;
}
var a = [1,2,3];
var b = a.mapCopy(function(value,key,arr){console.log(value)    // 结果依次为1,2,3console.log(key)      // 结尾依次为0,1,2console.log(arr)      // 三次结果都为[1,2,3]return value+1;
})
console.log(a); // 结果为[ 1, 2, 3 ]
console.log(b); // 结果为[ 2, 3, 4 ]

数组内置方法Array.prototype.filter

Example

var a = [1,2,3];
var b = a.filter(function(value,key,arr){console.log(value)    // 结果依次为1,2,3console.log(key)      // 结尾依次为0,1,2console.log(arr)      // 三次结果都为[1,2,3]if(value === 3){return false;}return true;
})
console.log(a); // 结果为[ 1, 2, 3 ]
console.log(b); // 结果为[ 1,2 ]

代码解读:filter和map不同,map目的是为了改变值,而filter目的是为了去掉不要的值,在循环的时候如果返回的是false那么就表示本次循环的不添加该值,返回true则相反是表示要添加到新建的数组中,下面写一个filter循环实现例子供大家参考:
Example

Array.prototype.filterCopy = function(callback){var arr =  this;var arrCopy = [];for(var i=0;i<arr.length;i++){var cbValue = callback(arr[i],i,this);if(cbValue){arrCopy.push(arr[i]);}}return arrCopy;
}
var a = [1,2,3];
var b = a.filterCopy(function(value,key,arr){console.log(value)    // 结果依次为1,2,3console.log(key)      // 结尾依次为0,1,2console.log(arr)      // 三次结果都为[1,2,3]if(value === 3){return false;}return true;
})
console.log(a); // 结果为[ 1, 2, 3 ]
console.log(b); // 结果为[ 1,2 ]

数组内置方法Array.prototype.reduce

Example

var a = [1,2,3];
var b = a.reduce(function (count, value,key,arry) {console.log(count);   // 结果依次为0,1,3console.log(value);   // 结果依次为1,2,3console.log(key);     // 结果依次为0,1,2console.log(arry)     // 三次结果都为[1,2,3]return count + value;
},0);
console.log(a);         // 结果为[ 1, 2, 3 ]
console.log(b)          // 结果为6

代码解读:reduce的不同之处在于累加,和其他几个内置方法不同的地方,它的第二个参数不是this对象,而是初始累加值(如果不设置的话数组会乱掉),而且回调函数的的个数也不同,比其他的多了一个,而且还在在开始的多加了一个参数,第一个参数记录的是上一次循环的累加值,下面写一个reduce循环实现例子供大家参考:
Example

Array.prototype.reduceCopy = function(callback,countInit){var arr =  this;for(var i=0;i<arr.length;i++){var cbValue = callback(countInit,arr[i],i,this);countInit = cbValue;}return countInit;
}
var a = [1,2,3];
var b = a.reduceCopy(function (count, value,key,arry) {console.log(count);   // 结果依次为0,1,3console.log(value);   // 结果依次为1,2,3console.log(key);     // 结果依次为0,1,2console.log(arry)     // 三次结果都为[1,2,3]return count + value;
},0);
console.log(a);         // 结果为[ 1, 2, 3 ]
console.log(b)          // 结果为6

数组内置方法Array.prototype.some

Example

var a = [1,2,3];
var b = a.some(function(value,key,arry){console.log(value);   // 结果依次为1,2console.log(key);     // 结果依次为0,1console.log(arry);    // 两次次结果都为[1,2,3]return value===2;
})
console.log(a);         // 结果为[ 1, 2, 3 ]
console.log(b);         // 结果为true

代码解读:some的不同之处在它返回的布尔值,它的作用有点像filter,不过它的目的不是为了筛选返回数组,而是为了筛选该数组是否有满足你要的值,而且找到符合条件的值返回了一次true之后就不会再继续执行了,下面写一个some循环实现例子供大家参考:

Example

Array.prototype.someCopy = function(callback,countInit){var arr =  this;var isBool = false;for(var i=0;i<arr.length;i++){var cbValue = callback(arr[i],i,this);if(cbValue){isBool = true;return isBool}}return isBool;
}
var a = [1,2,3];
var b = a.someCopy(function(value,key,arry){console.log(value);   // 结果依次为1,2console.log(key);     // 结果依次为0,1console.log(arry);    // 两次次结果都为[1,2,3]return value===2;
})
console.log(a);         // 结果为[ 1, 2, 3 ]
console.log(b);         // 结果为true

数组内置方法Array.prototype.every

Example

var a = [1,2,3];
var b = a.every(function(value,key,arry){console.log(value);   // 结果依次为1,2console.log(key);     // 结果依次为0,1console.log(arry);    // 两次次结果都为[1,2,3]return value===2;
})
console.log(a);         // 结果为[ 1, 2, 3 ]
console.log(b);         // 结果为false

代码解读:其实从看例子可以看出来,some和every作用是一样的,只不过some当找到之后返回的是true,而every找到之后返回的是false而已,下面写一个every循环实现例子供大家参考:

Example

Array.prototype.everyCopy = function(callback){var arr =  this;var isBool = true;for(var i=0;i<arr.length;i++){var cbValue = callback(arr[i],i,this);if(cbValue){isBool = false;return isBool}}return isBool;
}
var a = [1,2,3];
var b = a.everyCopy(function(value,key,arry){console.log(value);   // 结果依次为1,2console.log(key);     // 结果依次为0,1console.log(arry);    // 两次次结果都为[1,2,3]return value===2;
})
console.log(a);         // 结果为[ 1, 2, 3 ]
console.log(b);         // 结果为false

数组内置方法Array.prototype.indexOf

Example

var a = [1,2,3];
var b = a.indexOf(2);
console.log(a);         // 结果为[ 1, 2, 3 ]
console.log(b);         // 结果为1

代码解读:对于indexOf方法来说,在数组循环过程中会和传入的参数比对,如果是比对成功,那么终止循环,返回对比成功的下标,下面写一个indexOf循环实现例子供大家参考:

Example

Array.prototype.indexOfCopy = function(value){var arr =  this;var index = -1;for(var i=0;i<arr.length;i++){if(arr[i] === value){index = i;return index}}return index;
}
var a = [1,2,3];
var b = a.indexOfCopy(2);
console.log(a);         // 结果为[ 1, 2, 3 ]
console.log(b);         // 结果为1

数组内置方法Array.prototype.lastIndexOf

Example

var a = [1,2,3,1];
var b = a.lastIndexOf(1);
console.log(a);         // 结果为[ 1, 2, 3, 1 ]
console.log(b);         // 结果为1

代码解读:lastIndexOf方法和indexOf作用一致,但查找方向不同,indexOf是正向查找,lastIndexOf是你像查找,找到之后返回成功的下标,下面写一个lastIndexOf循环实现例子供大家参考:

Example

Array.prototype.lastIndexOf = function(value){var arr =  this;var index = -1;for(var i=arr.length;i--;){if(arr[i] === value){index = i;return index}}return index;
}
var a = [1,2,3,1];
var b = a.lastIndexOf(1);
console.log(a);         // 结果为[ 1, 2, 3 , 1 ]
console.log(b);         // 结果为3
小结:对于以上8个数组的内置方法,forEach方法仅仅只是为了循环,并不可以帮你做额外的事情;map方法相当于在循环的时候你告诉数组当前遍历的这个值需要改成什么样,那么它就会最后给什么样的数组;filter方法相当于在循环的时候数组遍历一个个对象,并问你这个是不是你要找的值,如果你说是,他就会给你返回一个到新的数组中,不是他就会剔除;reduce方法相当于循环遍历对象做统计(累加或者累减之类的);some和every方法相当于在遍历的时候拿着一个个对象问你这个是不是你找的,只要你说了一遍是,那么他就会给你分别返回的是true和false;indexOf和lastIndexOf方法相当于你告诉它你要找什么值,找到之后立马返回给你它的门牌号。

循环语句for...in

Example

var a = [1,2,3];
for(var key in a){console.log(key); //结果为依次为0,1,2
}
var b = {0:1,1:2,2:3};
for(var key in b){console.log(key); //结果为依次为0,1,2
}

代码解读:从结果得知,for...in遍历数组的时候是遍历数组的下标值,而在遍历对象的时候遍历的是key值,所以猜想,数组在JS中,本质上也是一个以键值对形式存在的对象,而为了证明这点,我们做如下一个例子的实验:

var a = [];
a['b'] = 2;
console.log(a);     //结果为[ b: 2 ]
console.log(a[0]);  //结果为undefined

我们发现数组的下标不在对应相应位置的值了,由此可以证明在JS中数组其实本质上就是一个以下标为key值的对象。
当然对于for...in循环语句本身而言,它是一个浅度遍历对象的循环语句,值遍历第一层节点(当然对象中设置不可枚举的属性的除外)。
Example

var a = {b:{c:2},d:{c:4}};
for(var key in a){console.log(key); //结果为依次为b,d
}

ES6循环for...of语句

Example

var a = [1,2,3];
for(var value of a){console.log(value)  // 结果依次为1,2,3
}

代码解读:for...of语句看着有点像for...in语句,但是和for...in语句不同的是它不可以循环对象,只能循环数组。

相关文章:

短信猫GSM Modem

短信猫是用来收发短信的设备&#xff0c;和手机一样 插入SIM卡&#xff0c;通过&#xff08;USB或串口&#xff09;数据线/PCI插槽接到电脑上 在电脑上通过相关软件就可以实现短信收发的功能相关软件也就是收发短信的短信应用软件 可以自己开发&#xff0c;也可以要求短信猫设备…

数量级提升!深度学习让机器人抓取更高效

作者 | Jeffrey Ichnowski等译者 | 凌霄出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;摘要电子商务仓库中的拣选机器人需要快速计算各种配置之间有效且平稳的机器人手臂运动。最近的研究中是将抓取力分析与手臂运动规划结合&#xff0c;以计算最佳的手臂平滑运动&a…

phpcms_v9修改文章会提示 [hash]数据验证失败

收藏备用&#xff1a;phpcms\modules\content\templates\content_edit.tpl.phpaction"?mcontent&ccontent&aedit改成action"?mcontent&ccontent&aedit&pc_hash<?php echo $_SESSION[pc_hash];?>"转载于:https://blog.51cto.com/w…

横向ListView(一) ——开篇,基础逻辑实现

2019独角兽企业重金招聘Python工程师标准>>> 第一次写博文&#xff0c;写得不好的地方还望各位看客见谅 为了学习自定义软件开发&#xff0c;且定制出满足自己需求的控件&#xff08;不需要将就地使用第三方源码&#xff09;&#xff0c;本人花了一周的时间开发了个…

HTTP Response中的Chunked编码

进行Chunked编码传输的HTTP Response会在消息头部设置&#xff1a; Transfer-Encoding: chunked 表示Content Body将用Chunked编码传输内容。 Chunked编码使用若干个Chunk串连而成&#xff0c;由一个标明长度为0的chunk标示结束。每个Chunk分为头部和正文两部分&#xff0c;头部…

ORACLE RAC 更改instance name完整步骤

下面是更改的部分步骤&#xff0c;但是启动问题还是存在&#xff0c;求达人完整。单实例的数据库修改SID比较简单&#xff0c;只需要修改pfile相关参数&#xff0c;就可以挂载数据库。 RAC环境其实一样&#xff0c;只不过除了修改pfile&#xff0c;还需要修改 OCR信息。首先来看…

炸裂!微软重磅推出混合现实平台 Mesh、基于 Excel 的低代码语言 Power Fx,Ignite 2021 太精彩!...

作者 | 伍杏玲出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;“一开始&#xff0c;这就是混合现实的梦想。” 在微软 Ignite 2021 大会上&#xff0c;微软 HoloLens 之父 Alex Kipman 头戴 HoloLens 2&#xff0c;出现在科技感十足的海底世界虚拟舞台上&#xff0…

Apache Spark 2.2.0 中文文档 翻译活动

为什么80%的码农都做不了架构师&#xff1f;>>> Spark 2.2.0 已然发布&#xff08;2017-07-11 发布&#xff09; 5 天了&#xff0c;更新了一些新套路吧&#xff01; 此版本从 Structured Streaming&#xff08;结构化流&#xff09;中删除 experimental&#xff0…

Unity3D常用代码总结

1 GUI汇总 function OnGUI() { GUI.Label(Rect(1,1,100,20),"Im a Label"); //1 GUI.Box(Rect(1,21,100,20),"Im a Box"); //2 GUI.Button(Rect(1,41,100,20),"Im a Button"); //3 GUI.RepeatButton(Rect(1,61,120,20),"Im a RepeatButton&…

Python 搭建车道智能检测系统

作者 | 李秋键责编 | 寇雪芹出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;引言&#xff1a;本文将利用opencv实现对复杂场景下车道线的实时检测&#xff1b;所使用的图像处理方法主要是在读取图片的基础上&#xff0c;进行多种边缘检测&#xff0c;然后对不同的检测…

ASP.NET弹出窗口技术之增加网站流量方法

作为Microsoft的最新建立动态Web网站的工具,ASP.NET相对于ASP和JSP在改变原始的Web编程方式方面有了长足的长进。它的代码与页面分离技术(CodeBehind)以及完善的Web服务器控件为程序员提供了一个更加符合传统编程的Web服务器端开发方式。但Web编程还是有着与传统编程不相同的特…

检查是否支持 SO_REUSEPORT

为什么80%的码农都做不了架构师&#xff1f;>>> int reuse_port(int sockfd) {#ifndef SO_REUSEPORT#define SO_REUSEPORT (15)#endifconst int on 1;return setsockopt(sockfd, SOL_SOCKET, SO_REUSEPORT, &on, sizeof(on)); } 转载于:https://my.oschina.n…

nginx的tmp文件过大导致磁盘空间不足一例

个人微博&#xff1a;http://weibo.com/h2fly欢迎技术交流现象&#xff1a;8月23之后&#xff0c;时不时收到服务器的/usrused > 90%的报警排查:1、du发现磁盘/usr使用不大&#xff0c;而报警使用的df》明显是有文件删除了空间没释放。注&#xff1a;du和df的实现机制不同&a…

10年Java老兵宝藏资料,吐血奉献!

2021都说工作不好找&#xff0c;也对开发人员的要求变高。前段时间自己有整理了一些Java后端开发面试常问的高频考点问题做成一份PDF文档&#xff08;1000道高频题&#xff09;&#xff0c;同时也整理一些图文解析及笔记&#xff0c;今天在这免费分享给大家&#xff0c;希望大家…

IOCP , kqueue , epoll ... 有多重要?

原文地址&#xff1a;http://blog.codingnow.com/2006/04/iocp_kqueue_epoll.html设计 mmo 服务器&#xff0c;我听过许多老生常谈&#xff0c;说起处理大量连接时&#xff0c; select 是多么低效。我们应该换用 iocp (windows), kqueue(freebsd), 或是 epoll(linux) 。的确&am…

[故障解决]图文:python启动报错:api-ms-win-crt-runtime-l1-1-0.dll丢失解决

python启动报错&#xff1a;api-ms-win-crt-runtime-l1-1-0.dll丢失解决 环境 Windows 7 SP1 x64python3.6.1报错 解决办法 1.下载VC redist&#xff08;安装时读条卡在&#xff1a;正在处理:Windows7_MSU_x64&#xff09;2.到C:\ProgramData\Package Cache\里面搜索&#xff0…

ASP.NET设计应用程序的七大绝招

随着微软.NET的流行&#xff0c;ASP.NET越来越为广大开发人员所接受。作为ASP.NET的开发人员&#xff0c;我们不仅需要掌握其基本的原理&#xff0c;更要多多实践&#xff0c;从实践中获取真正的开发本领。在我们的实际开发中&#xff0c;往往基本的原理满足不了开发需求&#…

Chromium之各国语言切换

在\src\build\Debug\locales\目录下存放着各国语言所需要的资源文件xx.pak,我这边共有53中语言支持。 命令行进入src\build\Debug目录,敲:chrome.exe --langzh-CN就能用中文简体,zh-CN可以根据需要换成各种语言版本。 Chrome的整个solution中&#xff0c;每种语言都会有个相应的…

程序员每天工作摸鱼俩小时,月薪35K?

职场上有很多奇奇怪怪的事。比如说有人爆肝996&#xff0c;工资却还养不活自己。有人每天工作摸鱼&#xff0c;但是却月薪数万。前端时间&#xff0c;小编在某职场社交平台上看到这么一则帖子#程序员摸鱼2小时月入35k#仔细看下&#xff0c;该员工每天的工作日常就是摸鱼的间隙工…

JAVA的get post 区别

1. get 是从服务器上获取数据&#xff0c;post 是向服务器传送数据。 get 请求返回 request - URI 所指出的任意信息。Post 请求用来发送电子邮件、新闻或发送能由交互用户填写的表格。这是唯一需要在请求中发送body的请求。使用Post请求时需要在报文首部 Content - Length 字段…

多些时间能少写些代码(转自酷壳 – CoolShell.cn)

我在我的微博上说过这样一段话&#xff0c;我想在这里把我的这个观点阐述地更完整一些。左耳朵耗子&#xff1a;聪明的程序员使用50%-70%的时间用来思考&#xff0c;尝试和权衡各种设计和实现&#xff0c;而用30% – 50%的时间是在忙碌着编码&#xff0c;调试和测试。聪明的老板…

HTTP协议之Chunked解析

在网上找了好一会&#xff0c;始终没发现有解析Chunked编码的文章&#xff0c;那就自己写一个吧&#xff0c;呵呵。网上使用Chunked编码的网站似乎并不是很多&#xff0c;除了那些使用GZip压缩的网站&#xff0c;例&#xff1a;google.com&#xff0c;还有就是大部分打开GZip压…

关于深度学习编译器,这些知识你需要知道

作者 | 小O妹出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;神经网络编译器概览近年来&#xff0c;以机器学习、深度学习为核心的AI技术得到迅猛发展&#xff0c;深度神经网络在各行各业得到广泛应用&#xff1a; 1. CV&#xff08;计算机视觉&#xff09;&#xf…

checkbox点击切换选中状态

2019独角兽企业重金招聘Python工程师标准>>> function cboxChecked(ele) {$(ele).click(function () {var isChecked $(ele).attr(checked);if (!isChecked) {$(ele).attr(checked, true)} else {$(ele).attr(checked, false)}})} 转载于:https://my.oschina.net/u…

提升Hadoop计算能力的并行框架

集算器是新型并行计算框架&#xff0c;它支持读写HDFS中的文件&#xff0c;可以通过并行框架将计算任务分担到多个节点中。它专注于加强Hadoop的计算能力&#xff0c;从而实现计算性能和开发效率更高的大数据应用。更强的计算能力。Hadoop所使用的计算语言为JAVA&#xff0c;JA…

在ASP.NET 2.0中建立站点导航层次

站点导航提供程序--ASP.NET 2.0中的站点导航提供程序暴露了应用程序中的页面的导航信息&#xff0c;它允许你单独地定义站点的结构&#xff0c;而不用考虑页面的实际物理布局。默认的站点导航提供程序是基于XML的&#xff0c;但是你也可以通过编写自定义的提供程序&#xff0c;…

加速数据中心变革,Xilinx推出软件定义、硬件加速型 Alveo SmartNIC

近日&#xff0c;为满足现代数据中心发展需求&#xff0c;赛灵思公司宣布推出一系列全新数据中心产品及解决方案&#xff0c;包括全新 Alveo SmartNIC 系列、smart world &#xff08;智能世界&#xff09; AI 视频分析应用、一款能够实现亚微秒级交易的加速算法交易参考设计&a…

跟阿里云技术专家阙寒一起深度了解视频直播CDN技术

网络直播平台现下已经十分火热&#xff0c;很多常见的直播平台都采用了阿里云直播CDN来搭建自身业务。今天&#xff0c;我们请来了阿里云CDN团队技术专家阙寒&#xff0c;来介绍下视频的一些基础知识和视频直播的架构。在进入正题之前&#xff0c;我们先来了解视频直播相关的名…

一个ASP.NET中使用的MessageBox类

/// <summary>/// 自定义信息对话框/// </summary>public class MessageBox{/// <summary>/// 定义一个web页面&#xff0c;用来显示用户自定错误提示信息/// </summary>System.Web.UI.Page p;/// <summary>/// 实例时&#xff0c;参数为:this 如…

Ubuntu 13.10 安装Terminalx 后更改默认终端设置

1、安装 terminalx&#xff0c; sudo apt-get install terminator 2、Ctrl Alt t 试一下打开什么终端&#xff0c;我的默认启动的是Terminator;如果想换换默认的终端&#xff0c;还需以下一步 3、接下来&#xff0c;安装dconf-tools&#xff0c;这个是设置默认终端的必须 打开…