1.JavaScript函数
函数是由时间驱动的或者当它被调用时执行的可重复使用的代码块
语法:function 函数名(参数1,参数2,…){
函数内容语句(函数体)
}
函数命名规则与变量命名规则相同
括号内的参数被称作形参
通过函数名调用函数执行
2.函数声明
① function命令,语法:function 函数名(参数1,参数2,…){ 函数体; }
这种方式声明的函数可以通过函数名进行调用函数
② 函数表达式,语法:var 变量 = function(参数1,参数2,…){ 函数体; };
这种方式声明的函数没有函数名,而是用变量来指代函数,通过访问变量进行调用函数(变量();)
③ Function构造函数,语法:var 变量 = new Function();
这种声明函数的方式很不直观,较少使用
3.函数调用
通常情况下,只要函数已经被声明,直接写出函数名和函数参数即可调用函数
多次声明同名函数时,后声明的函数会覆盖先声明的函数
通过function命令声明的函数,书写代码时可以将函数调用写在函数声明之前,因为JavaScript中存在一个隐式的函数提升(其他方式不行)
<html lang="en"> <head> <meta charset="UTF-8"> <title>Function</title> </head> <body> <script> var arr=[23,12,43,25,45,66]; compare(arr); function compare(array) { var max=array[0]; for (var i=1;i<array.length;i++){ if (array[i]>max){ max=array[i]; } } console.log(max); console.log(array.indexOf(max)); } </script> </body> </html>
4.函数类型
无参数无返回值
无参数有返回值
有参数无返回值
有参数有返回值
返回值,函数执行结束后,返回到原本程序中函数所在的位置,用来替代整个函数的结果,通常使用 return关键词来实现
形式参数,在定义函数时写在小括号内的参数,形式参数只在函数内部使用,不需要声明
实际参数,在调用函数时写在小括号内的参数
5.函数作用域
JavaScript 中只有两种作用域(scope):
全局作用域,整个程序
函数作用域,函数内部
和作用域相对应的,JavaScript中有两种变量:
全局变量(global variable),在函数外声明的变量,可以在函数内部(全域)读取
局部变量(local variable),在函数内部声明的变量,只能在函数内部使用
6.函数其他说明
ECMAScript规定,不能在非函数的代码块中声明函数,如 if(参数){ function 函数名(){}; } 这种声明方式是错误的!
可以使用 name属性来获取函数名,如 函数名 .name; 返回值为函数名
可以使用 length属性来获取函数参数的个数,如 函数名 .length; 返回值为参数个数
还有一种特殊的函数叫作自执行函数,其不需要调用就能够自动执行,语法 (function(){ 函数体; }()); 或 (function(){ 函数体; })();
7.JavaScript对象
对象(object)是用大括号定义的无序的数据集合,由键值对构成
键与值之间用冒号分隔,大括号末尾使用分号表示对象定义结束
语法:var obj = { key : value}; ,其中 key是键名、value是键值
如果一个对象内部包含多个键值对,每个键值对之间使用逗号分隔,最后一个键值对末尾不需要添加逗号
8.键名(对象属性)
键名也被成为属性(property),对象的所有属性都是字符串,所以键名可以不加引号
但是,如果属性不符合标识符的条件规则,如以数字开头、含有空格或运算符等,则必须使用引号
示例:var obj = { '1S':sa, 'S Y':nice, 'm+n':number}
JavaScript的保留字可以不加引号直接作为对象的属性使用
9.键值
键值是属性所对应的具体值,可以是任何数据类型
如果一个属性的值(ability)为函数,通常把这个属性称为 方法,可以向函数一样调用这个属性(方法)
语法示例: var obj = {ability:write()}; ,调用属性:obj .ability();
10.创建对象
三种创建方式:
① 直接使用大括号创建对象(最常用),如 var obj={ };
② 使用 new命令生成一个 Object对象的实例(构造函数的写法),如 var obj= new Object();
③ 使用 Object .create方法创建对象(适用于需要对象继承的场景),如 var obj= Object .create(null);
11.对象的读写
① 属性读取:
读取属性的两种方法:一种是使用点号运算符,二种是使用方括号运算符
语法:var obj = {key:value};
console.log(obj .key);
console.log(obj['key']);
需要注意的是使用方括号读取对象属性时必须加引号!
访问不存在的属性时,返回值为“undefined”
② 属性写入
点号运算符用来为对象的属性写入值
语法:var obj = {};
obj .key=value;
console.log(obj.key);
点号和中括号运算符都可以用于为对象属性赋值,当属性不存在时添加属性,当属性存在时修改属性
③ 中括号与点号的区别
中括号运算符总是能替代点号运算符,但点号运算符却不一定能替代中括号运算符,体现在如下三点:
中括号运算符可以使用字符串变量的内容作为属性名,点号运算符不可以
示例: var obj={name:'Meci', age:21};
var str='age';
console.log(obj.str); //不可以
console.log(obj[str]); //可以
中括号运算符可以使用纯数字作为属性名,点号运算符不可以
示例:var obj={};
obj[1]='first'; //可以
obj.2='second'; //不可以
中括号运算符可以使用js关键字和保留字作为属性名,点号运算符不可以,通常规避关键字和保留字
12.对象的操作
Object.keys(),获取对象所有属性,
语法:Object.keys(对象名);,返回值为属性构成的数组
delete,删除一个属性,
语法:delete obj.property;,返回值为Boolean(true/false)
delete方法直接改变原始对象内容,删除后再读取该属性时返回值为“undefined”
delete对应的属性不存在时,不会报错,且返回值为 true
in,检查对象是否包含一个属性
语法:'property' in obj;,返回值为布尔值,true(包含) 或 false(不包含)
for in,遍历对象所有属性
语法:for (var prop in obj){ console.log(obj[prop]); },此处使用 [ ] 访问,返回值为对象属性值
with,同时操作多个对象属性
语法:with (对象名){ key1:value1; key2:value2; }
注意,with只能操作对象中已经存在的属性,不能添加属性
13.对象的引用
如果不同的变量名指向同一个对象,那么它们都成为这个对象的引用
所有变量引用对象时都是引用的该对象的内存地址,不同于基础数据的引用(直接引用值)
因此,修改其中一个变量所指向的对象的值,会影响到所有指向该对象的变量