数组--属性原理详解

Posted wssjzw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组--属性原理详解相关的知识,希望对你有一定的参考价值。

数组 (属于对象)---其能够实现的功能都是由函数方法写的
  1、定义:<1>可以记录一组数据 <2>编号从零开始
    1. var array = [1,2,3]; /*变量声明式定义*/
    2. var array=new Array(1,2,3); /*对象的形式来定义*/
    3. var array=[]; array[0] =1; array["name"] ="王五"; /*参数定义法*/
   第1、2种定义方式有区别 方法2效率高 原因:第1种方法是先检测类型 帮助我们创建new Array(1,2,3)对象;
   数组是隶属于Object类型对象 如果不new先检测 然后自动帮助我们创建数组对象
   string为基本类型 string类型 所以 它只检测 不过不创建String对象

2、Delete Push Unshift三个属性的功能
    1.delete arry[0]; 稀疏数组 中间开头 数组中可能存在没有值 或者为null的情况
    2.arry.push(); 往数组的末尾添加元素
    3.arry.unshift(); 往数组的开头添加元素
    4.arry.length -= 1; 第二种删除方式 删除最后一个数组值

3、 输出数组:
    1. for循环输出数组
      <1>for(var i=0;i<n;i++){ console.log(arr[i]); }
      <2>for(var i in Array){ console.log(arr[i]); }
      <3>简单的for循环只能循环出来 数组里面的值 包含稀疏数组 但循环不出对象属性
     for...in 循环能够循环出来对象属性 可循环不出来稀疏数组

4、Prototype 就是指在 原型链 上存在的 对象属性
    1. 给指定数组直接添加对象属性 var array = {}; array.prototype.x = type;(type可以是数字 也可以是字符串)
    2. 直接给数组添加方法 Array.prototype.name = function name(){};
    数组也是由一个个方法组合而成,利用prototype可以自己组建想要方法来 规定 数组 的功能

5、数组的浅度拷贝 和 深度拷贝------- 栈===>>堆
     1. 如果要对象不能相互影响,那么不能用等号 因为会指向同一个堆,导致改变一个的同时会影响另一个
      <1> 如果数组想要解决这个问题 加一个concat可以解决
        数组1 = 数组2.concat();
      <2> 如果对象想要解决这个问题 因为对象没有concat属性 那么我们通过Object.assign来重新创建一个对象
        var arry = Object.assign([],hero) ----- 拷贝数组
        var arry = Object.assign({},hero) ----- 拷贝对象

6、稀疏数组
    1. 稀疏数组 真实存在的值 要比索引值小
      [empty,5,empty]
    2. 当创建组的时候 给出一个参数 那么 就是说 目前数组长度为5
      var new_arry=new Array(5);
    3. 通过in参数 可以来判断 这个索引 是否有值
      console.log(5 in new_arry);

7、二维数组:var db_arry = new Array(1,2,3,new Array(1,2,3));
    调用:db_arry[3][1];一般由双重for循环

8、数组的方法

  //join 将一个数组转换为字符串

 

var arry = [1,2,3,4];
console.log(arry);
var str = arry.join();
console.log(str);

 

  //eval 把一个字符串转换为数组

var arry = "[1,2,3,4]";
console.log(arry[0]);  //报错
console.log(eval(arry)[0]);  

  //concat 拼接数组 不会改变原数组

var ay1=[1,2,3];
var new_a = ay1.concat[[3,4,5],[7,9,8]];
console.log(new_a);    

  //reverse 反转 会改变原数组

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

  //sort 排序 默认是从小到大来进行排序 会改变原数组

var b = [4,5,2,3,1];
console.log(b.sort());
console.log(b);

  //如何从大到小排序

   1.方法里面会有两个参数a ,b a代表后面的数,b代表前面的数 a-b>0 升序、a-b<0 降序 改变原数组 

      2.  如果数组中含有汉字或者字母 按照 阿斯克码表排序

  b.sort( function(a,b){
      return a-b<0;
  } )

  //slice 切片里面接的索引值 (开始索引值,结尾索引值) 不会改变原数组

var ay=[1,2,3,4,5,6,7,8,9,10];
var y=ay.slice(5); //从第五个开始往后
console.log(ay.slice(6,9); // [6,9)
console.log(ay.slice(-1);
console.log(y.slice(-3,3);    // 无交集 切出来为null

  //获取第一个元素和最后一个元素

console.log(y.slice(0,1);
console.log(y.slice(-1);

  //splice 高级数组功能 对数组进行增、删 改变原始数组
      1.如果splice给出一个参数 那么就能 获取数组中 从0到指定索引值内的数组
      2.如果splice给出两个参数 那么就相当于将指定位置切除(索引开始,数量)
      3.如果splice给出三个参数 将第一参数到第二参数的数组值 替换成 第三个参数

     [索引开始,索引闭合] 皆闭合

var ay=[1,2,3,4,5,6,8,7];
ay.splice(5);    //从0到指定索引值内的数组
ay.splice(1,2);    //那么就相当于将指定位置切除
ay.splice(1,2,"a");    //将第一参数到第二参数的数组值 替换成 第三个参数
ay.splice(0,1);    //截取出去第一个元素
ay.splice(0,1,100);    //截取出去第一个元素,并替换为100
ay.splice(-5); //从0到-5对应的值的数组
console.log(ay);    //原数组改变后的
var aty= ay.splice(1,2,"a","b"); //将第一参数到第二参数的数组值 替换成 第三个参数
console.log(aty);    //改变的值

 

1、为什么字符串创建时,不需要new String;而一般 数组创建的时候需要new Array();?
  因为数组是隶属于Object类型对象 如果不new先检测 然后自动帮助我们创建数组对象
  不顾string为基本类型 string类型 所以 他只检测 不过不创建String对象
  一般 数组new的过程 是提高效率的过程

字符串类型转化为 "字符串对象"的情况 可以使用new String;

2、begin = begin || 0; 如果begin未赋值,则begin为0;

3、对象冻结:this在函数中可以调用 但不能赋值

















































以上是关于数组--属性原理详解的主要内容,如果未能解决你的问题,请参考以下文章

中等难度Vue 面试题+详解答案

Spring IoC原理详解

VSCode自定义代码片段—— 数组的响应式方法

VSCode自定义代码片段10—— 数组的响应式方法

vue生命周期详解

20160212.CCPP体系详解(0022天)