1.shift(),把数组的第一个元素从其中删除,并返回第一个元素的值
2.replace( , ) 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
返回值: 一个新的字符串,是用 后者 替换了 前者 的第一次匹配或所有匹配之后得到的。
3.split() 方法用于把一个字符串分割成字符串数组 Array.join()与split方法相反
var lang = ["php","java","javascript"];
//删除
var removed = lang.splice(1,1);
alert(lang); //php,javascript
alert(removed); //java ,返回删除的项
//插入
var insert = lang.splice(0,0,"asp"); //从第0个位置开始插入
alert(insert); //返回空数组
alert(lang); //asp,php,javascript
//替换
var replace = lang.splice(1,1,"c#","ruby"); //删除一项,插入两项
alert(lang); //asp,c#,ruby
alert(replace); //php,返回删除的项
4.\n换行符,新行
\r相当于回车,跑到最前面
\t横向跳到下一制表符位置
5.childNodes[0]等价于firstChild,无论何时何地,重要需要访问childNodes[]数组的第一个元素,我们就可以把它写成firstChild,DOM还提供一个与之对应的lastChild属性。
需要注意的是,ff的空格节点问题,可以使用nodeType属性对节点类型判断,直到发现元素节点为止
6.ctrl+f 全局查找 F3是上一个 shift+F3是下一个
8.legend 元素为 fieldset 元素定义标题(caption)。所有浏览器都支持 <legend>,<fieldset> 标签。
Eg:
<form>
<fieldset>
<legend>健康信息</legend>
身高:<input type="text" />
体重:<input type="text" />
</fieldset>
</form>
9.String.fromCharCode(8593) (上箭头) 函数用于从一些Unicode字符值中返回一个字符串。8592,左箭头 8594右箭头 8595下箭头 (Unicode对照表)
该函数属于String对象,所有主流浏览器均支持该函数, 函数属于静态函数,而且只能够通过全局String对象进行调用,不能通过String对象的实例进行调用。
10.tagName 属性返回元素的标签名。 在 HTML 中,tagName 属性的返回值始终是大写的。
11.CSS滤镜(filter属性)
Alpha:设置透明层次.
blur:创建高速度移动效果,即模糊效果.
Chroma:制作专用颜色透明.
DropShadow:创建对象的固定影子.
FlipH:创建水平镜像图片.
FlipV:创建垂直镜像图片.
glow:加光辉在附近对象的边外.
gray:把图片灰度化.
invert:反色.
light:创建光源在对象上.
mask:创建透明掩膜在对象上.
shadow:创建偏移固定影子.
wave:波纹效果.
Xray:使对象变的像被x光照射一样.
12.selectedIndex 属性可设置或返回下拉列表中被选选项的索引号。
注意: 若允许多重选择,则仅会返回第一个被选选项的索引号。
var x=document.getElementById("mySelect").selectedIndex;
var y=document.getElementById("mySelect").options;
alert("索引: " + y[x].index + " is " + y[x].text);
13.js的exec():
exec() 方法用于检索字符串中的正则表达式的匹配。
RegExpObject.exec(string) 返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。
在调用非全局的 RegExp 对象的 exec() 方法时,返回的数组与调用方法 String.match() 返回的数组是相同的。
当 RegExpObject 是一个全局正则表达式时,exec() 的行为就稍微复杂一些。它会在 RegExpObject 的 lastIndex 属性指定的字符处开始检索字符串 string。当 exec() 找到了与表达式相匹配的文本时,在匹配后,它将把 RegExpObject 的 lastIndex 属性设置为匹配文本的最后一个字符的下一个位置。这就是说,您可以通过反复调用 exec() 方法来遍历字符串中的所有匹配文本。当 exec() 再也找不到匹配的文本时,它将返回 null,并把 lastIndex 属性重置为 0。
14.$.isArray(), 原生js: instanceof
15.js的substr(start,[length]) 一个参数,表示从下标处开始(包含下标)到末尾
两个参数,表示从下标开始(包含下标),然后截取几个
特殊说明:
如果start为负数,则start=str.length+start
如果length为 0 或负数,将返回一个空字符串
如果没有指定该参数,则子字符串将延续到最后
substring(start,end) [参数非负] :参数都是正数的话和substr一样
特殊说明:
substring 方法返回的子串包括 start 处的字符,但不包括 end 处的字符。
如果start 与end相等,那么该方法返回的就是一个空串(即长度为 0 的字符串)。
如果start比end大,那么该方法在提取子串之前会先交换这两个参数。
如果start或end为负数,那么它将被替换为 0。
16,正则中, (匹配前面的字符: ?表示0个或1个 +表示至少有一个 *0个或0个以上的匹配)
^开始 $结尾 .任意单个字符
17, 最简单的checkbox, radio跟文字在一行
<input type="radio" style="vertical-align:middle; margin-top:0;">不需要
18,min-heigh属性'
19. 文本超出不换行:
text-overflow {
display:block;/*内联对象需加 */
width:31em;/* 何问起 hovertree.com */
word-break:keep-all;/* 不换行 */
white-space:nowrap;/* 不换行 */
overflow:hidden;/* 内容超出宽度时隐藏超出部分的内容 */
text-overflow:ellipsis;/* 当对象内文本溢出时显示省略标记(...) ;需与overflow:hidden;一起使用。*/
}
- 解决浏览器的缓存问题:
meta方法:
//不缓存
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
<META HTTP-EQUIV="expires" CONTENT="0">
清理form表单的临时缓存:
<body onLoad="javascript:document.yourFormName.reset()">
其实form表单的缓存对于我们书写还是有帮助的,一般情况不建议清理,但是有时候为了安全问题等,需要清理一下!
jquery ajax清除浏览器缓存
方式一:用ajax请求服务器最新文件,并加上请求头If-Modified-Since和Cache-Control,如下:
$.ajax({
url:'www.haorooms.com',
dataType:'json',
data:{},
beforeSend :function(xmlHttp){
xmlHttp.setRequestHeader("If-Modified-Since","0");
xmlHttp.setRequestHeader("Cache-Control","no-cache");
},
success:function(response){
//操作
}
async:false
});
方法二,直接用cache:false,
$.ajax({
url:'www.haorooms.com',
dataType:'json',
data:{},
cache:false,
ifModified :true ,
success:function(response){
//操作
}
async:false
});
方法三:用随机数,随机数也是避免缓存的一种很不错的方法!
URL 参数后加上 "?ran=" + Math.random(); //当然这里参数 ran可以任意取了
URL 参数后加上 "?ran=" + Math.random(); //当然这里参数 ran可以任意取了 eg: <script>
document.write("<s"+"cript type='text/javascript' src='/js/test.js?"+Math.random()+"'></scr"+"ipt>");
</script>
其他的类似,只需在地址后加上+Math.random() 注意:因为Math.random() 只能在Javascript 下起作用,故只能通过Javascript的调用才可以
方法四:用随机时间,和随机数一样。
在 URL 参数后加上 "?timestamp=" + new Date().getTime();
用php后端清理
在服务端加 header("Cache-Control: no-cache, must-revalidate");等等(如php中)
方法五,window.location.replace("WebForm1.aspx"); 参数就是你要覆盖的页面,replace的原理就是用当前页面替换掉replace参数指定的页面。 这样可以防止用户点击back键。使用的是javascript脚本,举例如下:
六:
<meta http-equiv="Pragma" content="No-cache" >
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Expires" content="0">
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
<META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT">
“style/js/util.js?version=201408”
19.Select下拉框的选择:
/*for(var i=0;i<sid.options.length;i++){
if(sid.options[i].selected){
if(sid.options[i].id == "LTE_LGW_MODE_L2"){
setVisibility(["LTE_LGW_TRANSFER_MODE_L2"],[0]);
}else{
setVisibility(["LTE_LGW_TRANSFER_MODE_L2"],[1]);
}
}
*/
如何引用js文件加随机数?(可解决缓存问题)
<script type="text/javascript">
document.write("<s" + "cript type='text/javascript' src='x.js?" + Math.random() + "'></s" + "cript>");
</script>
加随机数的原理:
浏览器为了提高用户访问同一页面的速度,会对页面数据进行缓存。当url请求地址不 变时,有时候会导致浏览器不发送请求,直接从缓存中读取之前的数据。如果数据改变了,而没加随机数,读取的数据会跟之前一样。加上随机数,就是欺骗浏览器url改变了,会每次都向服务器发送请求而不去读缓存
20.
Js设置cookie,获取cookie ,清除cookie
1.function setCookie(name, value, iDay){
/* iDay 表示过期时间
cookie中 = 号表示添加,不是赋值 */
var oDate=new Date();
oDate.setDate(oDate.getDate()+iDay);
document.cookie=name+'='+value+';expires='+oDate;
}
2.function getCookie(name){
/* 获取浏览器所有cookie将其拆分成数组 */
var arr=document.cookie.split('; ');
for(var i=0;i<arr.length;i++) {
/* 将cookie名称和值拆分进行判断 */
var arr2=arr[i].split('=');
if(arr2[0]==name){
return arr2[1];
}
}
return '';
}
3.function removeCookie(name){
/* -1 天后过期即删除 */
setCookie(name, 1, -1);
}
4:删除所有cookie
function clearCookie(){
var keys=document.cookie.match(/[^ =;]+(?=\=)/g);
if (keys) {
for (var i = keys.length; i--;)
document.cookie=keys[i]+'=0;expires=' + new Date( 0).toUTCString()
}
}
20.
console.time()和console.timeEnd(),用来显示代码的运行时间。
<script type="text/javascript">
console.time("控制台计时器一");
for(var i=0;i<1000;i++){
for(var j=0;j<1000;j++){}
}
console.timeEnd("控制台计时器一");
</script>
控制台计时器一:5.794ms
21.
一个访客,如果已经打开了这个网页,那么在新窗口中再打开这个网址就提示已经打开,或者直接跳到已经打开这个网址的窗口:
用cookie记录这个网页是否被打开了,同时设置浏览器关闭cookie失效,但是有几个问题解决不了:如果用两个浏览器,是可以同时打开这个网页的。因为cookie不能跨浏览器;
如 果不设置过期时间,则表示这个Cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,Cookie就消失了。这种生命期为浏览会话期的
Cookie 被称为会话Cookie。会话Cookie一般不保存在硬盘上而是保存在内存里。如果设置了过期时间,浏览器就会把Cookie保存到硬盘上,关闭后再次 打开浏览器,这些Cookie依然有效直到超过设定的过期时间。存储在硬盘上的Cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存 在内存的Cookie,不同的浏览器有不同的处理方式。
Session 是存放在服务器端的类似于HashTable结构(每一种web开
发技术的实现可能不一样,下文直接称之为HashTable)来存放用户数据,当浏览器 第一次发送请求时,服务器自动生成了一个HashTable和一个Session ID用来唯一标识这个HashTable,并将其通过响应发送到浏览器。当浏览器第二次发送请求,会将前一次服务器响应中的Session ID放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的所有Session ID进行对比,找到这个用户对应的HashTable.
一般情况下,服务器会在一定时间内(默认20分钟)保存这个 HashTable,过了时间限制,就会销毁这个HashTable。在销毁之前,程序员可以将用户的一些数据以Key和Value的形式暂时存放在这个 HashTable中。当然,也有使用数据库将这个HashTable序列化后保存起来的,这样的好处是没了时间的限制,坏处是随着时间的增加,这个数据 库会急速膨胀,特别是访问量增加的时候。一般还是采取前一种方式,以减轻服务器压力。
Session的客户端实现形式(即Session ID的保存方法):
一般浏览器提供了两种方式来保存,还有一种是程序员使用html隐藏域的方式自定义实现:
[1] 使用Cookie来保存,这是最常见的方法,本文“记住我的登录状态”功能的实现正式基于这种方式的。服务器通过设置Cookie的方式将Session ID发送到浏览器。如果我们不设置这个过期时间,那么这个Cookie将不存放在硬盘上,当浏览器关闭的时候,Cookie就消失了,这个Session ID就丢失了。如果我们设置这个时间为若干天之后,那么这个Cookie会保存在客户端硬盘中,即使浏览器关闭,这个值仍然存在,下次访问相应网站时,同 样会发送到服务器上。
[2] 使用URL附加信息的方式,也就是像我们经常看到JSP网站会有aaa.jsp?JSESSIONID=*一样的。这种方式和第一种方式里面不设置Cookie过期时间是一样的。
[3] 第三种方式是在页面表单里面增加隐藏域,这种方式实际上和第二种方式一样,只不过前者通过GET方式发送数据,后者使用POST方式发送数据。但是明显后者比较麻烦。
cookie与session的区别:
cookie数据保存在客户端,session数据保存在服务器端。
当你登录一个网站的时候,如果web服务器端使用的是session,那么所有的数据都保存在服务器上面,客户端每次请求服务器的时候
会发送 当前会话的sessionid,服务器根据当前sessionid判断相应的用户数据标志,以确定用户是否登录,或具有某种权限。由于数据是存储
在服务器 上面,所以你不能伪造,但是如果你能够获取某个登录用户的sessionid,用特殊的浏览器伪造该用户的请求也是能够成功的
如果浏览器使用的是 cookie,那么所有的数据都保存在浏览器端,比如你登录以后,服务器设置了 cookie用户名(username),那
么,当你再次请求服务器的时候,浏览器会将username一块发送给服务器,这些变量有一定的特殊标记。服 务器会解释为 cookie变量。所以只要不关闭浏览器,那么 cookie变量便一直是有效的,所以能够保证长时间不掉线。如果你能够截获某个用户的 cookie变量,然后伪造一个数据包发送过去,那么服务器还是认为你是合法的。所以,使用 cookie被攻击的可能性比较大。如果设置了的有效时间,那么它会将 cookie保存在客户端的硬盘上,下次再访问该网站的时候,浏览器先检查有没有 cookie,如果有的话,就读取该 cookie,然后发送给服务器.如果你在机器上面保存了某个论坛 cookie,有效期是一年,如果有人入侵你的机器,将你的 cookie拷走,然后放在他的浏览器的目录下面,那么他登录该网站的时候就是用你的的身份登录的。所以 cookie是可以伪造的。当然,伪造的时候需要主意,直接copy cookie文件到 cookie目录,浏览器是不认的,他有一个index.dat文件,存储了 cookie文件的建立时间,以及是否有修改,所以你必须先要有该网站的 cookie文件,并且要从保证时间上骗过浏览器,曾经在学校的vbb论坛上面做过试验,copy别人的 cookie登录,冒用了别人的名义发帖子,完全没有问题。
Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的SessionID,用该SessionID 为标识符来存取服务器端的Session存储空间。而SessionID这一数据则是保存到客户端,用Cookie保存的,用户提交页面时,会将这一 SessionID提交到服务器端,来存取Session数据。这一过程,是不用开发人员干预的。所以一旦客户端禁用Cookie,那么Session也会失效。
服务器也可以通过URL重写的方式来传递SessionID的值,因此不是完全依赖Cookie。如果客户端Cookie禁用,则服务器可以自动通过重写URL的方式来保存Session的值,并且这个过程对程序员透明。
可以试一下,即使不写Cookie,在使用request.getCookies();取出的Cookie数组的长度也是1,而这个Cookie的名字就是JSESSIONID,还有一个很长的二进制的字符串,是SessionID的值。
如何使用cookie检测初访者:
A.调用HttpServletRequest.getCookies()获取Cookie数组
B.在循环中检索指定名字的cookie是否存在以及对应的值是否正确
C.如果是则退出循环并设置区别标识
D.根据区别标识判断用户是否为初访者从而进行不同的操作( 正确的做法是判断cookie数组是否为空且是否存在指定的Cookie对象且值正确。)
关闭浏览器,只会是浏览器端内存里的session cookie消失,但不会使保存在服务器端的session对象消失,同样也不会使已经保存到硬盘上的持久化cookie消失。
打开两个浏览器窗口访问应用程序会使用同一个session还是不同的session???
通常session cookie是不能跨窗口使用的,当你新开了一个浏览器窗口进入相同页面时,系统会赋予你一个新的session id,这样我们信息共享的目的就达不到了。
此时我们可以先把session id保存在persistent cookie中(通过设置session的最大有效时间),然后在新窗口中读出来,就可以得到上一个窗口的session id了,这样通过session cookie和persistent cookie的结合我们就可以实现了跨窗口的会话跟踪。
JSP解决登录验证: 我发现我可以绕过登陆这一环节,直接在浏览器输入要访问的页面就能就去,这是个大问题啊,如果有人知道我的目录结构,可以畅通无阻啊,为此,得验证用户是否登录,如果登陆,正常,否则跳转到登陆页面。我使用了两种方法。
法一:写个文件验证,在需要验证的页面将此文件引入(我写的是testsession.jsp)
<%
if(session.getAttribute("user")==null)
{%>
<h1>未登录!</h1>
3秒后跳转到登录页面
<p>
如果没有跳转,请点<a href="login.jsp">这里</a></p>
<%
response.setHeader("refresh","3;URL=login.jsp");
return;
}
%>
比如说我的main.jsp页面需要验证,只需在此此页面顶端添加语句<%@ include file="testsession.jsp"%>
sessionStorage解决方案:只在当前窗口保存登录人的信息
window.sessionStorage.setItem("uname","admin");
if(!window.sessionStorage.getItem("uname")){
logOut();
}
sessionStorage.getItem(key):获取指定key本地存储的值
sessionStorage.setItem(key,value):将value存储到key字段
sessionStorage.removeItem(key):删除指定key本地存储的值
sessionStorage.length是sessionStorage的项目数
//sessionStorage.uname = "qq"; 重置
//sessionStorage.clear(); 删除
22.
用document.onreadystatechange的方法来监听状态改变,
然后用document.readyState == “complete”判断是否加载完成
代码如下:
document.onreadystatechange = subSomething;//当页面加载状态改变的时候执行这个方法.
function subSomething()
{
if(document.readyState == “complete”) //当页面加载状态
myform.submit(); //表单提交
}
测试并没有成功!
- h5的离线缓存
特点
离线浏览: 用户可以在离线状态下浏览网站内容。
更快的速度: 因为数据被存储在本地,所以速度会更快.
减轻服务器的负载: 浏览器只会下载在服务器上发生改变的资源。
如何使用
首先,我们建立一个html文件,类似这样:
<!DOCTYPE html>
<html lang="en" manifest="manifest.appcache">
<head>
<meta charset="UTF-8">
<title>APP CACHE</title>
<link rel="stylesheet" type="text/css" href="test.css">
</head><!-- text/cache-mainfest -->
<body>
<img src="img/1.jpg">
<img src="img/2.jpg">
<script type="text/javascript">
window.addEventListener('load', function(e){
console.log(window.applicationCache.status);
})
</script>
</body>
</html>
可能有些代码看不懂,我们先看最简单的,第一行配置了一个manifest=”manifest.appcache”(注意是mani不是main),这是使用app cache首先要配置的,然后我们在这个html文件里引入了两个img做为测试用,然后监听了load时间来查看看application的status,关于applicationCache的api,可以查看。
然后在相同目录下新建一个manifest.appcache文件,注意关于路径要和html页面配置时一致即可。
CACHE MANIFEST
#version 1.3
CACHE:
img/1.jpg
img/2.jpg
test.css
NETWORK:
*
关于manifest.appcache文件,基本格式为三段: CACHE, NETWORK,与 FALLBACK,其中NETWORK和FALLBACK为可选项,而第一行CACHE MANIFEST为固定格式,必须写在前面。
CACHE:(必须)
标识出哪些文件需要缓存,可以是相对路径也可以是绝对路径。例如:aa.css,http://www.baidu.com/aa.js.
NETWORK:(可选)
这一部分是要绕过缓存直接读取的文件,可以使用通配符*,,也就是说除了上面的cache文件,剩下的文件每次都要重新拉取。例如*,login.php。
FALLBACK:(可选)
指定了一个后备页面,当资源无法访问时,浏览器会使用该页面。该段落的每条记录都列出两个 URI—第一个表示资源,第二个表示后备页面。两个 URI 都必须使用相对路径并且与清单文件同源。可以使用通配符。例如*.html /offline.html。
Status有五种值;
更新缓存的方式
更新manifest文件
浏览器发现manifest文件本身发生变化,便会根据新的manifest文件去获取新的资源进行缓存。
当manifest文件列表并没有变化的时候,我们通常通过修改manifest注释的方式来改变文件,从而实现更新。
通过javascript操作
浏览器提供了applicationCache供js访问,通过对于applicationCache对象的操作也能达到更新缓存的目的。
清除浏览器缓存
对于第一种,我们修改一下manifest文件,把version改为1.4,然后刷新页面。
我们可以发现,appcache更新了缓存重新从网络上拉去的cache的文件,但是,我们如果想要看到改变,必须再次刷新页面。
对于第二种方法,我们首先修改一下我们的js,添加一个监听事件:
var appCache = window.applicationCache;
appCache.update(); //尝试更新缓存
...........
window.applicationCache.addEventListener('updateready', function(){
console.log('updateready!');
window.applicationCache.swapCache();//更新成功后,切换到新的缓存
});
其中swapCache方法的意思是重新应用跟新后的缓存来替换原来的缓存!
注意:像这样使用 update()和swapCache()并不会将更新后的资源 呈现给用户。这仅仅是让浏览器检查manifest文件是否发生了更新,然后下载指定的更新内容,重新填充app cache。因此,要让用户看到更新后的内容,需要两次页面下载,一次是更新app cache,一次是更新页面内容。
好消息是,你可以避免两次页面下载带来的麻烦。为了让用户能看到你的站点的最新版本,设置一个监听器来监听页面加载时的updateready 事件。
window.addEventListener(‘load’, function(e) {
window.applicationCache.addEventListener(‘updateready’, function(e) {
if (window.applicationCache.status == window.applicationCache.UPDATEREADY) {
// Browser downloaded a new app cache.
// Swap it in and reload the page to get the new hotness.
window.applicationCache.swapCache();
if (confirm(‘A new version of this site is available. Load it?’)) {
window.location.reload();
}
} else {
// Manifest didn’t changed. Nothing new to server.
}
}, false);
}, false);
如果manifest文件或者该文件中指定的某个资源下载失败,那么整个更新都会失败。在这种情况下,浏览器会继续试用老的application cache。
实时监测网络的连接:
window.addEventListener("offline",function(e){
console.log("offline")
alert("断网了,请联网后刷新重试!")
})
window.addEventListener("online",function(e){
console.log("online")
})
24.window.onload=function(){} 若function是匿名的 ,则只执行后者,不是匿名的话都执行,前者先于后者;
window.onload用法
网页中的javaScript脚本代码往往需要在html文档加载完成后才能够去执行,否则可能导致无法获取对象的情况,为了避免这种情况的发生,可以使用以下两种方式:
将脚本代码放在网页的底端即在</body>之前,这样在运行脚本代码的时候,可以确保DOM已经加载完成。
在window.onload方法中执行操作相应的脚本
可以用下面这种方式将一个方法传给window.onload:
window.onload = fun1;
function fun1(){
alert("fun1");
}
用户多次登录失败告警,方案:利用h5的localstorage(永久存储在浏览器上,除非手动删除)
存入数据的时候转为对象:JSON.stringify(dates)
取出数据的时候转为字符串可用:JSON.parse(window.localStorage.getItem("times"))
26.面向对象和面向过程
C是面向过程
C++、 JAVA是面向对象
面向对象和面向过程的区别
面向对象简单,面向过程对人员要求素质过高
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
面向过程和面向对象的区别并不像人们想象得那么大,面向对象的大部分思想在面向过程中也能体现,但面向过程最大的问题(也许是唯一先天的缺陷)在于随着系统的膨胀,面向过程将无法应付,最终导致系统的崩溃,面向对象的提出正是试图解决这一软件危机
目前看来,似乎有一定成效,但仍任重道远
27.
进程和线程:
进程就好比工厂的车间,它代表CPU所能处理的单个任务。任一时刻,CPU总是运行一个进程,其他进程处于非运行状态。一个车间里,可以有很多工人。他们协同完成一个任务。
线程就好比车间里的工人。一个进程可以包括多个线程。
一个进程的内存空间是共享的,每个线程都可以使用这些共享内存。线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块内存
28.
表格边框的显示与隐藏,是可以用frame参数来控制的。请注意它只控制表格的边框图,而不影晌单元格。
只显示上边框 <table frame=above>
只显示下边框 <table frame=below>
只显示左、右边框 <table frame=vsides>
只显示上、下边框 <table frame=hsides>
只显示左边框 <table frame=lhs>
只显示右边框 <table frame=rhs>
不显示任何边框 <table frame=void>
29,select下拉框选取重复值时,onchange事件没有作用:
<select id="sel">
<option value="1" >1</option>
<option value="2" >2</option>
<option value="3" >3</option>
</select>
$("#sel").change(function(){
//doSomething such as alert(1)
alert("选中了");
$(this).blur();
$("#sel option:last").remove()
}).focus(function(){
$(this)[0].selectedIndex = -1;
$(this).append("<option value=请选择selected style='display:none'>请选择--</option>")
});
30.
/*
for(var rindex=1;rindex<UETable.rows.length;rindex++){
// console.log(UETable.rows[rindex])//打出的是所有的tr标签
for(var kindex=0;kindex<UETable.rows[rindex].cells.length;kindex++){
for(var cindex=0;cindex<columnNames.length;cindex++){
if(columnNames[cindex]=='IP'){
for(var uindex=0;uindex<UETableData.length;uindex++){
for(var aindex=0;aindex<UETableData[uindex].length;aindex++){
// console.log(UETableData[uindex][cindex]);
var ipdata=UETableData[uindex][cindex];
//console.log(UETable.rows[rindex].cells[cindex])
var ipp=UETable.rows[rindex].cells[cindex];
ipp.innerHTML="";
var a = document.createElement("a");
var node = document.createTextNode(ipdata);
a.appendChild(node);
a.href="http://"+ipdata;
a.setAttribute('target','_blank')
ipp.appendChild(a);
console.log(ipp)
}
}
}
}
}
}
*/
31.
var res=req1.responseText.split('\n');
num=parseInt(res[0]);
num++;
var start_time=res[1];
// console.log(num+1)
// console.log(start_time)
console.log(num)
- // replace(/\"/g, "") 全局匹配双引号为空格
- Ping不通www.baidu.com,可能是没有网络,可能是域名解析错误,cat /etc/resolv.conf
- 超出自动换行: word-wrap:break-word;
- 数组.toString(),可以把数组转为字符串进行数组是否相同比较,(要求严格,类型必须一致)
- 十进制做与运算(已知和,求一个数组中哪几个数组成是这个和,,要求特殊,只有一种情况下可以用
37.判断一个数组中有重复元素:
function arrdump(ary){
var s = ary.join(",")+",";
for(var i=0;i<ary.length;i++) {
if(s.replace(ary[i]+",","").indexOf(ary[i]+",")>-1) {
//alert("数组中有重复元素:" + ary[i]);
if(ary[i] == "eth2"){
continue;
}else{
return true;
break;
}
}
}
}
38.判断一个数是不是在一个数组中
function getIndex(maxTxPowerDbm,refarrvalue){
var index = $.inArray(maxTxPowerDbm,refarrvalue);
if(index >= 0){
//alert("index"+index)
return index;
}
return -1;
}
- tableData.sort(function(a,b){
return a[0]-b[0];
})
40.str.substring(1,str.length-1); js去除第一个字符和最后一个字符
41.toFixed()方法可把Number四舍五入为指定小数位数的数字
NumberObject.toFixed(num) num是必须项,是0-20之间,0表示省略该参数
当调用该方法的对象不是 Number 时抛出 TypeError 异常。
返回值是字符串,但是四舍五入有问题,看运气,比方说5.555;均用toFixed(2)之后结果是5.55;555.555;均用toFixed(2)之后结果是555.55 , toFixed()在不同的浏览器中,给这个方法设定的舍入可能会有所不同
重写toFixed方法,既可以指定小数位又可返回数字类型
function toFixed()(num,d){
num*=Math.pow(10,d);
num=Math.round(num);
return num/(Math.pow(10,d));
} //console.log(toFixed(123.4567,3)) 结果是123.457 //console.log(toFixed(555.555,2)) 结果是555.55 //console.log(toFixed(55.555,2)) 结果是555.56 该方法没有解决四舍五入的问题
js重写toFixed方法(兼容负数),js的四舍五入不正确的情况(即四舍五入凑偶,4以下舍去,6以上进位,5只有前面一位是偶数的时候才进位,奇数不进位)可处理
Number.prototype.toFixed = function (s) {
var that = this, changenum, index;
// 负数
if (this < 0) {
that = -that;
}
changenum = (parseInt(that * Math.pow(10, s) + 0.5) / Math.pow(10, s)).toString();
index = changenum.indexOf(".");
if (index < 0 && s > 0) {
changenum = changenum + ".";
for (var i = 0; i < s; i++) {
changenum = changenum + "0";
}
} else {
index = changenum.length - index;
for (var i = 0; i < (s - index) + 1; i++) {
changenum = changenum + "0";
}
}
if (this < 0) {
return -changenum;
} else {
return changenum;
}
}
42.