【JS、二】数组

本文介绍了JavaScript中数组的创建、获取元素及遍历方法,函数的声明、形参与实参、返回值和arguments对象,以及对象的创建与使用。还涵盖了作用域、预解析的概念,包括全局变量和局部变量,以及内置对象如Math和Date的使用。此外,文章还讨论了Array对象的方法和字符串的基本操作。
摘要由CSDN通过智能技术生成

数组的概念:

数组是指一组数据的集合,其中的每个数据被称作元素,在数组中可以存放恩义类型的元素

创建数组:

js创建数组有两种方式:
   //利用new创建数组
   var arr=new Array();
   
   //利用数组字面量创建数组
   var array=[];
  • 我们数组里面的数据一定用逗号隔开
  • 数组中可以存放任意一种类型
获取数组元素:
  • 索引:用来访问数组元素的序号(数组下标从0开始)
 var array=[1,2,3,4];
console.log(array[0])	//1
console.log(array[4])	//没有这个数组元素,所以输出的结果是undefied
  1. 什么是遍历?
    • 把数组中的元素从头到尾访问一次
  2. for里面的i是什么?当什么使用?for里面的数组元素怎么写?
    • i是计数器,当索引号使用,arr[i]
求数组中的最大值:
 var array=[2,6,1,77,52,25,7];
 var max=array[0]; 
 for(var i=1;i<array.length;i++){
    if(array[i]<max){
        max=array[i];
     }
  }

	alert(max)
函数:

函数使用分为两步:
  • 声明函数

    • function 函数名(){

      ​ //函数体

      }

  • 调用函数

    • 函数名();
  1. function 声明函数的关键字 全部小写
  2. 函数是做某件事情,函数名一般是动词
  3. 函数不调用自己不执行
形参和实参:
  • 在声明函数的小括号里面是 形参 (形式上的参数)
    • function 函数名(形参1,形参2)
    • 形参是接受实参的
  • 在函数调用的小括号里面是 实参 (实际的参数)
    • 函数名(实参1,实参2)
函数形参和实参个数不匹配问题:
  • 实参个数等于形参个数 输出正确结果
  • 实参个数多余形参个数 只取到形参的个数
  • 实参个数小雨形参个数 多的形参定义为undefined,结果为NaN
return:
  • return只能返回一个值,给多个值只返回最后一个值
  • 返回多个值,可以用数组包含起来

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MwsGgwcy-1680196841958)(C:\Users\86185\AppData\Roaming\Typora\typora-user-images\image-20211122121301164.png)]

我们的函数如果有return 则返回的是 return后面的值,如果函数没有 return则返回的是undefined

arguments:
  • 只有函数才有arguments对象

  • 里面存储了所有传递过来的实参

function	fn(){
	console.log(arguments);
}
fn(1,2,3);
//利用函数求任意个数的最大值 
function fn(){
   var aa = arguments[0];
    for(var i=1;i<arguments.length;i++){
        if(arguments[i]>aa){
          aa=arguments[i]
         }
     }
        return aa;
 }
    //8
     alert( fn(1,5,7,8));
    //20
    alert(fn(1,8,9,3,20,5))
第二种函数声明方法:
  • 匿名函数
  • var 变量名 = function(){}
var fun=function(aru){
	console.log(aru);
}
fun('666');

fun是变量名,不是函数名
函数表达式也可以进行传递参数
函数表达式声明方式跟声明变量差不多,只不过变量里面存的是值,而函数表达式里面存的是函数
作用域:
  • js作用域:就是代码名字在某个范围内起作用和效果,目的是为了提高程序的可靠性
    • 重要的是减少命名冲突
  • 全局作用域:整个script标签 或者是一个单独的js文件
  • 局部作用域,函数作用域,在函数内部就是局部作用域,代码的名字只在函数内部起效果和作用
全局变量:
  • 在全局作用域中声明的变量
  • 在函数中不用var 声明的变量:num=20;
局部变量:
  • 在函数中使用var修饰的变量是局部变量
  • 形参也是局部变量
  1. 全局变量:在任何一个地方都可以使用,只有在浏览器关闭才会被销毁,因此比较占内存
  2. 局部变量:只在函数内部使用,当其所在的代码块被执行时,会被初始化,当代码块运行结束后,就会被销毁,因此更节省内存空间
