`
lysvanilla
  • 浏览: 80652 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

javascript基础知识大集锦(2)

js 
阅读更多

1.关于cookie的函数:

Js代码 复制代码 收藏代码
  1. /**
  2. * cookie操作工具.
  3. * 使用方法:保存值:CookieTool('name','1',{expires: 7}) //表示保存一个cookie值为1,键值为name,失效时间7天以后
  4. * 取值:CookieTool('name') //返回1
  5. * @param {} name
  6. * @param {} value
  7. * @param {} options
  8. * @return {}
  9. */
  10. CookieTool = function(name, value, options) {
  11. if (typeof value != 'undefined') {
  12. options = options || {};
  13. if (value === null) {
  14. value = '';
  15. options.expires = -1;
  16. }
  17. var expires = '';
  18. if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
  19. var date;
  20. if (typeof options.expires == 'number') {
  21. date = new Date();
  22. date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
  23. } else {
  24. date = options.expires;
  25. }
  26. expires = '; expires=' + date.toUTCString();
  27. }
  28. var path = options.path ? '; path=' + (options.path) : '';
  29. var domain = options.domain ? '; domain=' + (options.domain) : '';
  30. var secure = options.secure ? '; secure' : '';
  31. document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
  32. } else {
  33. var cookieValue = null;
  34. if (document.cookie && document.cookie != '') {
  35. var cookies = document.cookie.split(';');
  36. for (var i = 0; i < cookies.length; i++) {
  37. var cookie = trim(cookies[i]);
  38. if (cookie.substring(0, name.length + 1) == (name + '=')) {
  39. cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
  40. break;
  41. }
  42. }
  43. }
  44. return cookieValue;
  45. }
  46. };
/**
 * cookie操作工具.
 * 使用方法:保存值:CookieTool('name','1',{expires: 7})  //表示保存一个cookie值为1,键值为name,失效时间7天以后
 *         取值:CookieTool('name')                    //返回1
 * @param {} name
 * @param {} value
 * @param {} options
 * @return {}
 */
CookieTool = function(name, value, options) {
          if (typeof value != 'undefined') {
                    options = options || {};
                    if (value === null) {
                              value = ''; 
                              options.expires = -1;
                    }
                    var expires = '';
                    if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
                              var date;
                              if (typeof options.expires == 'number') {
                                        date = new Date();
                                        date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
                              } else {
                                        date = options.expires;
                              }
                              expires = '; expires=' + date.toUTCString();
                    }
                    var path = options.path ? '; path=' + (options.path) : '';
                    var domain = options.domain ? '; domain=' + (options.domain) : '';
                    var secure = options.secure ? '; secure' : '';
                    document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
          } else {
                    var cookieValue = null;
                    if (document.cookie && document.cookie != '') {
                              var cookies = document.cookie.split(';');
                              for (var i = 0; i < cookies.length; i++) {
                                        var cookie = trim(cookies[i]);
                                        if (cookie.substring(0, name.length + 1) == (name + '=')) {
                                                  cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                                                  break;
                                        }
                              }
                    }
                    return cookieValue;
          }
};



2.关于一个可以查看js对象的js函数,很酷的方法:

Js代码 复制代码 收藏代码
  1. /**
  2. * 用来查看一个对象的属性
  3. */
  4. function debugObjectInfo(obj){
  5. traceObject(obj);
  6. function traceObject(obj){
  7. var str = '';
  8. if(obj.tagName&&obj.name&&obj.id)
  9. str="<table border='1' width='100%'><tr><td colspan='2' bgcolor='#ffff99'>traceObject   tag: &lt;"+obj.tagName+"&gt;   name = \""+obj.name+"\"   id = \""+obj.id+"\" </td></tr>";
  10. else{
  11. str="<table border='1' width='100%'>";
  12. }
  13. var key=[];
  14. for(var i in obj){
  15. key.push(i);
  16. }
  17. key.sort();
  18. for(var i=0;i<key.length;i++){
  19. var v= new String(obj[key[i]]).replace(/</g,"&lt;").replace(/>/g,"&gt;");
  20. str+="<tr><td valign='top'>"+key[i]+"</td><td>"+v+"</td></tr>";
  21. }
  22. str=str+"</table>";
  23. writeMsg(str);
  24. }
  25. function trace(v){
  26. var str="<table border='1' width='100%'><tr><td bgcolor='#ffff99'>";
  27. str+=String(v).replace(/</g,"&lt;").replace(/>/g,"&gt;");
  28. str+="</td></tr></table>";
  29. writeMsg(str);
  30. }
  31. function writeMsg(s){
  32. traceWin=window.open("","traceWindow","height=600, width=800,scrollbars=yes");
  33. traceWin.document.write(s);
  34. }
  35. }
/**
 * 用来查看一个对象的属性
 */
function debugObjectInfo(obj){
        traceObject(obj);
        
        function traceObject(obj){ 
                var str = '';
                if(obj.tagName&&obj.name&&obj.id)
                str="<table border='1' width='100%'><tr><td colspan='2' bgcolor='#ffff99'>traceObject   tag: &lt;"+obj.tagName+"&gt;   name = \""+obj.name+"\"   id = \""+obj.id+"\" </td></tr>"; 
                else{
                        str="<table border='1' width='100%'>"; 
                }
                var key=[]; 
                for(var i in obj){ 
                        key.push(i); 
                } 
                key.sort(); 
                for(var i=0;i<key.length;i++){ 
                        var v= new String(obj[key[i]]).replace(/</g,"&lt;").replace(/>/g,"&gt;"); 
                        str+="<tr><td valign='top'>"+key[i]+"</td><td>"+v+"</td></tr>"; 
                } 
                str=str+"</table>"; 
                writeMsg(str); 
        } 
        function trace(v){ 
                var str="<table border='1' width='100%'><tr><td bgcolor='#ffff99'>"; 
                str+=String(v).replace(/</g,"&lt;").replace(/>/g,"&gt;"); 
                str+="</td></tr></table>"; 
                writeMsg(str); 
        } 
        function writeMsg(s){ 
                traceWin=window.open("","traceWindow","height=600, width=800,scrollbars=yes"); 
                traceWin.document.write(s); 
        } 
}



3.正则表达式:

g 代表全局匹配
m 代表可以进行多行匹配
i 代表不区分大小写匹配
^ 匹配输入字符串的开始位置
$ 匹配输入字符串的结束位置
* 匹配前面的子表达式零次或多次. 等价于{0,}
+ 匹配前面的子表达式一次或多次. 等价于{1,}
? 匹配前面的子表达式零次或一次. 等价于[0,1} , 当该字符跟在任何一个其他限制符(*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。

\d 匹配一个数字字符. 等价于 [0-9]
\D 匹配一个非数字符. 等价于 [^0-9]
\w ,等价于 "[A-Za-z0-9_]"
\W 匹配任何非单词字符,等价于 "[^A-Za-z0-9]"
\s 匹配任何空白字符, 包括空格 制表符 换页符 等等. 等价于[\f\n\r\t\v]
\S 匹配任何非空白字符. 等价于 [^\f\r\n\t\v]
\b 匹配一个单词边界,也就是指单词和空格间的位置。
\B 匹配非单词边界。

正则表达式常用js方法:

Js代码 复制代码 收藏代码
  1. /**
  2. * 在源字符串中查找满足要求的子串.
  3. * @return {}
  4. */
  5. function MatchDemo() {
  6. var r, re; // 声明变量。
  7. var s = "The rain in Spain falls mainly in the plain";
  8. re = new RegExp("ain", "g"); // 创建正则表达式对象。
  9. r = s.match(re); // 在字符串 s 中查找匹配。
  10. return (r);
  11. }
  12. /**
  13. * 返回在源字符串中的满足正则表达式的全部的字串和位置信息.
  14. */
  15. function RegExpTest() {
  16. var ver = Number(ScriptEngineMajorVersion() + "."
  17. + ScriptEngineMinorVersion())
  18. var ans = '';
  19. if (ver >= 5.5) { // 测试 JScript 的版本。
  20. var src = "The rain in Spain falls mainly in the plain.";
  21. var re = /\w+/g; // 创建正则表达式模式。
  22. var arr;
  23. while ((arr = re.exec(src)) != null)
  24. ans += arr.index + "-" + arr.lastIndex + arr + "\t";
  25. } else {
  26. ans = "请使用 JScript 的更新版本";
  27. }
  28. return ans;
  29. }
  30. /**
  31. * 对源字符串进行正则表达式检查,看是不是符合正则表达式.
  32. */
  33. function TestDemo() {
  34. var s1;
  35. var source = "abcdefg";
  36. var regex = /\w+/g; // 创建正则表达式模式。
  37. if (regex.test(source))
  38. s1 = " contains ";
  39. else
  40. s1 = " does not contain ";
  41. return ("'" + source + "'" + s1 + "'" + regex.source + "'");
  42. }
  43. /**
  44. * 在源字符串中查找正则表达式的字串.
  45. * @return {}
  46. */
  47. function SearchDemo() {
  48. var r, re;
  49. var s = "The rain in Spain falls mainly in the plain.";
  50. re = /falls/i;
  51. r = s.search(re);
  52. return (r);
  53. }
/**
 * 在源字符串中查找满足要求的子串. 
 * @return {}
 */
function MatchDemo() {
	var r, re; // 声明变量。   
	var s = "The rain in Spain falls mainly in the plain";
	re = new RegExp("ain", "g"); // 创建正则表达式对象。   
	r = s.match(re); // 在字符串 s 中查找匹配。   
	return (r);
}

/**
 * 返回在源字符串中的满足正则表达式的全部的字串和位置信息. 
 */
function RegExpTest() {
	var ver = Number(ScriptEngineMajorVersion() + "."
			+ ScriptEngineMinorVersion())
	var ans = '';
	if (ver >= 5.5) { // 测试 JScript 的版本。   
		var src = "The rain in Spain falls mainly in the plain.";
		var re = /\w+/g; // 创建正则表达式模式。   
		var arr;
		while ((arr = re.exec(src)) != null)
			ans += arr.index + "-" + arr.lastIndex + arr + "\t";
	} else {
		ans = "请使用 JScript 的更新版本";
	}
	return ans;
}

/**
 * 对源字符串进行正则表达式检查,看是不是符合正则表达式.  
 */
function TestDemo() {
	var s1;
	var source = "abcdefg";
	var regex = /\w+/g; // 创建正则表达式模式。  
	if (regex.test(source))
		s1 = " contains ";
	else
		s1 = " does not contain ";
	return ("'" + source + "'" + s1 + "'" + regex.source + "'");
}

/**
 * 在源字符串中查找正则表达式的字串. 
 * @return {}
 */
function SearchDemo() {
	var r, re;
	var s = "The rain in Spain falls mainly in the plain.";
	re = /falls/i;
	r = s.search(re);
	return (r);
}



4.很值得学习并要使用好的方法,call():
call([thisObj[,arg1[, arg2[, [,.argN]]]]])
参数
thisObj
可选项。将被用作当前对象的对象。
arg1, arg2, , argN
可选项。将被传递方法参数序列。
说明
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。

简单的例子:

Js代码 复制代码 收藏代码
  1. function add(a,b)
  2. {
  3. alert(a+b);
  4. }
  5. function sub(a,b)
  6. {
  7. alert(a-b);
  8. }
  9. add.call(sub,3,1);
  10. //这个例子中的意思就是用 add 来替换 sub,add.call(sub,3,1) == add(3,1) ,所以运行结果为:alert(4);
function add(a,b)
{
    alert(a+b);
}
function sub(a,b)
{
    alert(a-b);
}

add.call(sub,3,1); 
//这个例子中的意思就是用 add 来替换 sub,add.call(sub,3,1) == add(3,1) ,所以运行结果为:alert(4);



稍微复杂的例子:

Js代码 复制代码 收藏代码
  1. function Class1()
  2. {
  3. this.name = "class1";
  4. this.showNam = function()
  5. {
  6. alert(this.name);
  7. }
  8. }
  9. function Class2()
  10. {
  11. this.name = "class2";
  12. }
  13. var c1 = new Class1();
  14. var c2 = new Class2();
  15. c1.showNam.call(c2);
  16. //call 的意思是把 c1 的方法放到c2上执行,原来c2是没有showNam() 方法,现在是把c1 的showNam()方法放到 c2 上来执行,所以this.name 应该是 class2,执行的结果就是 :alert("class2");
function Class1()
{
    this.name = "class1";

    this.showNam = function()
    {
        alert(this.name);
    }
}

function Class2()
{
    this.name = "class2";
}

var c1 = new Class1();
var c2 = new Class2();

c1.showNam.call(c2);
//call 的意思是把 c1 的方法放到c2上执行,原来c2是没有showNam() 方法,现在是把c1 的showNam()方法放到 c2 上来执行,所以this.name 应该是 class2,执行的结果就是 :alert("class2");



多重继承的例子:

Js代码 复制代码 收藏代码
  1. function Class10()
  2. {
  3. this.showSub = function(a,b)
  4. {
  5. alert(a-b);
  6. }
  7. }
  8. function Class11()
  9. {
  10. this.showAdd = function(a,b)
  11. {
  12. alert(a+b);
  13. }
  14. }
  15. function Class2()
  16. {
  17. Class10.call(this);
  18. Class11.call(this);
  19. }
function Class10()
{
    this.showSub = function(a,b)
    {
        alert(a-b);
    }
}

function Class11()
{
    this.showAdd = function(a,b)
    {
        alert(a+b);
    }
}


function Class2()
{
    Class10.call(this);
    Class11.call(this);
}



5.apply函数:
Function.apply(obj,args)方法能接收两个参数
obj:这个对象将代替Function类里this对象
args:这个是数组,它将作为参数传给Function(args-->arguments)
实现类似call的继承的效果:

Js代码 复制代码 收藏代码
  1. function Person(name,age){ //定义一个类,人类
  2. this.name=name; //名字
  3. this.age=age; //年龄
  4. this.sayhello=function(){alert("hello")};
  5. }
  6. function Print(){ //显示类的属性
  7. this.funcName="Print";
  8. this.show=function(){
  9. var msg=[];
  10. for(var key in this){
  11. if(typeof(this[key])!="function"){
  12. msg.push([key,":",this[key]].join(""));
  13. }
  14. }
  15. alert(msg.join(" "));
  16. };
  17. }
  18. function Student(name,age,grade,school){ //学生类
  19. Person.apply(this,arguments);
  20. Print.apply(this,arguments);
  21. this.grade=grade; //年级
  22. this.school=school; //学校
  23. }
  24. var p1=new Person("jake",10);
  25. p1.sayhello();
  26. var s1=new Student("tom",13,6,"清华小学");
  27. s1.show();
  28. s1.sayhello();
  29. alert(s1.funcName);
function Person(name,age){   //定义一个类,人类  
    this.name=name;     //名字  
    this.age=age;       //年龄 
    this.sayhello=function(){alert("hello")};
} 
function Print(){            //显示类的属性 
    this.funcName="Print"; 
    this.show=function(){      
        var msg=[];
        for(var key in this){ 
            if(typeof(this[key])!="function"){
                msg.push([key,":",this[key]].join(""));
            }
        } 
        alert(msg.join(" "));
    };
} 
function Student(name,age,grade,school){    //学生类 
    Person.apply(this,arguments);
    Print.apply(this,arguments);
    this.grade=grade;                //年级 
    this.school=school;                 //学校 
} 
var p1=new Person("jake",10);
p1.sayhello();
var s1=new Student("tom",13,6,"清华小学");
s1.show();
s1.sayhello();
alert(s1.funcName);



使用apply进行数组参数的函数的优化,很酷的方法:

Js代码 复制代码 收藏代码
  1. Math.max后面可以接任意个参数,最后返回所有参数中的最大值。
  2. 比如
  3. alert(Math.max(5,8)) //8
  4. alert(Math.max(5,7,9,3,1,6)) //9
  5. 但是在很多情况下,我们需要找出数组中最大的元素。
  6. var arr=[5,7,9,1]
  7. alert(Math.max(arr)) // 这样却是不行的。一定要这样写
  8. function getMax(arr){
  9. var arrLen=arr.length;
  10. for(var i=0,ret=arr[0];i<arrLen;i++){
  11. ret=Math.max(ret,arr[i]);
  12. }
  13. return ret;
  14. }
  15. 用 apply呢,看代码:
  16. function getMax2(arr){
  17. return Math.max.apply(null,arr);
  18. }
Math.max后面可以接任意个参数,最后返回所有参数中的最大值。

比如 
alert(Math.max(5,8))   //8
alert(Math.max(5,7,9,3,1,6))   //9

但是在很多情况下,我们需要找出数组中最大的元素。
var arr=[5,7,9,1]
alert(Math.max(arr))    // 这样却是不行的。一定要这样写

function getMax(arr){
    var arrLen=arr.length;
    for(var i=0,ret=arr[0];i<arrLen;i++){
        ret=Math.max(ret,arr[i]);       
    }
    return ret;
}

用 apply呢,看代码:
function getMax2(arr){
    return Math.max.apply(null,arr);
}



下面是另外一个例子,用来合并两个数组:

Js代码 复制代码 收藏代码
  1. 再比如数组的push方法。
  2. var arr1=[1,3,4];
  3. var arr2=[3,4,5];
  4. 如果我们要把 arr2展开,然后一个一个追加到arr1中去,最后让arr1=[1,3,4,3,4,5]
  5. arr1.push(arr2)显然是不行的。 因为这样做会得到[1,3,4,[3,4,5]]
  6. 我们只能用一个循环去一个一个的push(当然也可以用arr1.concat(arr2),但是concat方法并不改变arr1本身)
  7. var arrLen=arr2.length
  8. for(var i=0;i<arrLen;i++){
  9. arr1.push(arr2[i]);
  10. }
再比如数组的push方法。
var arr1=[1,3,4];
var arr2=[3,4,5];
如果我们要把 arr2展开,然后一个一个追加到arr1中去,最后让arr1=[1,3,4,3,4,5]
arr1.push(arr2)显然是不行的。 因为这样做会得到[1,3,4,[3,4,5]]

我们只能用一个循环去一个一个的push(当然也可以用arr1.concat(arr2),但是concat方法并不改变arr1本身)
var arrLen=arr2.length
for(var i=0;i<arrLen;i++){
    arr1.push(arr2[i]);
}


使用apply的话:

Js代码 复制代码 收藏代码
  1. Array.prototype.push.apply(arr1,arr2)
Array.prototype.push.apply(arr1,arr2)
分享到:
评论

相关推荐

    javascript基础知识大集锦

    以下是一些关于JavaScript数组操作的基础知识: 1. **定义数组**:在JavaScript中,可以使用`new Array()`或者直接用方括号`[]`来定义数组。例如: ```javascript var pageIds = new Array(); var pageIds = [];...

    javascript基础知识大集锦(二) 推荐收藏

    正则表达式 call(),apply(),callee,caller,cookie方法,setInterval(),clearInterval(),setTimeout() ,clearTimeout()

    JavaScript 知识小集锦

    以上是JavaScript的一些基础知识点,希望这些内容能帮助你在日常开发中更好地理解和运用JavaScript,提高代码质量。在实践中不断学习和探索,你会发现JavaScript是一个功能强大且充满乐趣的语言。

    JavaScript深入学习文档集锦

    1. JavaScript-1.doc:可能涵盖了JavaScript的基础知识,包括变量、数据类型(如字符串、数字、布尔值、null、undefined)、操作符(算术、比较、逻辑)、流程控制(条件语句if...else、switch,循环for、while、do....

    Javascript经典实例集锦

    这个"JavaScript经典实例集锦"涵盖了JavaScript编程中的各种重要概念、技巧和最佳实践,对于提升JavaScript技能和理解力有着极大的帮助。让我们逐一探讨这些知识点。 1. **基础语法**:JavaScript的基础包括变量...

    javascript源代码集锦

    1. **基础语法**:JavaScript的基础包括变量声明(var, let, const)、数据类型(如字符串、数字、布尔值、null、undefined、对象和数组)、操作符(如算术、比较、逻辑和赋值操作符)以及流程控制(条件语句if/else...

    JavaScript3D特效集锦

    下面将详细探讨JavaScript3D特效的核心知识点及其应用。 1. **WebGL**:WebGL是JavaScript的一个API,它允许在浏览器中进行硬件加速的3D图形渲染。这是许多3D特效的基础,通过它可以创建复杂的3D场景,并与用户进行...

    JavaScript源代码集锦

    在这个“JavaScript源代码集锦”中,我们可以期待找到以下几类知识点: 1. **基础语法**:包括变量声明(var, let, const)、数据类型(字符串、数字、布尔、null、undefined、对象、数组、符号等)、操作符(算术...

    HTML基础知识集锦

    它构成了互联网上大部分内容的基础。...掌握这些基础知识是构建和理解网页内容的关键步骤。在实际开发中,还会涉及更多的HTML标签、CSS样式和JavaScript交互,这些都是构建动态、交互式网页的重要组成部分。

    JavaScript 语法集锦 脚本之家基础推荐

    标题和描述提到的“JavaScript 语法集锦 脚本之家基础推荐”表明了接下来要介绍的内容是关于JavaScript编程语言中常用函数和语句的总结。这些内容对于初学者和有经验的开发者都是有益的,因为它提供了一个实用的参考...

    JavaScript集锦

    JavaScript是一种广泛应用于网页和网络应用的编程...以上就是根据"JavaScript集锦"这一主题可以推测出的一些关键知识点。通过深入学习和实践这些内容,开发者可以增强对JavaScript的理解,并提升实际项目中的开发能力。

    JavaScript实用技巧集锦

    2. **控制流**:掌握`if...else`、`switch`语句以及循环(`for`, `while`, `do...while`)结构,是编写逻辑代码的基础。另外,`break`和`continue`用于控制循环流程。 3. **函数**:了解如何声明和调用函数,包括...

    javascript集锦

    让我们深入探讨一下JavaScript在这些特效中的核心知识点。 1. **DOM操作**:JavaScript通过Document Object Model(DOM)来操作HTML和XML文档。常见的DOM操作包括元素的选择(`document.getElementById`,`...

    JavaScript经典效果集锦

    以上只是JavaScript经典效果集锦中的一部分知识点,实际的学习过程中,还需要结合具体的代码实例进行深入研究和实践。在不断探索和学习中,开发者能够更好地掌握JavaScript,从而创造出更多富有创意和实用性的网页...

    BIRT知识集锦(基础知识大全)

    【BIRT知识集锦(基础知识大全)】 BIRT(Business Intelligence and Reporting Tools)是一个基于Eclipse的开源报表系统,主要用于Web应用程序的开发。其核心特性是建立在Java和J2EE平台之上,使得BIRT能够无缝...

    JavaScript面试题集锦.doc

    通过对这些问题的解释和分析,可以帮助开发人员更好地理解 JavaScript 的基础知识和应用。 一、HTML 表单输入类型 JavaScript 中的 input 元素有多种类型,包括 text、radio、checkbox、file、button、image、...

Global site tag (gtag.js) - Google Analytics