ECMAScript从技术来说是一门面向对象的语言,但不具备传统的面向对象语言所支持的类和接口等基本结构。虽然引用类型与类看起来类似,但是他们并不是相同的概念。引用类型有时也被成为对象定义,因为它描述的是一类对象所具有的属性和方法。

Object类型

创建Object实例的方式有两种。第一种是使用new操作符后跟Object构造函数;另一种是使用对象字面量表示法。也就是说new Object()等价于{},示例代码如下所示:

//使用new操作符后跟Object()方式
var person=new Object();
person.name='binghuojxj';
person.age=29;
//使用对象字面量方法
var car={
    name:'BMW',
    Num:4
        };
//访问对象的属性也可以使用方括号表示法
alert('person.age='+person["age"]+'\r\n'+'car.name='+car["name"]);

输出结果如下所示:

Array类型

ECMAScript中的数组与其它多数语言的的数组有着相当大的不同。具体特点如下:

  1. 数组是数据的有序列表但是数组每一项可以保存任何类型的数据;

  2. 数组的大小是可以动态调整的。

创建数组的方式有两种:使用Array构造函数和数组字面量表示法。示例代码如下所示:

//直接使用Array构造函数,传递数组元素个数参数
var colors=new Array(4);
//直接使用Array构造函数,传递数组元素
var nums=new Array('34');
//直接使用Array构造函数,可以不加new操作符
var names=Array('jxj','wsc','my');
//使用数组字面量表示法
var types=['Number','String','Undefined','Null','Object','Boolean'];

ECMAScript数组提供了表现像栈一样(是一种后进先出的数据结构,简称为LIFO),对应的方法分别是push()方法和pop()方法。push()方法可以接受任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组的长度;而pop()方法则从数组末尾移除最后一项,减少数组的length值,返回被移除的项。与栈对应的数据结构是队列(队列在末端添加数据,从前端删除数据),实现操作的方法是push()方法和shift()方法。push()方法同上,shift()方法则从数组开始移除第一项,减少数组的length值,返回被移除的项。示例代码如下所示:

var names=['jxj','lhy','my'];
//通过push方法向数组末尾添加一项
var currentLength=names.push('mht');
alert('当前数组长度:'+currentLength);
//通过pop方法向删除数组末尾一项
var delVal=names.pop();
alert('当前数组元素:'+names+'被删除元素'+delVal);
//通过shift方法删除数组第一项
delVal=names.shift();
alert('当前数组元素:'+names+'被删除元素'+delVal);
//通过unshift方法在开始添加任意项并返回修改数组的长度
currentLength=names.unshift('lrp','zy');
alert('当前数组长度:'+currentLength);
alert(names);

数组操作中经常要用到定义某一元素在数组中的位置,这对应两个位置的方法:indexOf()和lastindexOf()。其中indexOf()方法从数组的开始位置(位置0)开始向后查找,而lastIndexOf()方法从数组的末尾开始向前查找。要查找的项必须符合全等的条件(===),若没有找到符合的项目方法均返回-1。示例代码如下所示:

var numbers=[1,2,3,4,5,4,3,2,1,0];
//测试indexof方法
alert(numbers.indexOf(3));
//测试lastindexof方法
alert(numbers.lastIndexOf(3));
//测试元素不存在的情况
alert(numbers.indexOf(7));

Date类型

下面是创建Date对象的4种方式,如下代码所示:

var d = new Date();
var d = new Date(milliseconds);
var d = new Date(dateString);
var d = new Date(year, month, day, hours, minutes, seconds, milliseconds);

若要显示当前日期,使用“2014-09-03 15:12:24”格式,对应的代码如下:

function CurentTime()
    {
        var now = new Date();
        var year = now.getFullYear();      //年
        var month = now.getMonth() + 1;     //月
        var day = now.getDate();            //日
        var hh = now.getHours();            //时
        var mm = now.getMinutes();          //分
        var second=now.getSeconds()         //秒

        var clock = year + "-";
        if(month < 10)
            clock += "";
        clock += month + "-";
        if(day < 10)
            clock += "";
        clock += day + " ";
        if(hh < 10)
            clock += "";
        clock += hh + ":";
        if (mm < 10) clock += '0';
        clock += mm+":";
        if (second < 10) clock += '0';
        clock += second;
        return clock;
    } 

因为Date对象的方法比较多,因此使用Date对象的方法时要特别注意方法返回的值的范围。Javascript中Date方法与C#种方法区别较大,注意方法返回值的范围,进而转化为日常使用的格式。

Function类型

函数的内容较多,下面将需要理解的要点全部列出来:

  1. 函数是对象,每个函数其实都是Function类型的实例;
  2. 函数名实质上是指向函数的一个指针。函数名为指针,函数名后加()表示调用函数;
  3. 函数没有重载;
  4. 函数名本身就是变量,所以函数可以作为值来使用;
  5. 函数内部agruments对象的callee属性指向拥有agruments对象的指针;
  6. 函数有两个非继承而来的方法apply()和call(),这个可以扩充函数赖以生存的作用域;
  7. 函数的prototype属性在实现自定义引用类型和继承时具有重要作用;

