数组 & 对象 & 函数

数组

数组也是一个对象,不同的是对象用字符串作为属性名,而数组用数字作为索引,数组的索引从0开始

创建数组:

//方式一:构造器,可以在创建数组时指定	Var arr = new Array(1,2,4,6,7);

//方式二:字面量(推荐),可以在创建数组时指定元素
	Var arr = [1,2,4,6,7];

区别:

 arr1 = new Array(10)   //创建长度为10的数组
 arr2 = [10]             //创建数组,数组只有一个元素10

添加元素

数组名[索引] = 值;
例:arr[0] = 10;

读取元素

//数组名[索引]
arr[0];

数组角标从0开始,如果读取不存在的值,不会报错,而是返回undefined

数组的长度

arr.length

注意:

  • 数组索引从0 开始

  • 如果跳跃式添加元素,中间元素也存在,值为空

  • 数组长度可设定,设置过大自动填充,过小则会截取

  • 数组元素可以为任意数组类型,包括数组、对象和函数

向最后一个位置添加元素:

arr.push("")
//或
arr[arr.length] = 值;

JS数组常用方法

push() :向数组的末尾添加一个或多个元素,并返回新的长度。

unshift() :向数组的开头添加一个或更多元素,并返回新的长度,其他 元素索引也会随之更改

Var arr = [];
var result = arr.push("丸子","莉香");
console.log(arr); //"丸子,莉香"
console.log(result); //2

该方法会将新数组的长度作为返回值返回

pop()删除并返回数组的最后一个元素

shift()删除并返回数组的第一个元素

var result = arr.pop();
console.log(result); //莉香,即删除的对象 
console.log(arr); //"丸子"

数组的遍历

for (var i = 0; i < arr.length; i++) {
    console.log(arr[i]);
}

对象

在JavaScript中,对象是一组无序的相关属性和方法的集合,所有的事物都是对象,例如字符串、数值、数组、函数等。

声明

1、构造器

var obj = new Object();

2、字面量

声明对象可直接添加属性 (属性名:属性值)

//空对象
var obj1 = {}

//声明带属性的对象
var obj = {
    name:"莉香",
    age:23,
    gender:"仙女"
}

字面量赋值用冒号

3、利用构造函数创建对象

function 构造函数名(形参1,形参2,形参3...) {
    this.属性名1 = 参数1;
    this.属性名2 = 参数2;
    this.属性名3 = 参数3;
    this.方法名 = 函数体;
  }
// 工厂函数创建对象 这个把创建好的对象返回给函数调用处
function createPerson(name, age, job) {
    var person = new Object();
    person.name = name;
    person.age = age;
    person.job = job;
    person.sayHi = function(){
        console.log('Hello,everyBody');
    }
    return person;
}
var p1 = createPerson('张三', 22, 'actor');

注意:

  • 构造函数约定首字母大写
  • 函数内的属性和方法前面需要添加this,表示当前对象的属性和方法
  • 构造函数中不需要retrun返回结果

new关键字的作用(面试题)

  • 在构造函数代码开始执行之前,创建一个空对象;
  • 修改this的指向,把this指向创建出来的空对象;
  • 执行构造函数内的代码,给这个新对象添加属性和方法
  • 在函数完成之后,返回这个创建出来的新对象(所以构造函数里面不需要return)

添加/修改属性

//对象.属性名 = 属性值;
var obj = new Object();
obj.name = "丸子";	//添加属性
obj.gender = "男";

//对象['属性']
obj['name'] = "莉香"  //修改属性

js中属性声明和赋是同时进行的

获取对象属性:

对象.属性名
console.log(obj.name); 

读取对象中没有的属性不会报错而是返回undefined

删除对象的属性:

delete 对象名.属性名

使用特殊值作为属性名

不能使用 . 的方式,需要使用另一种方式:

对象名["属性名"] = 属性值

注意:

  • 对象字面量的属性名可以加引号也可以不加,建议不加
  • 属性名和属性值是键值对结构,多个键值对之间使用逗号隔开 ,最后一个键值对之后不要加逗号

