WEB前端第二十七课——js函数与对象

  • A+
所属分类:Web前端
摘要

1.JavaScript函数  函数是由时间驱动的或者当它被调用时执行的可重复使用的代码块

1.JavaScript函数

  函数是由时间驱动的或者当它被调用时执行的可重复使用的代码块

  语法:function  函数名(参数1,参数2,…){

      函数内容语句(函数体)

     }

  函数命名规则与变量命名规则相同

  括号内的参数被称作形参

  通过函数名调用函数执行

2.函数声明

  ① function命令,语法:function  函数名(参数1,参数2,…){ 函数体; }

    这种方式声明的函数可以通过函数名进行调用函数

  ② 函数表达式,语法:var  变量 = function(参数1,参数2,…){ 函数体; };

    这种方式声明的函数没有函数名,而是用变量来指代函数,通过访问变量进行调用函数(变量();)

  ③ Function构造函数,语法:var  变量 = new  Function();

    这种声明函数的方式很不直观,较少使用

3.函数调用

  通常情况下,只要函数已经被声明,直接写出函数名和函数参数即可调用函数

  多次声明同名函数时,后声明的函数会覆盖先声明的函数

  通过function命令声明的函数,书写代码时可以将函数调用写在函数声明之前,因为JavaScript中存在一个隐式的函数提升(其他方式不行)

 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.对象的引用

  如果不同的变量名指向同一个对象,那么它们都成为这个对象的引用

  所有变量引用对象时都是引用的该对象的内存地址,不同于基础数据的引用(直接引用值)

  因此,修改其中一个变量所指向的对象的值,会影响到所有指向该对象的变量