JavaScript学习笔记
* 正则表达式
在js中使用正则表达式可以通过RegExp对象或String对象,其中RegExp对象定义正则表达式有两种方式,一是普通方式,二是构造函数的方式。
RegExp对象解析:
普通方式:
语法:var reg=/表达式/附加参数
如:var reg=/ab+/;
构造函数方式:
语法:var reg=new RegExp(“表达式”,”附加参数”),也可以不写附加参数。
如:reg=new RegExp("[0-9]");
reg=new RegExp("[0-9]","g");
附加参数:用来扩展表达式的含义,主要有以下三个参数。
g:代表可以进行全局匹配
I:代表不区分大小写匹配
m:代表可以进行多行匹配
RegExp对象的方法和属性:
test():检索字符串中正则表达式匹配的值,如果找到了返回true,否则返回false;
exec():检索字符串中正则表达式匹配的值,如果找到了则返回匹配值,否则返回空字符串;如果字符串中有多个正则表达式匹配的值,那么exec方法会将这些值全部返回,各值之间用","连接;返回的值是最后一次正则表达式匹配得到的值。
如:reg=/(a|b)jj/;->如字符串为"ajj",那么结果为"ajj,a",返回的值是最后一次正则表达式匹配得到的值。
reg=/(1|2){2,3}/;->1或2出现至少2次,至多3次;如111,121,212,如果字符串为"221",那么返回的值为"221,1"。
global:用于确定正则表达式中是否具有标志g,返回true或false
ignoreCase:同上所述,是否具有标志i
multiline:同上所述,是否具有标志m
语法:
正则表达式对象实例.test(字符串)
正则表达式对象实例.exec(字符串)
String对象解析:
match():检索字符串中指定的值,如果找到了返回匹配值,否则返回null;
语法:字符串对象.match(字符串或RegExp对象)
replace():替换与正则表达式相匹配的值
语法:字符串对象.replace(字符串或RegExp对象(被替换),”替换的字符串”)
split():把字符串分割为字符串数组
字符串对象.split(字符串或RegExp对象,n)
n为限制数组中元素的个数,如果不设置n,则没有限制。
正则表达式中常用的符号和用法:
符号 |
描述 |
/.../ |
代表一个模式的开始和结束 |
^ |
匹配字符串的开始 |
$ |
匹配字符串的结束 |
\s |
任何空白字符 |
\S |
任何非空白字符 |
\d |
一个数字字符 |
\D |
除了数字之外的任何字符 |
\w |
一个数字、下划线或字母 |
\W |
任何非\w字符 |
. |
除了换行符之外的任何字符 |
+ |
匹配前一项1次或多次 |
* |
匹配前一项0次或多次 |
? |
匹配前一项0次或1次 |
{} |
可以没上限,不能没下限 {n}->匹配前一项n次 {n,m}->匹配前一项至少n次,至多m次 {n,}->匹配前一项n次或更多次 {,n}->错误写法,得不到任何结果 |
[] |
[abcd]->a、b、c、d中任何一个字符 [a-z]->a至z中任何一个字符 [a-zA-Z]所有英文字母 [9-0]->错误写法,会导致字符集越界,js出错 [^0-9]不能是0至9中任何一个字符 |
| |
hi|hello->匹配hi或hello |
() |
a(b|c)d->a和d中间为b或c |
注意:
正则表达式如果匹配正确,那么不会再往下匹配了。如果想要将通配符转化为普通字符来匹配,那么需要使用反斜杠”\”来进行字符转义。如reg=/\./;就是将点号变为普通字符。
常用正则表达式
* prompt()
prompt()的第二个参数如果省略,那么就会在文本框中出现“undefined”;如果单击取消或关闭按钮,就会返回null;如果单击确定,就会返回输入文本框中的字符串。
* 数组
这个里面的数组是一个可以包含任何类型的数组,例如在一个数组中可以放不同类型的元素;
为数组元素赋值有以下几种写法:
var fruit=new Array(2);
fruit[0]="苹果";
fruit[1]="橘子";
var fruit=new Array("苹果","橘子");
var fruit=["苹果","橘子"];
输出fruit,结果为:苹果,橘子;
有一种错误写法:var fruit=("苹果","橘子");这样写它会把最后一个字符串(橘子)拆分成字符串数组,但是遇到不是字符串的就会出错,如var fruit=("苹果","橘子",12345);fruit.length=undefined;但是输出fruit,结果却为12345;
<script type="text/javascript">
var fruit=("苹果","橘子");
for(var i in fruit){
document.write( fruit[i])
}
document.write(" "+fruit.length);
</script>
输出:橘子 2
如果不为字符串定义定义长度,如var fruit=new Array();那么长度就会默认为0,fruit[100]=undefined;这个数组中所有元素的值都为undefined;
* parseInt()、parseFloat()、isNaN()
var num=parseInt("+-0sdf");
document.write(num);
输出:NaN
var num=parseInt("-0sdf");或var num=parseInt("+0sdf");
document.write(num);
输出:0
var num=parseInt(".0sdf");
document.write(num);
输出:NaN
var num=parseInt("11.23sdf");
document.write(num);
输出:11
parseFloat()方法与parseInt()大致相同,有一些区别:
var num=parseFloat(".0sdf");
document.write(num);
输出:0
var num=parseFloat(".1sdf");
document.write(num);
输出:0.1
var num=parseFloat("11sdf");
document.write(num);
输出:11
var num=parseFloat("11.23sdf");
document.write(num);
输出:11.23
isNaN()方法:
默认值为true
document.write(isNaN("12.2")),结果为false,它会把字符串转化为数值;
*
数组和null是object类型的,NaN是number类型的;
* 自定义函数
function show(n){},不能写成function show(var n){};
* onload()
在网页中,每次前进或后退都会刷新页面;
onload和location是打开一个新页面(可以前进和后退的)
onload必须等待网页中所有的内容(包括脚本)加载完毕后才能执行,onload打开新页面是因为函数;
如:
function show(){
var today=new Date();
document.write(today)
}
location='两数运算.HTML'
</script>
</head>
<body onload= show()>
它会先链接到'两数运算.HTML',这个onload就永远都出不来了。
* close()
close()这个方法如果在<script>标签中可以执行,但是直接在HTML标签中写就必须写成window.close();
关闭窗口时,只关闭本窗口。
*
在函数中输出文字到屏幕上(与body中的HTML代码无关),他就会打开一个新页面(可以前进或后退)显示内容。
如:
<script type="text/javascript">
function changeLink(){
document.write("khkhjkhkjhk");
}
</script>
</head>
<body >
<input name="b1" type="button" value="改变层内容" onclick="changeLink()"/>
</body>
*
document.getElementById()
document.getElementsByName()
document.getsElementByTagName()
以上三个方法必须写在函数里才能被使用。其中document.getElementById()是返回对拥有指定ID的第一个对象的引用,如一个div的对象的引用为[object HTMLDivElement];而p的对象的引用为[object HTMLParagraphElement];如果找不到,就会返回null。
如:
<script type="text/javascript">
function show(){
document.write(document.getElementById("all").checked);
}
</script>
</head>
<body>
<input id="all" type="checkbox" value="1" onclick="show()"/>全选<br />
</body>
不能直接输出document.getElementsByName("all")和document.getElementsByTagName("input");系统会提示拒绝访问。
如:
var s= document.getElementsByName("all");
document.write(s);
直接输出document.getElementById("all"); 结果会是null;
如:
var s= document.getElementById("all");
document.write(s);
*
日期的getDay()返回的值介于0~6之间,getMonth()返回的值介于0~11之间。
*
<h1>服饰</h1>哈哈,只有服饰变成1号字体;
<h1>服饰<h1>哈哈,服饰和哈哈都变成1号字体;
*
可见性过滤选择器:hidden,只对display有用,对visibility没用。
display:none;是将元素隐藏,并且元素会从页面上移走。
visibility:hidden;也是将元素隐藏,但是元素还是在原来的位置,只是看不见而已。
*
toggle()方法叫做套索;
toggle()方法可以切换元素的可见状态,如果被选元素可见,则隐藏这些元素,反之。
toggle(true)显示被选元素,反之。
toggle(function1,function2),单击被选元素调用function1,再单击被选元素调用function2,一直循环。
$("h1:gt(0)").toggle();这个方法也可以将下标大于0的元素都隐藏,并且元素会从页面上移走。
*
click()方法中如果放了多个函数,如click(function1,function2,function3,function4),那么他会默认调用第二个函数。
*
当使用对象的函数(如click())时,系统会默认为bind()绑定时间。
bind()绑定时间只对一开始的数据有用,后来新增的数据没有效果。
而live()对一开始的数据和后来新增的数据都有用。
*
html()获取的是在网页中的样子,
如;<div id="emailId">我 你</div>
那么这个的html()就是“我 你”,但是在网页中显示空格要用 ,这样用回车键打出的空格,不管有多长,都只算做1个空格。