您的位置:首页 > Web前端 > JavaScript

JavaScript-基本知识(2)

2015-08-02 19:40 567 查看
 回顾:上篇学习了 基本类型
 这篇将学习:正则,函数 作用域
10)正则表达式
1.什么是正则表达式?
描述字符模式的对象,RegExp类表示正则表达式,进行强大的模式匹配和文本检索与替换的函数。
2.创建正则表达式
第一种(采用new):var box=new RegExp('box'); e.g /box/
var box =new RegExp('Box','ig'); e.g 第二个参数为模式可选参数:i:忽略大小写,g:全局匹配,m:多行匹配
第二种(采用字面量的方式):
var box1=/Box/;
var box1=/Box/ig;
3.测试正则表达式(test(),exec()) :以正则表达式作为对象
e.g var pattern=new RegExp('Box','i'); //声明正则

var str='box';//定义字符串

console.log(pattern.test(str));//test 匹配
/Box/.test(str);
test() 返回 true / false
exec() 匹配成功 ,返回一个数组,如果没有匹配到,返回null
e.g /Box/i.exec(str); 结果:["box", index: 11, input: "this is a box,that is a Box"]
4.使用字符串的正则表达式方法(以字符串作为对象)
match() 返回子串数组,或者null
replace() 匹配成功,返回替换后的字符串(全局g,全部替换,否则替换第一个),匹配失败,返回原字符串
search() 返回到第一个查到的第一个位置,找不到返回-1
split() 将字符串,拆分成是数组
5.使用静态属性
RegExp.input 正在匹配的字符串内容
RegExp.lastParen 最后一堆圆括号内的匹配子串
6.获取控制
. 点符号表示匹配除了换行符外的任意字符
* 星号表示,重复字符,0个或任意多个匹配字符
+ 加号,表示至少一个字符
? 问号,表示0个或者1个任意字符
o{2,4} 花括号,表示匹配字母o 出现2~4次
o{2,} 花括号,表示匹配字母o 出现大于2次
o{3} 花括号,表示匹配字母o 限定为3次
[a-z] 表示26个小写字母,任意一个都匹配
[A-Z] 表示26个小写字母,任意一个都匹配
[0-9] 表示10个数字,任意一个都匹配
[0-9]* 表示0次或者多次字符
[a-zA-Z0-9] 表示上面的字符
[^0-9] 表示非0-9的任意字符
\w 表示 字母数字下划线任意字符
\W 表示 非的字幕数字下划线的字符
\d 表示 匹配数字
\D 表示 匹配非数字
/^ $/ 表示 头匹配和尾匹配
\s 表示 空格匹配
\b 表示 是否到达边界
| 表示 或
() 表示 分组 ,可以看作是一个字符
$1 表示 获取到分组后,得到的字符
+? 表示使用 惰性,不加问号表示贪婪
e.g 1.贪婪
var pattern =/8(.*)8/;
var str='8google8 8google8 8google8';
console.log(str.replace(pattern,'$1'));
结果:google8 8google8 8google
e.g 2.惰性
var pattern =/8(.*?)8/;
var str='8google8 8google8 8google8';
console.log(str.replace(pattern,'$1'));
结果:google 8google8 8google8
e.g 3.加了全局
var pattern =/8(.*?)8/ig;
var str='8google8 8google8 8google8';
console.log(str.replace(pattern,'$1'));
结果:google google google


exec() 返回数组:
/(\d+)([a-z])/ 表示 捕获性分组,所有的分组都捕获返回
/(\d+)(?:[a-z])/ 表示非捕获性分组,只要在不需要捕获返回的分组加上?:
e.g /goo(?=gle)/ 表示goo后面必须是gle才能返回goo
7.常用的正则表达式
邮政编码: /[1-9][0-9]{5}/
空格: /\s/ig

函数Function
声明方式1:普通函数声明方式:function box(){}
声明方式2:使用变量声明方式:var box =function(){ return 1; }
声明方式3:使用new的构造函数的方式:var box1=new Function('return 1');
函数可以作为参数传递
函数的内部属性:
e.g: 递归阶乘:
function box(num){
if(num<=1){
return 1;
}else{
return num*box(num-1);
}
}


