js4
函数
函数的几种定义方式
//定义函数的方式
function fun1() {
alert("1");
}
var fun2 = function () {
alert("2");
}
var fun3 = new Function("name,age","alert(name + age)")
//调用函数
fun1();
fun2();
fun3("z",12);
内存展现
function f1(name) {
alert(name);
}
var f2 = f1;
f1("li");//li
f2("ol");//ol
//此时f2=f1,两个指向一个函数
f2 = function () {
alert("r");
}
//重新给f2定义一个函数,f2原来指向的f1仍为f1,但是f2改变了,f1不变
f2("k");//r
f1("l");//l
函数的赋值不是引用实现的,而胡思通过拷贝来实现的
函数覆盖
写在后面的函数会覆盖写在前面的函数,跟参数没有关系
function f1() {
alert(100);
}
function f1(a,b) {
alert(200);
}
f1();//200
参数
f1.length:定义的参数个数
arguments.length:实际传入的参数个数
并且arguments是一个类似数组的,如果想要得到传入的第一个参数就是arguments[0]
function f(a,b) {
if(arguments.length<2){
alert("0 "+arguments[0]);
}else {
alert(arguments.length+" "+arguments[0]);
}
}
f();//0 undefined
f(1,2);//2 1
f(1,2,3);//3 1
alert(f.length);//2
对象复用
//es3没有类的概念,但是可以理解为类,或者对象的模板
function Person(name,age) {
this.name = name;
this.age = age;
}
var p1 = new Person("zhangsan",38);
var p2 = new Person("lisi",22);
alert(p1.name);//zhangsan
alert(p2.name);//lisi
//具体对象,对象不能被复用
var obj = new Object();
obj.name = "aa";
obj.age = 33;
alert(obj.name);//aa
正则表达式
分组是看左括号,且顺序是看左括号的顺序((2)(3))这是三组,第一组是整个大的,第二组是2,第三组是3
正则表达式的写法
//正则有三种方法test()、exec()以及 compile()。
var str = "http://jjj.baidu.com";
//第一种方式 使用new RegExp,js中不需要转译,即不需要\
var reg1 = new RegExp("^http://w*");if(reg1.test(str)){ alert("ok1");
}else alert("no1");
//ok1
// 正则表达式写在//之中
var reg2 = /^http:\/\/w*/;
if(reg2.test(str)){
alert("ok2");
}else alert("no2");
//ok2
exec
//检索字符串中的正则表达式的匹配。
var str = "Visit W3School";
var patt = new RegExp("W3School","g");var result;
while ((result = patt.exec(str)) != null) {
document.write(result); document.write("<br />");
}
时间校验简易
function vilid() {
var time = document.getElementById("time").value;
var reg = /[1-2][0-9][0-9][0-9]-((0[1-9])||(1[0-2]))-((0[1-9])||([1-2][0-9])||(3[0-1]))/;
if(reg.test(time)){
alert("ok");
}else alert("no");
}
正则i,g
// i修饰符用于执行对大小写不敏感的匹配
//忽略大小写
var str="Visit W3School";
var patt1=/w3school/i;
document.write(str.match(patt1));
var str1 = "W";
var patt2 = /w/i;
if(patt2.test(str1)){
alert("ok");
}else alert("no");
//ok
// 修饰符用于执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
//全局查找,所有的
var str="Is this all there is?";
var patt1=/is/gi;
document.write(str.match(patt1));
//match找到就返回这个字符串
replace,search,match(String)
var str="Visit Microsoft!";
document.write(str.replace(/Microsoft/, "W3School"));
//Visit W3School
var name = "Doe, John";
name = name.replace(/(\w+)\s*, \s*(\w+)/, "$2 $1");
document.write(name);
//John Doe
//search类似indexof,找到之后返回位置,找不到返回-1
var str="Visit W3School!"
document.write(str.search(/W3School/));
//6
//match找到就返回这个字符串,找不到返回null
var str="Hello world!"
document.write(str.match("world") + "<br />")
document.write(str.match("World") + "<br />")
document.write(str.match("worlld") + "<br />")
document.write(str.match("world!"))
输出:
world
null
null
world!