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

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

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.jb51.net/201101/yuanma/MyHtml.rar

(0)

相关推荐

  • javascript基础之查找元素的详细介绍(访问节点)

    当然这些选择器都是jQuery扩展的一些方法,那么使用原生js时要怎样来查找元素呢?今天就来简单梳理下. DOM定义了多种查找元素的方法,除了我们常用的getElementById(),还有getElementsByTagName()和getElementsByName().使用这几种方法方法我们可以查找html文档中的任意html元素.getElementById()首先来看下getElementById(),这个方法很简单,只需在参数中传入html标签的id属性值即可,由于html页面中的i

  • 一个JavaScript变量声明的知识点

    上周四吃完午饭,leader发了一道JavaScript的题目给我们做,我们Team里面有做前端的,有做后台的,也有坐mobile web的,所以大家对题目的理解各自都不一样,然后在QQ讨论组里面进行讨论.发现虽然很基础,但是通过讨论收获不少,分享出来.当然在有开发经验的开发者看来,这些都是学习JavaScript最基础的东西.因为平时都是用jQuery或者第三JS组件,所以对JavaScript基础学习不够重视.题目如下,问题是:2次alert分别输出什么结果? 复制代码 代码如下: <scr

  • Javascript基础 函数“重载” 详细介绍

    Javascript不像其他编程语言一样具有函数签名(什么是函数签名,简单的说就是说函数的接受参数类型和参数个数,也有人认为返回类型也应该包括.具体概念大家可以到网上查询). 所以Javascript是不能像其他语言一样实现方法名相同,参数个数不同-的这类重载的,不信你可以试试: 复制代码 代码如下: function show(){             alert("1");         }         function show(num1){             a

  • JavaScript基础语法让人疑惑的地方小结

    复制代码 代码如下: /* JS基础语法中,几个比较容易让人疑惑的地方. */ /* == === */ function de() { var ab = 25; //数值 var ba = "25"; //字符串 if (ab == ba) { //==,会先转换,后比对. //alert("b"); } if (!(ab === ba)) { //===不会转换,而进行直接比对,ab是数值类型数据,而ba是字符串类型数据 //alert("a"

  • javascript基础知识大全 便于大家学习,也便于我自己查看

    1.javascript的数组API 复制代码 代码如下: //定义数组 var pageIds = new Array(); pageIds.push('A'); 数组长度 pageIds.length; //shift:删除原数组第一项,并返回删除元素的值:如果数组为空则返回undefined var a = [1,2,3,4,5]; var b = a.shift(); //a:[2,3,4,5] b:1 //unshift:将参数添加到原数组开头,并返回数组的长度 var a = [1,

  • JavaScript基于正则表达式的数字判断函数

    1.下面列出了一些判读数值类型的正则表达式 复制代码 代码如下: "^\\d+$" //非负整数(正整数 + 0) "^[0-9]*[1-9][0-9]*$" //正整数 "^((-\\d+)|(0+))$" //非正整数(负整数 + 0) "^-[0-9]*[1-9][0-9]*$" //负整数 "^-?\\d+$" //整数 "^\\d+(\\.\\d+)?$" //非负浮点数(正浮

  • JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例

    javascript:变量的声明以下是几种声明变量的方式 复制代码 代码如下: var value; var value,value1,value2;//同时声明多个变量,但是这些变量的值都是undefined var i = 0,j = 0,k=100;//变量声明,初始化一体. //如果大家尝试读一个不存在的变量(值)会报错!但是尝试给一个未使用Var声明的变量赋值,javascript //会隐式的声明改变量,而且声明了的变量还是全局的.细节:所以大家创建变量都尽量使用Var //变量的作

  • JavaScript基础知识之数据类型

    数据类型 JavaScript中有5种简单数据类型(也称为基本数据类型):Undefined.Null.Boolean.Number和String.还有1种复杂数据类型--Object,Object本质上是由一组无序的名值对组成的. typeof操作符 介于JavaScript是松散类型的,因此需要有一种手段来检测给定变量的数据类型--typeof就是负责提供者方面信息的操作符.对一个值使用typeof操作符可能返回下列某个字符串: ● "undefined"--如果这个值未定义: ●

  • 精通Javascript系列之Javascript基础篇

    javascrpit的基本概念: 1)区分大小写 与JAVA一样,JS中的变量,函数,运算符以及其他的一切东西都是区分大小写的,例如:变量MyTag与MYTAG是两个不同的变量. 2)弱类型变更.所以谓弱类型变量指的是JS中变量无特定类型,不像C那样.定义变量只用"var",并可以将其初始化为任意的值,这样就可以随便的改变变量所存储数据的类型,不般不推荐: 例:var age=25; var myName="zhangsan"; 3) 每行结尾的分号可有可无: 例:

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

    next:js正则表达式,闭包,apply,callee,事件相关函数,Cookie等 1.javascript的数组API //定义数组 var pageIds = new Array(); pageIds.push('A'); 数组长度 pageIds.length; //shift:删除原数组第一项,并返回删除元素的值:如果数组为空则返回undefined var a = [1,2,3,4,5]; var b = a.shift(); //a:[2,3,4,5] b:1 //unshift

随机推荐