预解析:

我们js引擎运行js分为两步:预解析 代码执行

  • 预解析: js引擎吧js里面所有的var 还有function提升到当前作用域的最前面

  • 代码执行:按照代码书写的顺序从上往下执行

预解析分为:(函数提升)(变量提升)
  • 变量预解析(变量提升)
    • 变量提升 就是把所有的变量声明提升到当前的作用域最前面 不提升赋值操作
  • 函数预解析(函数提升)
    • 函数提升 就是把所有的函数声明提升到当前作用域的最前面 不调用函数
什么是对象:

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

对象是由属性和方法组成的

创建对象(3种):

里面的属性或者方法我们采用键值对的形式 键 属性名:值 属性值

多个属性或者方法中间用逗号隔开的

方法冒号后面跟着是匿名函数

  • 利用字面量创建对象{}
    var	obj={
    	uname:'张三丰'
        sayHi:funtion(){
            console.log('hi~');
        }
    }
    
  • 利用new Object 创建对象
    var	obj	=  new  Object();
    obj.uname = '张三丰';
    obj.sayHi = funtion(){
            console.log('hi~');
        }
    
    我们是利用 等号 = 赋值的方法 添加对象的属性和方法
    每个属性和方法之间用 分号
    
  • 我们一次创建一个对象,里面很多的属性和方法是大量相同的 我们只能赋值
    因此我们可以利用函数的方法 重塑这些相同的代码 我们就把这个函数称为构造函数
    又因为这个函数不一样 里面封装的不是普通代码 而是对象
    构造函数 就是我们对象里面一些相同的属性和方法抽象出来封装到函数里面
    
    构造函数语法格式:
    function	构造函数名(){
        this.属性 =;
        this.方法 = function(){}
    }
    
    new	构造函数名();
    
    1.构造函数名字首字母要大写
    2.构造函数不需要return 就可以返回结果
    3.我们要用构造函数必须要new
    
    function	Star(uname,age,sex){
    	this.name = uname;
    	this.age = age;
    	this.sex = sex;
    }
    new Star('刘德华',18,'男');
    ------
    var idh=new Star('刘德华',18,'男');//返回的是一个对象
    console.log(idh);
    console.log(idh.name);
    
使用对象:
  • 调用对象的属性 我们采取 对象名.属性名
console.log(obj.uname);
  • 调用属性还有一种方法 对象名[‘属性名’]
console.log(obj['uname']);
  • 调用对象的方法 sayHi 对象名.方法名() 千万别忘记添加小括号
obj.sayHi();
变量 属性 函数 方法的区别:
  • 变量和属性是相同的 他们都是用来存储数据的
  • 变量 单独声明并赋值 使用的时候直接写变量名 单独存在
  • 属性 在对象里面的不需要声明的 使用的时候必须是 对象.属性
var num = 10;
var obj = {
	age:18,
	fn:function(){
	
	}
}

function fn(){

}
  • 函数和方法的相同点 都是实现某种功能 做某件事
  • 函数是单独声明 并且调用的 函数名() 单独存在的
  • 方法 在对象里面 调用的时候 对象.方法()
  1. 对象:是一个具体的事物
  2. 构造函数:泛指的某一大类
  3. 我们利用构造函数创建出来的对象,称为对象的实例化
    1. 构造函数也可以创建对象
new 在指向时会做4件事:
  • new构造函数可以在内存中创建了一个空的对象
  • this就是指向刚才创建的空对象
  • 执行构造函数里面的代码 给这个空对象添加属性和方法
  • 返回这个对象
遍历对象:

for(变量 in 对象){}

   
	var cu={
        name:'zs',
        sex:'男',
        age:12

    }
    
    for(var a in cu){
     alert(a)		a变量 输出 得到的是 属性名	
     alert(cu[a])	cu[a] 得到是 属性值
    }
内置对象:

js中的对象分为3中:自定义对象,内置对象,浏览器对象

