js基础(递归,数组的创建,数组方法)

保存对代码的热爱,并保存怀疑态度
isNAN 是不是nan,自带隐式转化,如果是“123”,会自动转换为123,结果就是false

js的三大数据类型
undefined
NaN
null

NaN不等于 null,undefined包括他自己

underfined 等于mull
三等于
=不等

null加+1=1

undefined+1=NaN

// 非严格模式下,不写声明关键字,直接给不存在的变量赋值
会自动将变量声明到顶层作用域(全局作用域)(但这是不规范的写法,不要使用)

递归:

在一个函数的内部,执行自己

特点

  • 占内存
  • 低版本浏览器中会造成内存泄漏
  • 编程思路,可以利用递归的思想,解决问题
  • 代码非常简洁

递归解决问题的思想

  • 递:向内执行
  • 归:向外结束

有来有回,return;

  1. 概念

    • 在一个函数的内部,执行自己

      function fn(){
          console.log(1)
          fn();
          console.log(2)
      }
      fn();
      
  2. 特点

    • 占内存
    • 低版本浏览器中会造成内存泄漏
    • 编程思路,可以利用递归的思想,解决问题
    • 代码非常简洁

递归解决问题的思想

  • 递:向内执行

  • 归:向外结束

  • 电影院中,找座位

    • 公式:fn(n) = fn(n-1) + 1
    • 递的终点,归的起点:fn(1) = 1
        function fn(n){
            if(n === 1){
                return 1   //第一位的话之间返回
            }else{
                return fn(n-1) + 1;     //前一位加现在这一位
            }
        }
        fn(5);
    
  • n*...*3*2*1

    • 公式:fn(n) = fn(n-1) * n
    • 终点:fn(1) = 1;
        function fn(n){
            if(n === 1){
                return 1;
            }else{
                return fn(n-1) * n;
            }
        }
        fn(4);
    
  • 1,1,2,3,5,8,13,21...,计算第n位的数字

    • 公式:fn(n) = fn(n-1) + fn(n-2) //前一位加再前一位
    • 终点:fn(1) = 1; fn(2) = 1;
        function fn(n){
            if(n === 1 || n === 2){
                return 1;
            }else{
                return fn(n-1) + fn(n-2);
            }
        }
        fn(7);
    

数组的创建

   字面量创建
var arr=[3];
     构造函数 通过new Array 来创建
var arr=new Arraty(12);  构造函数里放单个数字的时候表示这个数组的长度
var arr=new Arraty(11,1,12);

☆任何两个对象都不相等(就算两个对象的值一样也不会相等),只要两个对象相等了,这两个对象是同一个

// 内置函数,也是一种特殊的对象
// Array()
// String()
// Number()
// Boolean()
// Object()
// Function()

字面量函数的增删改查

索引加长度

增(向后增)
// var li=arr.length;
// arr[li]=“hello”;
// console.log(arr);

可以定一个变量然后把数组的长度放进去,然后增加值
// var li=arr.length;
// arr[li]=“hello”;
// console.log(arr);

或者可以直接数组加第几位直接放入(可以跳着来);如果放入已经被占有的索引会将其覆盖
arr[8]=“word”;
console.log(arr);


arr.length=5(保留几位)
console.log(arr.length);
console.log(arr);


arr[1] = “hello”;
直接数组第几位重新赋值就可以了

查询
就直接正常查

// console.log(arr[0])
// console.log(arr[1])
// console.log(arr[2])

// console.log(arr[0]);
// console.log(arr[arr.length-1]);

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

数组方法

方法名 对应版本 功能 原数组是否改变
concat() ES5- 合并数组,并返回合并之后的数据 n
join() ES5- 使用分隔符,将数组转为字符串并返回 n
pop() ES5- 删除最后一位,并返回删除的数据 y
shift() ES5- 删除第一位,并返回删除的数据 y
unshift() ES5- 在第一位新增一或多个数据,返回长度 y
push() ES5- 在最后一位新增一或多个数据,返回长度 y
reverse() ES5- 反转数组,返回结果 y
slice() ES5- 截取指定位置的数组,并返回 n
sort() ES5- 排序(字符规则),返回结果 y
splice() ES5- 删除指定位置,并替换,返回删除的数据 y
toString() ES5- 直接转为字符串,并返回 n
valueOf() ES5- 返回数组对象的原始值 n
方法要关注的内容有:功能,参数,返回值,是否改变原数据

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


