19.3.19js方法(css)

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;一起使用。*/  

}  

  1. 解决浏览器的缓存问题:

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(); //表单提交 

测试并没有成功!

  1. 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");

  }

  1.  

用户多次登录失败告警,方案:利用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)

  1. // replace(/\"/g, "")  全局匹配双引号为空格
  2. Ping不通www.baidu.com,可能是没有网络,可能是域名解析错误,cat  /etc/resolv.conf
  3. 超出自动换行:  word-wrap:break-word;
  4. 数组.toString(),可以把数组转为字符串进行数组是否相同比较,(要求严格,类型必须一致)
  5. 十进制做与运算(已知和,求一个数组中哪几个数组成是这个和,,要求特殊,只有一种情况下可以用

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;

}

  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.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/wangqingqing_/article/details/88659312