首页 > 编程知识 正文

递归完成数组的逆序,vba数组遍历

时间:2023-05-05 21:42:41 阅读:135678 作者:628

一。

1.isNaN

是NaN吗

isNaN ) )函数用于检查参数是否为非数值。

console.log(Isnan;

结果:

isNaN () { [native code] }

console.log(Isnan(2);

结果:假

如果检测为数值,则返回false;

console.log(Isnan ) (" Hello " );

结果:真

如果检测为非数值,则为true;

[native code]的意思很明确了。 native的代码

实现的插件函数,而不是JavaScript代码

isNaN也有隐式类型转换、旋转值和严格旋转

console.log(Isnan )“2”);

结果:假

原因:因为isNaN导致隐式转换,旋转数值,并遵循严格的旋转

因此,console.log(Isnan ) (“2a”);

结果为true

2.js中的三大特殊数据

未定义

南大

空值

console.log(Nannan;

结果:假

console.log (undefined==undefined ); //t

console.log(undefined==null ); //t

console.log(Nanundefined;

结果:假

console.log(Nan==null );

结果:假

console.log(undefined===null ); //f

在非严格模式下,如果不编写声明关键字,而是直接为不存在的变量赋值,则变量将自动声明到顶级范围(全局范围)。 (但是,这是不规范的写法,请勿使用。)

二.递归

1 .概念

在一个函数内部执行自己

function fn () }

console.log(1) )。

fn ();

console.log(2)。

}

fn ();

2 .特点

占用内存

低版本的浏览器会导致内存泄漏

编程的想法可以利用递归的思想来解决问题

代码非常简洁

3 .递归解决问题的思想

传递:向内运行

归:向外结束

在黑漆漆的电影院找地方

公式: fn(n )=fn ) n-1 ) 1

传递终点、返回起点: fn(1)=1;

函数fn (n ) {

if(n==1) {

返回1

}else{

返回fn (n-1 ) 1;

}

}

fn(5;

计算n*…32*1

公式: fn(n )=fn(n-1 ) * n

目标: fn(1)=1;

函数fn (n ) {

if(n==1) {

返回1;

}else{

返回fn (n-1 ) *n;

}

}

console.log(fn(4);

1,1,2,3,5,8,13,21…,计算第n个数字

函数fn (n ) {

if(n===1||n===2) {

返回1;

}else{

returnfn(n-1 ) fn (n-2 );

}

}

fn(7;

3 .数组

1 .数组的概念和含义

数据的组合

数据打包、数据有序集合和索引是顺序的

2 .创建数组

字面量

var arr=[];

构造函数

var arr=new Array (

//使用构造函数构建数组,并将数组长度设置为5

vararr=array(5);

使用的构造函数创建数组时,如果只有一个数字数据,则需要创建数组

的长度

3 .使用数组

索引操作(数组的本机操作) )

增:

var arr=[“a”、“b”和“c”;

console.log(arr ) )。

//增加

var len=arr.length;

arr[len]=“hello”

console.log(arr[Len];

结果:

arr[6]=“world”;

console.log(arr[6];

结果:第6位直接添加world

删除:

arr.length=2;

Console.log(ARR.Length );

改:常用

写第几个人就是换第几个人

ARR[1]=“你好”

查:常用

console.log(arr[0] ) ) ) ) ) ) ) ) )。

console.log(arr[1] ) ) ) ) ) ) ) ) )。

console.log(arr[2] ) ) ) ) ) ) ) ) )。

用for循环遍历数组

for(varI=0; iarr.length; I ) {


console.log(arr[i]);
}
4.数组的方法操作
arr.push()
// 功能:末尾新增
// 参数:要新增的数据
// 返回值:新增之后的数组的长度
// 是否改变原数组:是
var res=arr.push(“d”);
// console.log(res);
// console.log(arr);
arr.pop()
pop() 方法将删除 arrayObject 的最后一个元素,把数组长度减 1,并且返回它删除的元素的值。如果数组已经为空,则 pop() 不改变数组,并返回 undefined 值。
// 功能:末尾删除;
// 参数:无;
// 返回值:返回数组最后一位数;
// 是否改变原数组:是
var res=arr.pop();
console.log(res);
console.log(arr);

arr.unshift()
// 功能:开头新增;
// 参数:要新增的数据;
// 返回值:新增之后的数组的长度
// 是否改变原数组:是
var res=arr.unshift(“hello”,“world”);
console.log(res);
console.log(arr);