《JavaScript高级程序设计》读书笔记--(3)引用类型的更多相关文章

  1. javascript高级程序设计读书笔记-事件(一)

    读书笔记,写的很乱   事件处理程序   事件处理程序分为三种: 1.html事件2. DOM0级,3,DOM2级别  没有DOM1 同样的事件 DOM0会顶掉html事件   因为他们都是属性  而 ...

  2. javascript高级程序设计读书笔记----引用类型

        Array类型. ECMAScript数组的每一项可以保存任何类型的数据. 数组大小是可以动态调整的. 创建数组第一种基本方式方式: 使用Array构造函数 var colors = new ...

  3. javascript高级程序设计读书笔记

    第2章  在html中使用javascript 一般都会把js引用文件放在</body>前面,而不是放在<head>里, 目的是最后读取js文件以提高网页载入速度. 引用js文 ...

  4. Javascript高级程序设计读书笔记(第六章)

    第6章  面向对象的程序设计 6.2 创建对象 创建某个类的实例,必须使用new操作符调用构造函数会经历以下四个步骤: 创建一个新对象: 将构造函数的作用域赋给新对象: 执行构造函数中的代码: 返回新 ...

  5. JavaScript高级程序设计 读书笔记

    第一章 JavaScript 简介 第二章 Html中使用JavaScript 第三章 基本概念 第四章 变量,作用域,内存 第五章 引用类型 第六章 面向对象 第七章 函数表达式 第八章 BOM 第 ...

  6. 《JavaScript高级程序设计》笔记:引用类型(五)

    Object类型 创建object实例方法有两种.第一种方法使用new操作符后跟object构造函数.如下: var person=new Object(); person.name="Ni ...

  7. JavaScript高级程序设计-读书笔记(7)

    第22章 高级技巧 1.高级函数 (1)安全的类型检测 在任何值上调用Object原生的toString()方法,都会返回一个[object NativeConstructorName]格式的字符串. ...

  8. JavaScript高级程序设计-读书笔记(2)

    第6章 面向对象的程序设计 创建对象 1.最简单方式创建Object的实例,如 var person = new Object(); person.name = “Greg”; person.age ...

  9. JavaScript高级程序设计-读书笔记(1)

    第1章 JavaScript简介 JavaScript是一种专为与网页交互而设计的脚本语言,由下列三个不同的部分组成: l        ECMAScript:提供核心语言功能: l        文 ...

  10. javascript高级程序设计读书笔记----面向对象的程序设计

        创建对象   工厂模式 function createPerson(name, age, job){ var o = new Object(); o.name = name; o.age = ...

随机推荐

  1. MyEclipse中的SVN操作手册

    原文出处:http://blog.sina.com.cn/s/blog_8a3d83320100zhmp.html 1.导入项目 点击工具栏上的[File-Import],进入下图 (如果你的对话框中 ...

  2. js设计模式总结-单例模式

    单例模式 解决的问题 保证实例只有一个,避免多个实现,从全局来看,这个实例的状态是唯一的. 实现原理 设置一个变量来记录实例,通过检测该变量是否为空来决定是否创建实例 非透明单例 所谓非透明就是用户在 ...

  3. Spring事务属性的介绍

    Spring声明式事务让我们从复杂的事务处理中得到解脱.使得我们再也无需要去处理获得连接.关闭连接.事务提交和回滚等这些操作.再也无需要我们在与事务相关的方法中处理大量的try-catch-final ...

  4. Linux连接Internet

    Linux连接Internet 1. Linux网卡 1.1 查看内核所扑捉到的网卡信息(已经安装到服务器并且被Linux内核识别的网卡) [root@www ~]# dmesg | grep -in ...

  5. LINQ之路 6:延迟执行(Deferred Execution)

    LINQ中大部分查询运算符都有一个非常重要的特性:延迟执行.这意味着,他们不是在查询创建的时候执行,而是在遍历的时候执行(换句话说,当enumerator的MoveNext方法被调用时).让我们考虑下 ...

  6. Echarts_1:水平柱体

    Echarts:http://echarts.baidu.com/index.html 这下面是我自己总结的一些配置注释,分享~ 效果图: 小白小白小白小白小白小白小白小白小白小白小白小白小白小白小白 ...

  7. 扒一扒自从买了kindle后看的书

    一.<性别战争> 讲述的是动物界各类动物的xxx(你懂的),以动物拟人化的口吻来进行问答,十分的生动形象,虽说和自己的生活没有多大联系,但是偶尔了解一下,也是意外的不错的感觉. 二.< ...

  8. strcpy strlen memcpy等的函数实现

    #include <assert.h> #include <string.h> #include <stdlib.h> #include <stdio.h&g ...

  9. javascript学习内容--改变样式、取消设置、显示内容、隐藏内容

    <head> <style> body{font-size:12px;} #txt{ height:400px; width:600px; border:#333 solid ...

  10. shell下>和>>的区别

    >  :如果文件不存在,同上,如果文件存在,先将文件清空,然后将数据填入此文件 >> :如果文件不存在,将创建新的文件,并将数据送至此文件:如果文件存在,则将数据添加在文件后面