您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > javascript心得
Javascript心得1.正则表达式:(1)RegExp(.*tid=(\\d*).*,g);匹配数字用RegExp全局对象时,用\\d而不是\d,其他的应该也是用两个\(2)RegExp.$1用一次之后就失效了,例如:alert(RegExp.$1);vartid=RegExp.$1;//tid将得不到任何内容2.获取鼠标位置:tSendMail.onclick=function(pE){pE=pE||window.event;varx=0;vary=0;if(pE.pageX||pE.pageY){x=pE.pageX;y=pE.pageY;}else{x=pE.clientX+document.body.scrollLeft+document.body.clientLeft;y=pE.clientY+document.documentElement.scrollTop+document.body.clientTop;}注意标红的那部分,当html文档在头部添加了w3c的标准后,document.body.scrollTop失效,应该使用document.documentElement.scrollTop3.关于几个函数:(1)getElementsByName:返回的是数组(2)setAttribute('',''):调用这个函数之后,对于div来说,name属性ff下可以通过getElementsByName获得,但是IE却无法获得;另外,定义一个容器的class,使用setAttribute('className','')而不是setAttribute('class',''),同样是因为IE不支持。4.关于max-width属性,IE6及其以下的版本不支持max-width,一下为替代方法:!--[ifltIE7]styletype=text/cssmedia=screenpimg{width:expression(this.width450?100%:true);}/style![endif]--!--[ifIE]--5.关于firefox3.5的img标签onerror事件:firefox3.5对于img标签中src为空的情况不会触发onerror事件(IE,firefox2,3均可以),只好把src设一个不存在的地址,就可以触发了。以下均出自《javascript权威指南》第四版6.javascript中如果语句分别放置在不同的行,就可以省去分号(所以某一行没有加分号,也不报错)7.javascript中的变量命名,第一个字符必须是字母、下划线或美元符号,接下来跌字符可以是字母、数字或下划线、美元符号,数字不允许作为首字符出现。8.javascript中的对象可以作为关联数组使用。因为它们能够将任意的数据值和任意的字符串关联起来例如:img.length=img[‘length’]。9.虽然undefined和null值不同,但是==运算符却将两者看作相等,如果必须区分,可以使用===或typeof。10.使用var多次声明同一个变量不仅是合法的,而且也不会造成任何错误。11.隐式声明(未声明直接赋值)的变量总是被创建为全局变量,即使该变量只在一个函数体内使用。12.没有块级作用域,函数中声明的所有变量,无论是在哪里声明的,在整个函数中他们都是有定义的:varscope=“global”;functionf(){alert(scope);//显示”undefined”,而不是”global”varscope=“local”;alert(scope);//显示”local”}13.基本类型:数值,布尔值,null,未定义的值(undefined)-固定大小引用类型:对象,数组,函数–不固定大小14.在Javascript中,由于所有的数字都是浮点型的,所以除法的结果也都是浮点型;15.如果函数不包含return语句,他就只执行函数体中的每条语句后返回给调用者Undefined;16.如果传递的参数比函数需要的个数多,多余的值会被忽略掉,如果少,则会被赋予undefined;17.在一个函数体内,标识符arguments具有特殊含义,是调用对象的一个特殊属性,它类似数组(实际上是Arguments对象),能够按照数字获取传递给函数的参数值,arguments[]允许存取函数参数,arguments.length表示参数个数;18.除了数组元素,Arguments对象还定义了callee属性,用来引用当前正在执行的函数,这对未命名的函数调用自身非常有用:function(x){if(x=1)return1;returnx*arguments.callee(x-1);}第八章对象19.for/in循环枚举对象属性:functionDisplayPropertyNames(obj){varnames=””;for(varnameinobj)names+=name+”\n”;alert(names);}20.关于原型对象(prototype):javascript的对象都继承原型对象的属性,每个对象都有原型对象,继承实在查询一个属性值时自动发生的,例如在读对象o的属性p时,首先检查o是否具有一个名为p的属性,则再检查o的原型对象是否具有这个属性;由于一个原型对象能够被多个对象继承(类似类成员,静态成员),因此存在着读写不对称性(有可能读到的是原型的属性,写的却是对象自身的属性);21.toString()方法的目的是每个对象类都有自己特定的字符串表示,所以应该定义一个合适的toString()方法将对象转换成相应的字符串形式:Obj.prototype.toString=function(){…}第九章数组22.在javascript中,数据第一个元素的下标是0。23.在javascript中,数组是稀疏的,数组的下标不会落在一个连续的数字范围内,只有那些真正存储在数组中的元素才能够分配的内存。如a[0]=1;a[1000]=1;javascript解释器只给数组下标为0和1000的元素分配内存,但是如果用a.length取数组的长度,那么长度是1001而不是2.24.通过设置数组的length属性来阶段数组是唯一一种缩短数组长度的方法。25.Array.slice(from,end)返回数组从from开始的元素到end的前一个元素,即从array[from]到array[end-1]。26.unshift()和shift()和push()与pop()相似,只不过都是在数组的头操作,即在数组的第一个元素处操作,由于在操作的同时需要移动数组元素的位置,不知道效率是不是比push()和pop()低。第十章使用正则表达式的模式匹配27.重复字符可以匹配尽可能多的字符,而且允许接下来的正则表达式继续匹配,因此我们说重复是“贪婪的”。可以以非贪婪方式进行重复,只需要在重复字符后加问号即可。例如,正则表达式/a+/匹配一个或多个字符a,应用在“aaa”上时,匹配三个字母,但是/a+?/只匹配一个或多个必要的字母a,因此只匹配“a”。28.关于模式g,对于RegExp对象,当一个具有g标志的正则表达式调用exec()时,他将把该对象的lastIndex属性设置到紧接着匹配子串的字符位置。当同一个RegExp对象第二次调用exec()时,它将从lastIndex属性所指示的字符处开始检索。如果exec()没有发现任何匹配,它会将lastIndex属性重置为0。第十一章JavaScript的更多主题29.运算符+,,=,,=即能用于数字,又能做作用于字符串,当这些运算符用于对象时,大多数情况下,javascript会先尝试调用对象的valueOf()方法对他进行转换,如果该方法返回了原始值,就使用那个值,但是valueOf()通常返回的都是未被转换的对象,在这种情况下,Javascript将调用对象的toString()方法对他进行转换。30.要把一个值转换成字符串,可以把它连接到一个空串上:varx_as_string=x+“”;要把一个值强制转换成数字,就用它减0:varx_as_number=x–0;要把一个值强制转换成布尔值,需要连用两次”!”运算符:varx_as_boolean=!!x;31.Number对象的toString(x)方法可以将数字转换成x进制。第十二章客户端JavaScript第十三章Web浏览器中的Javascript32.如果编写了一个并不产生任何文档输出的脚本,可以使用script标签中的defer属性来提示浏览器这样做是安全的:继续解析HTML文档并延迟脚本的执行,直到遇到一个无法延迟的脚本。33.关于/script标记,浏览器不会理解javascript代码,因此要在javascript里写/script时,要么拆分字符串,要么做转义:document.write(“/”+”script”);document.write(“\/script”);34.关于onload:当注册了多个onload句柄的时候,浏览器调用所有的句柄,但是,调用他们的顺序并不能保证;由于onload时间在文档完全解析之后调用,他们不能调用document.write,如果调用的话则会重新打开一个文档并且覆盖掉当前的文档,而不是在当前文档后面添加内容;35.关于onunload:窗口关闭时会调用(刷新时也会调用)第14章脚本化浏览器窗口36.关于location对象:location.href:urllocation.protocol:协议(:前的部分,比如http,file等等)location.host:主机名location.pathname:主机名后,参数前location.search:get参数37.setTimeout和clearTimeout,使用setTimeout返回值作为clearTimeout的参数,可以使setTimeout失效38.URL解码:decodeURIComponentURL编码:encodeURIComponent39.书上提到“不要混淆Window对象的location属性和Document对象的location属性,前者引用一个Locatioin对象,而后者只是一个只读字符串,并不具有Location对象的任何特性。但是alert(window.location===document.location);结果是true,不知道为什么……似乎document.location也是一个对象!40.关于坐标:outerWidth:浏览器窗口的宽度outerHeight:浏览器窗口的高度screenX:浏览器窗口相对于桌面的横坐标距离screenY:浏览器窗口相对于桌面的纵坐标距离innerWidth:HTML文档的宽度innerHeight:HTML文档的高度pageXOffset:滚动条的横坐标pageYOffset:滚动条的纵坐标41.关于访问变量:在做测试的时候发现,js遇到“xxxisnotundefined“错误时会停止脚本的运行,但是如果加上一个window对象,以访问window对象的属性时就不会出现一个脚本错误停止运行,只是返回一个”undefined”对象。42.关于Navigator对象的属性:appName:浏览器的简单名称appVersion:浏览器的版本号和(或)其他版本信息userAgent:浏览器在他的USER-AGENTHTTP头部发送的字符串,一般包含appName和appVersion中的所有信息appcodeName:浏览器的代码名,Netscape用代码名“Mozilla“作为这一属性的值,为了兼容,IE也采用这种方式platform:运行浏览器的代码名43.遍历一个对象属性的方法(以遍历Navigator方法为例):for(varpropnameinna
本文标题:javascript心得
链接地址:https://www.777doc.com/doc-3873667 .html