arr.shift();
// 功能:开头删除;
// 参数:无;
// 返回值:数组的第一个元素
// 是否改变原数组:是;
var res=arr.shift();
console.log(res);
console.log(arr);

arr.splice()
// 功能:删除并且替换
// 参数:第一个参数是要删除的数据与的起点索引,必须写的
第二个参数是要删除几个数据,可选可以写0,则不会删除任意元素,而可以直接新增元素到这个位置
第三个参数,在删除的位置插入数据,可选
…,可插入多条新数据,可选
// 返回值:所删除的数的数组,若未删除则返回空数组
// 是否改变原数组:是
// 删除第一个索引第一个数,并且新增hello,123,asdas
// var res=arr.splice(1,1,“hello”, “123”,“asdas”);
// console.log(res);
// console.log(arr);
// 当第二个参数为0,直接在第一个索引增加"hello", “123”,“asdas”
// var res=arr.splice(1,0,“hello”, “123”,“asdas”);
// console.log(res);
// console.log(arr);

arr.slice()
// 功能:截取一段有范围的数组
// 参数:
// 参数1:数据截取起点
// 参数2:数据截取终点(不包括当前的数据)
// 返回值:截取出的新数组
// 是否改变原数组:否
var res=arr.slice(1,3);
console.log(res);
console.log(arr);
三.方法
1.专指属于某个对象的函数
var obj={
username:“admin”,show:function(){}
}
// console.log(username); 错误的
console.log(obj.username);
console.log(obj.show);
归属
变量如果属于某个对象,不叫变量,叫这个对象的属性
函数如果属于某个对象,不叫函数,叫这个对象的方法
show就称为obj的方法
四、数组的分类
当数组中全是字符时,叫字符数组
[“a”,“b”]
当数组中全是数值时,叫数值数组
[1,2,3]
当数组中全是对象时,叫对象数组(json数组)
[{name:“admin”},{name:“root”}]
// 对象数组
var arr=[{name:“admin”},{name:“root”}];
// 获取数组里面全部的对象
console.log(arr);
// 错误写法,无法获取
console.log(arr.name);
// 取数组下第一个索引,是一个对象
console.log(arr[0]);
// 取数组下第一个对象下的name的值
console.log(arr[0].name);
当数组中全是数组时,叫数组数组(二维数组,多维数组)
[[“a”,“b”],[1,2,3],[{name:“cbdyf”}]]
var arr=[[“a”,“b”],[1,2,3],[{name:“cbdyf”}]]
console.log(arr);
// 打印二维数组下索引1所在的数组
console.log(arr[1]);
// 打印第一层数组索引1的数组里面的索引2的数字
console.log(arr[1][2]);
6.多维数组:
var arr =[[[[1,2,3]]]];
console.log(arr);
console.log(arr[0]);
console.log(arr[0][0]);
console.log(arr[0][0][0]);
// 取3
console.log(arr[0][0][0][2]);

7.复杂数组的操作
逐层解析
五、内存中对数据的存储形式
内存的栈和堆
内存:计算机的运行空间
内存颗粒:一沙一世界
栈:保存的是类似于变量名(地址)
空间小,稳定,不可被修改
先进后出
堆:保存的是值
空间大,可被修改
先进先出
关系:一对一,多对一,没有一对多
数据类型的分类
值传递(基本数据)
内存中,值就是地址,地址就是值
拷贝的是值
引用传递(负责数据)
内存中,地址就是地址,值就是值
拷贝的是地址
引用传递数据的拷贝方式
浅拷贝:拷贝的是地址,修改新数据,会影响老数据
深拷贝:拷贝的是值
先创建一个新的空对象
利用for-in遍历老对象,逐个拷贝老对象的属性到新对象
var a=10;
var b=a;
b=20;
console.log(a);
console.log(b);
var o={
name:“admin”,
age:18,
sex:1
}
// var o2=o;
// o2.name=“root”;
// console.log(o2);
// 引用数据类型被拷贝时,修改新数据,会影响老数据,这种拷贝方式,称为浅拷贝
// console.log(o);
// 对象的专属遍历方式for-in,可以实现深拷贝
var o2={};

for(var key in o){ // 遍历对象中的键 console.log(key); // 遍历对象中的值 // console.log(o[key]); // o的数值全部赋值给o2 // 深拷贝,不拷贝地址,只拷贝值 o2[key]=o[key]; console.log(o2);}o2.name="root";// 不会改变老数据的值console.log(o)console.log(o2)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。