[翻译]javascript学习笔记 (一)-函数基础
正则表达式验证表单
定义一个函数,需要前三个参数,其余7个是可选的
如果参数没有传值则为"undefine",这代表对象不存在。在判断语句中,系统可以把它转换为布尔值"false"。
函数参数中可以传递函数
若你不清楚函数有多少个参数,可以使用function内置的"arguments"对象,它存在与每个函数里面。
函数中可以包含函数,这为实现js的仿OO提供了基础。
函数定义有很多种,第三中定义方式很少用,但是很有用。你可以使用字符串定义函数。
字符串
转义字符 \
两者的效果是一样的
常用字符串函数
IndexOf 返回包含指定字符串在另外一个字符串第一次出现的位置,如果不存在则返回-1
lastIndexOf 返回包含指定字符串在另外一个字符串最后一次出现的位置,如果不存在则返回-1
charAt 字符串中指定位置的字符值
substring 获取字符串两个索引间的值
substr 功能和substring类似 第二个参数获取的是所需字符串的长度
例如
eval 将传入的字符串作为javascript代码执行
数字
NaN 代表 "not a number"
常用函数
parseInt ,parseFloat,toString
数组
两种定义数组的方式
数组的每个项可以包含任何类型的其他项,如字符串,数字,对象,函数,甚至数组.
通过如下代码访问
在数组的末尾加入一个新的项
splice函数的作用很大 可以用来任意添加或删除数组元素 下面示例用来添加和删除数组项.splice接收了两个参数:起始索引,移除项的数目 .
我们经常需要将数组转为字符串或字符串转为数组
提供了两个函数
join:将数组转为字符串 每个项之间用一个字符串连接起来
split:将字符串转为数组
还有两个有用的数组函数
pop:移除最后项且返回该项
shift:移除起始项且返回该项
这样数组会清空,还有一种更简洁的清空数组方式
for语句
for in语句实现相同的功能
function validateForm(){
var email = document.forms.tutform.elements.email.value;
if(!(/^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/.test(email))){
alert('Please enter a valid e-mail address');
return false;
}
return true;
}
var email = document.forms.tutform.elements.email.value;
if(!(/^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/.test(email))){
alert('Please enter a valid e-mail address');
return false;
}
return true;
}
定义一个函数,需要前三个参数,其余7个是可选的
function myFunction(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10){
// do stuff with arg1
// do stuff with arg2
// do stuff with arg3
if(arg4){
// do stuff with arg4
}
if(arg5 && arg6 && arg7){
// do stuff with arg5, arg6 and arg7
if(arg8){
// do stuff with arg8
}
}
if(arg9 || arg10){
// do stuff with arg9 or arg10
}
}
// do stuff with arg1
// do stuff with arg2
// do stuff with arg3
if(arg4){
// do stuff with arg4
}
if(arg5 && arg6 && arg7){
// do stuff with arg5, arg6 and arg7
if(arg8){
// do stuff with arg8
}
}
if(arg9 || arg10){
// do stuff with arg9 or arg10
}
}
如果参数没有传值则为"undefine",这代表对象不存在。在判断语句中,系统可以把它转换为布尔值"false"。
函数参数中可以传递函数
<script type="text/javascript">
function multiply(){
var out=1;
for(var i=0; i<arguments.length; i++){
out *= arguments[i];
}
return out;
}
function add(){
var out=0;
for(var i=0; i<arguments.length; i++){
out += arguments[i];
}
return out;
}
function doAction(action){
alert(action(1, 2, 3, 4, 5));
}
</script>
<button onclick="doAction(multiply)">Test Multiply</button>
<button onclick="doAction(add)" >Test Add</button>
function multiply(){
var out=1;
for(var i=0; i<arguments.length; i++){
out *= arguments[i];
}
return out;
}
function add(){
var out=0;
for(var i=0; i<arguments.length; i++){
out += arguments[i];
}
return out;
}
function doAction(action){
alert(action(1, 2, 3, 4, 5));
}
</script>
<button onclick="doAction(multiply)">Test Multiply</button>
<button onclick="doAction(add)" >Test Add</button>
若你不清楚函数有多少个参数,可以使用function内置的"arguments"对象,它存在与每个函数里面。
function myFunction(){
for(var i=0; i<arguments.length; i++){
alert(arguments[i].value);
}
}
for(var i=0; i<arguments.length; i++){
alert(arguments[i].value);
}
}
函数中可以包含函数,这为实现js的仿OO提供了基础。
function myFunction(){
function nestedFunction1(arg1, arg2, arg3){
alert(arg1+arg2+arg3);
}
var nestedFunction2 = function(arg1, arg2, arg3){
alert(arg1+arg2+arg3);
}
var nestedFunction3 = new Function('arg1, arg2, arg3', 'alert(arg1+arg2+arg3);');
}
function nestedFunction1(arg1, arg2, arg3){
alert(arg1+arg2+arg3);
}
var nestedFunction2 = function(arg1, arg2, arg3){
alert(arg1+arg2+arg3);
}
var nestedFunction3 = new Function('arg1, arg2, arg3', 'alert(arg1+arg2+arg3);');
}
函数定义有很多种,第三中定义方式很少用,但是很有用。你可以使用字符串定义函数。
字符串
转义字符 \
var n = "The dog took it's bone outside";
var n = 'The dog took it\'s bone outside';
var n = 'The dog took it\'s bone outside';
两者的效果是一样的
常用字符串函数
IndexOf 返回包含指定字符串在另外一个字符串第一次出现的位置,如果不存在则返回-1
lastIndexOf 返回包含指定字符串在另外一个字符串最后一次出现的位置,如果不存在则返回-1
charAt 字符串中指定位置的字符值
substring 获取字符串两个索引间的值
substr 功能和substring类似 第二个参数获取的是所需字符串的长度
例如
alert('This is a Test'.indexOf('T')); // 0
alert('This is a Test'.lastIndexOf('T')); // 10
alert('This is a Test'.charAt(5)); // i
alert('This is a Test'.length); // 14
alert('This is a Test'.substring(5, 9)); // is a
alert('This is a Test'.substr(5, 9)); // is a Test
alert('This is a Test'.toUpperCase()); // THIS IS A TEST
alert('This is a Test'.toLowerCase()); // this is a test
alert('This is a Test'.lastIndexOf('T')); // 10
alert('This is a Test'.charAt(5)); // i
alert('This is a Test'.length); // 14
alert('This is a Test'.substring(5, 9)); // is a
alert('This is a Test'.substr(5, 9)); // is a Test
alert('This is a Test'.toUpperCase()); // THIS IS A TEST
alert('This is a Test'.toLowerCase()); // this is a test
eval 将传入的字符串作为javascript代码执行
eval("alert('Hello, World!')");
数字
NaN 代表 "not a number"
常用函数
parseInt ,parseFloat,toString
数组
两种定义数组的方式
var students = new Array();
students[0] = 'Sam';
students[1] = 'Joe';
students[2] = 'Sue';
students[3] = 'Beth';
students[0] = 'Sam';
students[1] = 'Joe';
students[2] = 'Sue';
students[3] = 'Beth';
var students = ['Sam', 'Joe', 'Sue', 'Beth'];
数组的每个项可以包含任何类型的其他项,如字符串,数字,对象,函数,甚至数组.
var spreadsheet = [
['A1', 'B1', 'C1', 'D1'],
['A2', 'B2', 'C2', 'D2'],
['A3', 'B3', 'C3', 'D3'],
['A4', 'B4', 'C4', 'D4']
];
['A1', 'B1', 'C1', 'D1'],
['A2', 'B2', 'C2', 'D2'],
['A3', 'B3', 'C3', 'D3'],
['A4', 'B4', 'C4', 'D4']
];
通过如下代码访问
var col2 = spreadsheet[1];
alert(col2[2]);
// or
alert(spreadsheet[1][2]);
alert(col2[2]);
// or
alert(spreadsheet[1][2]);
在数组的末尾加入一个新的项
var students = ['Sam', 'Joe', 'Sue', 'Beth'];
students[4] = 'Mike';
students[students.length] = 'Sarah';
students.push('Steve');
// we now have an array with 7 elements: ['Sam', 'Joe', 'Sue', 'Beth', 'Mike', 'Sarah', 'Steve']
students[4] = 'Mike';
students[students.length] = 'Sarah';
students.push('Steve');
// we now have an array with 7 elements: ['Sam', 'Joe', 'Sue', 'Beth', 'Mike', 'Sarah', 'Steve']
splice函数的作用很大 可以用来任意添加或删除数组元素 下面示例用来添加和删除数组项.splice接收了两个参数:起始索引,移除项的数目 .
var students = ['Sam', 'Joe', 'Sue', 'Beth'];
function addStudent(name){
students.push(name);
}
function removeStudent(name){
for(var i=0; i<students.length; i++){
if(students[i].toLowerCase() == name){
students.splice(i, 1);
break;
}
}
}
function addStudent(name){
students.push(name);
}
function removeStudent(name){
for(var i=0; i<students.length; i++){
if(students[i].toLowerCase() == name){
students.splice(i, 1);
break;
}
}
}
我们经常需要将数组转为字符串或字符串转为数组
提供了两个函数
join:将数组转为字符串 每个项之间用一个字符串连接起来
split:将字符串转为数组
var myString = 'apples are good for your health';
var myArray = myString.split('a'); // we break myString apart on every 'a' found.
alert(myArray.join(', ')); // we join myArray back together with a comma so you can see each item
alert(myArray.join('a')); // now we join myArray back together with an 'a' so we get our original string back
var myArray = myString.split('a'); // we break myString apart on every 'a' found.
alert(myArray.join(', ')); // we join myArray back together with a comma so you can see each item
alert(myArray.join('a')); // now we join myArray back together with an 'a' so we get our original string back
还有两个有用的数组函数
pop:移除最后项且返回该项
shift:移除起始项且返回该项
var students = ['Sam', 'Joe', 'Sue', 'Beth'];
while(students.length>0){
alert(students.pop());
}
while(students.length>0){
alert(students.pop());
}
这样数组会清空,还有一种更简洁的清空数组方式
students.length = 0
for语句
var students = ['Sam', 'Joe', 'Sue', 'Beth'];
students['Sam'] = 90;
students['Joe'] = 85;
students['Sue'] = 94;
students['Beth'] = 82;
alert('There are '+(students.length)+' students: '+students.join(', '));
for(var i=0; i<students.length; i++){
alert(students[i]+"'s grade is: "+students[students[i]]);
}
students['Sam'] = 90;
students['Joe'] = 85;
students['Sue'] = 94;
students['Beth'] = 82;
alert('There are '+(students.length)+' students: '+students.join(', '));
for(var i=0; i<students.length; i++){
alert(students[i]+"'s grade is: "+students[students[i]]);
}
for in语句实现相同的功能
var grades = [];
grades['Sam'] = 90;
grades['Joe'] = 85;
grades['Sue'] = 94;
grades['Beth'] = 82;
for(student in grades){
alert(student + "'s grade is: " + grades[student]);
}
grades['Sam'] = 90;
grades['Joe'] = 85;
grades['Sue'] = 94;
grades['Beth'] = 82;
for(student in grades){
alert(student + "'s grade is: " + grades[student]);
}