美文网首页
Javascript-引用类型详解

Javascript-引用类型详解

作者: 这个超人不会飞阿 | 来源:发表于2018-07-01 15:20 被阅读13次

    引用类型

    在ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在一起,它也常被称为.

    虽然引用类型与类看起来相似,但它们并不是相同概念.

    对象是某个特定引用类型的实例. 新对象是使用new操作符跟一个构造函数来创建的.

    var person = new Object();
    // 这行代码创建了Object()引用类型的一个新的实例
    

    object类型

    创建Object实例的方式有2种.

    1.第一种是使用new操作符后跟一个构造函数.

    var person = new Object();
    person.name = "supermanBin";
    person.age = 29;
    

    2.第二种是使用对象字面量表示法.

    var person = {
          name  :  "supermanBin",
          age : 29
    };
    // 上面代码等价与下面代码(属性名也可以使用字符串)
    var person = {
          "name"  :  "supermanBin",
          "age" : 29
    };
    var person = {}  ===  var person = new Object()     //True
    

    对象字面量也是向函数传递大量参数可选参数的首选方式

    1.这种传递参数的模式最适合需要向函数传递大量可选参数的情形

    function superman(obj) {
          var out = "";
          if(typeof obj.name == "string") {
          ...
          }
          if(typeof obj.age == "number") {
          ...
          } 
    }
    //调用superman传递对象字面量
          superman({
          name : "supermanBIn",
          age : 30
          });
    

    访问属性使用的"点"和"[]"

          alert(person.name);  //点 访问
          alert(person["name"]); // [] 访问
    

    2.[]的优点-[]可以通过变量来访问属性

    var Name = "Saint";
    alert(person[Name]);
    
    //也可以访问带有空格的属性
    alert(person["superman Bin"]);
    
    

    结束语: 能用访问尽量不要使用[]访问.

    Array()类型

    引言:

    ECMAscript中的数组与其他语言的数组存在相当大的区别.
    不同之处:
    1.ECMAscript数组的每一项可以保存任何类型的数据(也就是说第一个位置可以保存字符串,第二位置可以保存数值,第三位置可以保存对象....)
    2.ECMAScript数组的大小是可以动态调整的

    创建数组基本方式有2种

    1.使用new加Array()操作符

    var colors = new Array();
    var colors = new Array(20);
    var colors = new Attay("a", "b", "c");
    var colors = new Array(3);      //创建一个包含3项的数组
    var colors = new Array("Supermanbin");    //创建包含一项的数组
    

    另外在使用Array构造函数时候也可以省略new操作符.

    var colors = new Array(3);     
    var colors = new Array("Supermanbin");   
    //上面 代码等价于下面代码
    var colors = Array(3);     
    var colors = Array("Supermanbin");  
    

    2.使用数组字面量表示法

          var colors = ["a", "b", "c"];
          var name = [];
          var error1 = [,,];     //不要这样 会创建包含2或3项的数组
          var errpr2 = [1,2,]  //不要这样 会创建包含2或3项的数组
    

    数组特性

    数组的length属性很有特点----它不是只读的.

         var colors = ['a', 'b', 'c'];
         colors.length = 2; //colors原来的length是3  现在改为2
         alert(colors[2]); //undefined
    // 这个例子的数组colors一开始有3个值,将其属性设置为2会移除最后一项,结果就显示undefined.如
    // 如果将其设置大于数组项数的值,则新增的每一项都会取得undefined的值
         var colors = ['a', 'b', 'c'];
         colors.length = 4;
         alert(colors[3]); //undefined
    

    增加数组新项.

          var colors = ['a', 'b', 'c'];
          colors[colors.length] = 'd';
          colors[colors.length] = 'e'; // colors === a b c d e
    

    检测数组

    • 第一种是 if (value instanceof Array) {} //有缺点,从A框架传入B框架的数组不行iframe 一个页面/一个框架可以使用
    • 第二种if (Array.isArray( values )) {} // ES5新增的Array.isArray(value)方法 推荐使用

    转换方法 toLocaleString() toString() valueOf()

    1.调用valuesOf()返回的是数组的本身
    2.调用toString()返回由数组每一项的字符串形式拼接而成以逗号分隔的字符串.(实际上创建这个字符串,会调用数组每一项的toString方法)
    3.调用toLocaleString()返回由数组每一项的字符串形式拼接而成以逗号分隔的字符串.(实际上创建这个字符串,会调用数组每一项的toLocaleString方法) toString()与toLocaleString()返回的结果一样

    var person1 = {
          toLocaleString : function () {
                 return "a";
          },
          toString : function ()  {
                return "b";
          }
     };
    
    var person2 = {
          toLocaleString : function () {
          return "c";
          },
          toString : function () {
          reutrn "d";
          }
    };
    var person = [person1, person2];
    alert(person); // b d
    alert(person.toString()); // b d
    alert(person.toLocaleString());  // a c
    

    join()
    toLocaleString() toString() valueOf()方法默认情况下都会以逗号分隔的字符串形式返回数项组,而使用join()方法,则可以用不同的分隔符来构建这个字符串.

          var colors = ["a", "b", "c"];
          alert(colors.join(",")); // a,b,c
          alert(colors.join("#")); // a#b#c
    

    栈方法
    栈是一种LIFO(后进先出)的数据结构,也就是最新添加的最早被移除.而栈的插入(叫做推入)和移除(叫做弹出),值发生在一个位置--栈的顶部.ECMAScript为数组专门提供了push()pop()方法,以便实现类似栈的行为.

    • push() 参数: 接受任意数量参数 功能:逐个添加到数组末尾 返回: 修改后数组长度
    • pop() 参数:无 功能:从数组移除最后一项 返回:返回时移除的项

    队列方法
    队列是FIFO(先进先出)的数据结构.

    • shift( )返回:移除的项
    • unshift() 返回:修改后数组长度

    重排序方法

    • reverse() //反转数组 这个方法相当直观明了,但是不够灵活 所以才有了sort()方法
    • sort() //sort比较的是每一项的字符串,这种排序很多情况都不是最佳选择,因为sort()可以接收一个比较函数作为参数(比较函数接收2个参数)
    • 比较函数-比较函数有2个参数,如果第一个参数应该位于第二个参数的之前则返回一个负数,如果2个参数相等则返回0,如果第一个参数应该位于第二个参数之后则返回一个正数,以下就是一个比较函数
          function compare(value1, value2) {
                if (value < value2) {
                return -1;
                } if (value == value2) {
                return 0;
                } else {
                 reutrn 1;
                }
          }
    
          var values = [0,1458,45,2,56,4];
          values.sort(compare);
          alert(values); // 0 2 4 56 1458
    
          简易写法:
          function compare(value1, value2) {
                return value1 - value2;
          }
    

    相关文章

      网友评论

          本文标题:Javascript-引用类型详解

          本文链接:https://www.haomeiwen.com/subject/jemrwxtx.html