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


Posted in Javascript onJanuary 13, 2011

详细看附件例子,还是写的比较简单的。

1.关于cookie的函数:

/** 
* 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函数,很酷的方法:
/** 
* 用来查看一个对象的属性 
*/ 
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: <"+obj.tagName+">
 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,"<").replace(/>/g,">"); 
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,"<").replace(/>/g,">"); 
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方法:

/** 
* 在源字符串中查找满足要求的子串. 
* @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 指定的新对象。

简单的例子:

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);

稍微复杂的例子:
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");

多重继承的例子:
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的继承的效果:
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进行数组参数的函数的优化,很酷的方法:
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); 
}

下面是另外一个例子,用来合并两个数组:
再比如数组的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的话:
Array.prototype.push.apply(arr1,arr2)

打包下载 http://xiazai.3water.com/201101/yuanma/MyHtml.rar
Javascript 相关文章推荐
javascript中IE浏览器不支持NEW DATE()带参数的解决方法
Mar 01 Javascript
JavaScript异步编程:异步数据收集的具体方法
Aug 19 Javascript
jQuery实现点击文本框弹出热门标签的提示效果
Nov 17 Javascript
javascript定义类和类的实现实例详解
Dec 01 Javascript
解决React Native端口号修改的方法
Jul 28 Javascript
随机生成10个不重复的0-100的数字(实例讲解)
Aug 16 Javascript
js 将canvas生成图片保存,或直接保存一张图片的实现方法
Jan 02 Javascript
Angular学习笔记之集成三方UI框架、控件的示例
Mar 23 Javascript
详解Element 指令clickoutside源码分析
Feb 15 Javascript
详解Vue、element-ui、axios实现省市区三级联动
May 07 Javascript
微信小程序开发技巧汇总
Jul 15 Javascript
如何通过shell脚本自动生成vue文件详解
Sep 10 Javascript
javascript基础知识大集锦(一) 推荐收藏
Jan 13 #Javascript
myFocus slide3D v1.1.0 使用方法与下载
Jan 12 #Javascript
异步加载script的代码
Jan 12 #Javascript
数组方法解决JS字符串连接性能问题有争议
Jan 12 #Javascript
js对数字的格式化使用说明
Jan 12 #Javascript
元素的内联事件处理函数的特殊作用域在各浏览器中存在差异
Jan 12 #Javascript
克隆javascript对象的三个方法小结
Jan 12 #Javascript
You might like
基于php在各种web服务器的运行模式详解
2013/06/03 PHP
php获取数组中重复数据的两种方法
2013/06/28 PHP
ThinkPHP3.1新特性之对分组支持的改进与完善概述
2014/06/19 PHP
使用PHP如何实现高效安全的ftp服务器(一)
2015/12/20 PHP
推荐40个简单的 jQuery 导航插件和教程(下篇)
2012/09/14 Javascript
实现checkbox全选、反选、取消JavaScript小脚本异常
2014/04/10 Javascript
node.js中的fs.open方法使用说明
2014/12/17 Javascript
Javascript基础教程之数据类型转换
2015/01/18 Javascript
JavaScript使用function定义对象并调用的方法
2015/03/23 Javascript
基于jQuery实现表格的查看修改删除
2016/08/01 Javascript
微信小程序 input输入框控件详解及实例(多种示例)
2016/12/14 Javascript
浅谈JavaScript异步编程
2017/01/20 Javascript
深入理解AngularJs-scope的脏检查(一)
2017/06/19 Javascript
vue实现移动端图片裁剪上传功能
2020/08/18 Javascript
Angular4开发解决跨域问题详解
2017/08/28 Javascript
nodejs结合Socket.IO实现的即时通讯功能详解
2018/01/12 NodeJs
Vue.js 实现微信公众号菜单编辑器功能(二)
2018/05/08 Javascript
简单的三步vuex入门
2018/05/20 Javascript
vue中前进刷新、后退缓存用户浏览数据和浏览位置的实例讲解
2018/09/21 Javascript
Vue2.0使用嵌套路由实现页面内容切换/公用一级菜单控制页面内容切换(推荐)
2019/05/08 Javascript
JS算法教程之字符串去重与字符串反转
2020/12/15 Javascript
Python使用htpasswd实现基本认证授权的例子
2014/06/10 Python
Python时间获取及转换知识汇总
2017/01/11 Python
python3.6数独问题的解决
2019/01/21 Python
简单了解python的内存管理机制
2019/07/08 Python
Python使用type关键字创建类步骤详解
2019/07/23 Python
python使用socket 先读取长度,在读取报文内容示例
2019/09/26 Python
基于Tensorflow高阶读写教程
2020/02/10 Python
基于Python计算圆周率pi代码实例
2020/03/25 Python
python 实现关联规则算法Apriori的示例
2020/09/30 Python
HTML5 canvas画图并保存成图片的jcanvas插件
2014/01/17 HTML / CSS
大四自我鉴定范文
2013/10/06 职场文书
产品促销活动策划书
2014/01/15 职场文书
中文师范生自荐信
2014/01/30 职场文书
空气的环保标语
2014/06/12 职场文书
2014离婚协议书范文(3篇)
2014/11/29 职场文书