// arr.pop()
// 参数:无
功能:末尾删去,一个pop表示一个索引删去
参数:无
返回值:删除的值
是否改变原数组:是
// var res = arr.pop();
// var res = arr.pop();
// var res = arr.pop();
// var res = arr.pop();
// console.log(res)

  arr.shift()
功能 数组最前面(也就是从前往后删除)删去,一个shift表示一个索引删去
参数:无
返回值:删除的值
是否改变原数组:是
    // arr.shift(3);
// var res = arr.shift();
// var res = arr.shift();
// var res = arr.shift();
// console.log(res);

  arr.unshift();
// arr.unshift();
// var res = arr.unshift("hello","world");
// console.log(arr)
// console.log(res);

功能 数组最前面(也就是从前往后新增,一个shift表示一个索引;
参数:新增的值
返回值:新增后的数组的长度
是否改变原数组:是


// arr.splice();
// 功能:删除并替换
// 参数:
     第一个参数:要删除数据的起点索引,必传
    第二个参数:删除的数据的个数,可选
     第三个参数:在删除的位置插入数据,可选
     ...:删除的位置要插入数据,可选
   返回值:删除的个数,没有删除返回空数组;
       是否改变原数组:是

    // arr.splice();
    // var xc= arr.splice(3,3,"新来的");
    // console.log(arr);
    // console.log(xc);


    // 灵活运用,表示从第三个开始新增,删除0个
    // var vc=arr.splice(3,0,"sdfdhufshushf");
    // console.log(arr);
    // console.log(vc)

arr.sort(function(){
return a-b;
})

var arr2 = [23,65,13,146,9,78];
console.log(arr2)
// 功能:排序,默认排序规则:字符的排序规则,逐位比较
// 参数:
    // 函数
        // 这个函数又接收了两个参数
        // 这个函数需要有返回值
            // 返回值是两个参数之差

方法的返回值:排序后的数组;
是否改变原数组:是

var xc=arr.sort(function(a,b){
    return a-b;
});
console.log(xc);
console.log(arr)

.reverse()
功能:颠倒数组中元素的顺序;
参数:无;
方法的返回值:颠倒后的数组;
是否改变原数组:是

toString()

功能:转换成字符串,类似于没有参数的join()。
该方法会在数据发生隐式类型转换时被自动调用,如果手动调用,就是直接转为字符串。;
参数:无;
方法的返回值:转换后数组;
是否改变原数组:否

valueOf()
功能:返回数组的原始值(一般情况下其实就是数组自身
一般由js在后台调用,并不显式的出现在代码中;
参数:无;
方法的返回值:本身;
是否改变原数组:否

// arr.slice();
// 功能:截取指定位置的数据
// 参数:
//     参数1:起点
//     参数2:终点(不包括)
// 返回值:截取出的新数组
// 是否改变原数组:否
var res = arr.slice(2,5);
console.log(res);

arr.concat()
功能:连接两个数组;
参数:要连接的数组名;
方法的返回值:连接后 的数组;
是否改变原数组:否

 var xc=arr.concat(arr1);
console.log(xc);
console.log(arr);

arr.join()
功能:根据指定分隔符将数组中的所有元素放入一个字符串,并返回这个字符串。
参数:join(str);参数可选,默认为","号,以传入的字符作为分隔符。;
方法的返回值:改变后的数组(是字符串类型);
是否改变原数组:否

var arr = [1,2,3];
console.log(arr.join());         //1,2,3
console.log(arr.join("lo"));      //1-2-3
console.log(arr);                //[1,2,3]---原数组未改变
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

划水的乌贼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值