内置对象:J就是指js语言自带的一些对象,这些对象供开发者使用,并提供了一些常用的或是基本而必要的功能

js中提供了多个内置对象:Math,Date,Array,String等

Math

数学对象,不是一个构造函数,所以我们不需要new 来调用,而是直接使用里面的属性和方法即可

   console.log(Math.PI)	//圆周率
   console.log(Math.max(8,99,6))	//最大值
   console.log(Math.random()) //[0 1) 随机数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xcjpXVEs-1680196841960)(C:\Users\86185\AppData\Roaming\Typora\typora-user-images\image-20211124125614416.png)]

Date:
var date=new Date();
常用写法,
var date=new Date(2019,10,1);
var date=new Date('2019-10-01 08:08:08');

//获取Date总毫秒(时间戳)
date.valueof()
date.getTime()
var date= +new Date();
//H5新增的
console.log(Date.now());不用new的,最简单

常用方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hr0YtiFC-1680196841961)(C:\Users\86185\AppData\Roaming\Typora\typora-user-images\image-20211124145913848.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KVodZlp5-1680196841961)(C:\Users\86185\AppData\Roaming\Typora\typora-user-images\image-20211125034656959.png)]

Array:
var	arr1 = new	Array(2);	//这个2表示 数组的长度为2 里面有两个空数组元素

var	arr1 = new	Array(2,3);	//等价于[2,3] 这样写表示 里面有两个数组元素,2和3
检测是否为数组:
//instanceof 运算符 他可以用来检测是否为数组
var	arr= [];
var	obj = {};
console.log(arr instanceof Array);//true
console.log(obj instanceof Array);//false
//(2)
console.log(Array.isArray(arr));//true
console.log(Array.isArray(obj));//false
添加删除数组元素方法:

.push() 在我们数组的末尾,添加一个或者多个数组元素

var arr = [1,2,3];
arr.push(4);	//1,2,3,4

.unshift 在我们数组开头 添加一个或者多个数组元素

var arr = [1,2,3];
arr.unshift(45);	//4,5,1,2,3

pop() 它可以删除数组最后一个元素

var arr = [1,2,3];
console.log(arr.pop());	//返回的是3,删除那个元素返回那个元素
//一次只能删除一个元素
//pop() 没有参数

shift() 它可以删除数组的第一个元素

var arr = [1,2,3];
console.log(arr.shift());	//返回的是1,删除那个元素返回那个元素
//一次只能删除一个元素
//pop() 没有参数

.reverse() 反转数组

var arr = [1,2,3];
arr.reverse();
console.log(arr);

.sort() 数组排序(冒泡排序)

var arr = [1,2,3];
arr.sort();
console.log(arr);

//降序
var arr = [1,2,9,8,7,5,3];
arr.sort(function (a,b){
       return b-a;
  });
console.log(arr);
数组索引方法:

.indexof() 从前往后找

.lastindexof() 从后往前找

//返回数组元素索婷号方法 indexof(数组元素) 作用就是返回该数组元素的索引号
//他只返回第一个满足条件的索引号
//没找到元素  直接返回-1
var arr = [1,2,3];
console.log(arr.indexof(2));
数组去重:
function aa(arr){
       var arra=new Array();
       for(var i=0;i<arr.length;i++){
           if(arra.indexOf(arr[i])===-1){
               arra.push(arr[i]);
           }
       }
    return arra;
   }

   console.log(aa([8,8,9,7,5,6,2,8,6,6,5,1,8]));
数组转换为字符串:

toString() 将我们的数组转换为字符串

var arr = [1,2,3];
console.log(arr.toString());

join(分隔符)

var arr = [1,2,3];
console.log(arr.join('-'));

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WYUjOhLM-1680196841962)(C:\Users\86185\AppData\Roaming\Typora\typora-user-images\image-20211125065311573.png)]

基本包装类型:

就是把 简单数据类型 包装成了 复杂数据类型

字符串:

charCodeAt(index) 返回相应索引号的字符ASCII值

str[index] 获取指定位置处字符

简单数据类型和内存分配:
  • 简单数据类型的数据直接存放在变量(栈空间中)

  • 简单数据类型直接存放栈里面,存放的是数值

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值