Javascript-引用类型详解

引用类型

在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;
      }
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351

推荐阅读更多精彩内容

  •   引用类型的值(对象)是引用类型的一个实例。   在 ECMAscript 中,引用类型是一种数据结构,用于将数...
    霜天晓阅读 1,045评论 0 1
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,219评论 0 4
  • 本章内容 使用对象 创建并操作数组 理解基本的 JavaScript 类型 使用基本类型和基本包装类型 引用类型的...
    闷油瓶小张阅读 677评论 0 0
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,132评论 0 13
  • �老婆生孩子后就成了全职妈妈,是孩子妈,也更像我妈了。她现在主要任务就是负责我和孩子的起居吃喝,说不好听了,就是一...
    合眼看世界阅读 357评论 15 17