本文主要讲解一些基本的javascript技巧,一是为初学者提供帮助,二是温习以前学过的知识。
1.apply与call的区别
其实apply和call没有什么大的区别,它们完成的功能都一样,就是完成方法的调用,但两者传入的参数有所不同。看例子:
1 var obj={name:'jack'}
2
3 function fn(age,address){
4 alert(this.name+"-->"+age+"-->"+address);
5 }
6
7 fn.call(obj,3,'USA');
8 fn.apply(obj,[3,'USA']);
上述代码运行结果都是"jack-->3-->USA" call方法传入的第一个参数是函数运行的上下文环境,第二、三个……参数就是函数fn本身的参数了。至于apply,它的第一个参数也是上下文环境,第二个参数是一个数组,也是fn本身的参数
2.日期解析的问题
比如有这么一个字符串'Sun May 31 09:13:25 UTC+0800 2009',我们可以这样把它解析成日期:
1 var time=Date.parse('Sun May 31 09:13:25 UTC+0800 2009');
2 var date=new Date(time);
3.字符串拼接问题
有时候我们需要字符串的连接,这时我们常用"+"号来拼接,这样做方便、快捷,似乎一切都顺理成章。但是,当我们拼接特别长的字符串时,问题出现了:字符串越长,拼接时间越慢。因为每次用"+"号进行连接时,我们都需要创建一个新的string对象,所以要连接的字符越长,速度也就越慢了。怎么办,我们可以采用数组的join方法。如:
var arr=["one","two","three","four"]
var str=arr.join("");
str的结果就为"onetwothreefour"。
在java中有一个StringBuffer类,我们也可以模拟一个:
代码
1 function StringBuffer(){
2 this.__string__=[];
3 if(typeof StringBuffer._initialzed=="undefined"){
4 StringBuffer.prototype.append=function(str){
5 this.__string__.push(str);
6 }
7 StringBuffer.prototype.toString=function(){
8 this.__string__.join("");
9 }
10 StringBuffer._initialzed=true;
11 }
12 }
使用方式也很简单,只需要这样书写即可:
1 var sb=new StringBuffer();
2 sb.append("one");sb.append("two");sb.append("three");
3 var str=sb.toString();
4.快速去除数组中相同的元素
假设有一个数组,它有1万个元素,但其中有相同的元素,怎么去掉这些相同的元素呢? 一想,很简单吧?遍历呗,然后进行比较判断。现在介绍一种更简单快捷的方法,甚至不需要比较判断。。为了方便,我们改写Array的原型。
1 Array.prototype.unique=function(){
2 var obj={},res=[];4 for(var i=this.length-1;i>=0;i--){
5 obj[this[i]]=1;
6 }
7 for(var value in obj){
8 res.push(value);
9 }
10 return res;
11 }
var arr=[1,2,3,···].unique() 就去掉了数组中重复的元素。
5 表单提交的问题
假设有一个form,它的代码如下:
1 <form action="demo.jsp" method="post" id="frm">
2 </form>
现在我们有一个需求:我们在form下增加一个文件上传控件,也就是<input type="file" />,由于form只是一个普通的form,怎么样才能使得form能上传文件哩?
也许你想到了,上传文件需要设置 form的 enctype属性为multipart/form-data 于是你这么做了:
1 var form=document.getElementById('frm");
2 form.setAttribute("enctype","multipart/form-data");
在firefox下测试,一切ok,但是在ie下却出了问题?为什么,愁人!原来ie和firefox的安全机制是不一样的。不同的安全机制,操作方法就不尽相同了。在ie下,应该这么操作:
1 var form=document.getElementById('frm"),
2 encType = form.getAttributeNode("enctype");
3 encType.value="multipart/form-data";
这样,一切都ok了,世间开始变得清静起来……

浙公网安备 33010602011771号