遍历

in运算符

检查对象中是否含有指定属性,有则返回true,没有返回fasle

语法:属性名 in 对象

console.log("name" in obj)     //true
//i为数组索引
for(let k in obj){
   console.log(obj[k])
}

of运算符

//item为数组中数据
for(let item in this.books){
    totalPrice += item.price * item.count
}

函数

「1. 函数的概念」
封装了一段可被重复调用执行的代码块,通过函数可以实现大量代码的重复使用。函数是一种数据类型。

函数的声明

1、 通过function关键字定义函数 -- 命名函数

function 函数名() {
    //函数体代码
}

注意:function 是声明函数的关键字,必须小写

2、通过函数表达式定义函数 -- 匿名函数

var fn = function() {};

//调用
fn();
//匿名函数使用的第2种方式--匿名函数自调用
  (function(){
    alert(123);
  })();

注意:

  • fn是变量名,不是函数名,只不过变量存储的是函数
  • 函数表达式创建的函数可以通过 变量名(); 来调用
  • 函数声明后调用才会执行函数体代码

函数的参数

  • 形参:函数定义时候,传递的参数(实参值传递给形参,不用声明的变量)
  • 实参:函数调用时候,传递的参数
  //带参数的函数声明
  function 函数名(形参1,形参2,形参3...) {
    //函数体
  }
  // 带参数的函数调用
  函数名(实参1,实参2,实参3...);

「函数形参和实参数量不匹配时」

参数个数 说明
实参个数等于形参个数 输出正确结果
实参个数多于形参个数 只取到形参的个数
实参个数小于形参 多的形参定义为undefined
function getSum(a, b, c) {
    return a + b + c;
}
// js中形参的默认值是undefined。
// 调用函数
var n = getSum(1, 2);// n = NaN
var n = getSum(1, 2, 3, 4); //1 + 2 +3 = 6

函数的返回值

返回值:函数调用整体代表的数据;函数执行完成后可以通过return语句将指定数据返回 。

// 声明函数
function 函数名() {
    ...
    return 需要返回的值;
    // 1. 函数遇到return会停止执行,并返回指定的值
    // 1. 如果函数没有return 返回的值是undefined
}
// 调用函数
函数名(); //此时调用函数就可以得到函数体内return的值

break & continue & return

  • break: 结束当前的循环体 (如for、while)
  • continue: 跳出本次循环,继续执行下次循环
  • return: 不仅可以退出(函数体内)循环,还能够返回return语句中的值,同时还可以结束当前的函数体内的代码
function breakDown() {
    for (var i = 0; i < 10; i++) {
        if (i == 5) {
            return 1;
        }
        console.log(i);
    }
}
breakDown();	//1
  • return只能结束函数体内的代码
  • 函数如果有return 则返回的是 return 后面的值
  • return d,a,b;返回的是b的值
  • 如果函数没有 return语句,则返回undefined

arguments的使用

当不确定有多少个参数传递的时候,可以用 arguments 来获取。arguments是当前函数的一个内置对象。所有函数都内置了一个 arguments 对象,arguments 对象中存储了传递的所有实参。arguments展示形式是一个伪数组,因此可以进行遍历。

伪数组具有以下特点:

  • 具有length属性

  • 按索引方式存储数据

  • 不具有数组的push,pop等方法

 function fn() {
    //arguments 里面存储了所有传递过来的实参
    console.log(arguments);// [1,2,3...]
    console.log(arguments[1]); // 2
    console.log(arguments.length); // 3
    
    //我们可以按照数组的方式 遍历argument  
  }
  fn(1, 2, 3);

例:

// 用伪数组 实现求最大值
 function getMax() {
    var max = arguments[0];
    for (var i = 1; i < arguments.length; i++) {
      if (arguments[i] > arguments[0]) {
        max = arguments[i];
      }
    }
    return max;
  }
  var result = getMax(1,3,77,5,85)
  colsole.log(result);
posted @ 2020-11-11 23:18  至安  阅读(639)  评论(0编辑  收藏  举报