内部特殊对象:this :this引用的是函数数据以执行操作的对象,和C#和java中的this一样
window是一个对象,而是是js里面最大的对象,是最外围的对象,window表示全局

window.color='红色的'; 和语句 var color='红色的';是一样的。
apply()和 call(): 可以实现冒充作用域,可以扩充作用域 ;e.g :
function box(num1,num2){
return num1+num2;
}

//代替box执行 : apply()的作用
function sum(num1,num2){
return box.apply(this,[num1,num2]);
}

function sum1(num1,num2){
return box.apply(this,arguments); //多个参数可以用 arguments
}

//call() 的作用 ,传递参数的方式不同于apply()
function sum2(num1,num2){
return box.call(this,num1,num2);
}

shu(sum2(11,11))


;
变量,作用域及内存
1.变量:
javascript 变量是松散型的(不强制类):基本类型的值和引用类型的值。
基本类型的值:保存在栈内存中的简单的数据段。 Underfined ,Null,Boolean,Number,String
引用类型的值(指针来存取):保存在堆内存中的对象: Object
基本类型复制的是值,而引用类型复制的是地址。
传递参数:所有的函数的参数都是按值传递的,参数不会按引用类型传递的。

但是在传递的时候,可以让引用类型作为参数传递,但是按值类型传递的!!

js是没有按引用类型传递参数的。
检测引用类型:instanseof :可以检测对象还可以检测类型(Object,Array等)

检测基本类型:typeof 和 typeOf()
2.作用域
执行环境定义了变量或函数有权访问的其他数据。最大的执行环境为window.
全局变量和全局函数的最外围,属于window的属性和方法。
通过传参,页数局部变量的使用
每个函数被调用的时候都会创建自己的执行环境,没有块级作用域的。e.g:
if(true){ //这里的花括号没有作用域的,还有 for
var bax='yuan';
}
console.log(bax)


;
如果在函数体内声明的变量,有var 声明,属于函数体内的,全局声明的话,是全局变量。

3.内存问题
它会自行管理内存分配及无用的内存的回收!
最常用的垃圾收集方式是标记清除,是周期性运行的
最简单的是:如果你不使用了,对其赋值为null,适合于大多数全局变量
基本包装类型
Boolean ,String , Number 是基本类型,但是也是特殊的引用类型。因为可以调用系统内置的方法;
e.g substring()的使用
Number的 静态属性
e.g Number.MAX_VALUE 等
e.g 内定方法:toString();toLocaleString();toFixed(2 小数点保留位数);等
String 类型包含三个属性和大量内置方法:
三个属性:length , constructor ,prototype
字符方法:charAt(n) ,charCodeAt(n) 返回ASCII码
字符串操作方法:

concat(str) 将所有的字符串进行拼装

slice(n,m) 返回字符串n到m之间的内容

substring(n,m) 同上

substr(n,m) 从第n个开始,选m个字符
字符串位置方法:indexOf(str,n) , lastindexOf(str,n)

大小写转化:toLowerCase() 转换为小写; toUpperCase() 转换为大写:
字符串模式匹配方法:match(pattern); replace(pattern,str);search();split(pattern);
其他方法:localeCompare() 比较两个字符串
还有html方法,自查
内置对象
Gloal对象和Math对象
Gloal对象:这个一个特别的对象,这个对象是不存在的。
URI编码:encodeURI() :只编码中文和encodeURIComponent()编码字符和中文
URI解码:decodeURI() 和 decodeURIComponent()

eval() : 字符串解析器,可以当作javascript的解析器。可以执行javascript代码
e.g eval('alert(123);');
Math对象:

属性有:Math.PI ,还有平方根等
方法有:Math.min(); Math.max(); Math.ceil();向上取入 Math.floor();向下取入
Math.random();随机数 : e.g 获得1~10的随机数:
Math.floor(Math.random()*10+1)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息