《JavaScript高级程序设计》读书笔记--(3)引用类型
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中的数组与其它多数语言的的数组有着相当大的不同。具体特点如下:
- 数组是数据的有序列表但是数组每一项可以保存任何类型的数据;
- 数组的大小是可以动态调整的。
创建数组的方式有两种:使用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类型
函数的内容较多,下面将需要理解的要点全部列出来:
- 函数是对象,每个函数其实都是Function类型的实例;
- 函数名实质上是指向函数的一个指针。函数名为指针,函数名后加()表示调用函数;
- 函数没有重载;
- 函数名本身就是变量,所以函数可以作为值来使用;
- 函数内部agruments对象的callee属性指向拥有agruments对象的指针;
- 函数有两个非继承而来的方法apply()和call(),这个可以扩充函数赖以生存的作用域;
- 函数的prototype属性在实现自定义引用类型和继承时具有重要作用;
《JavaScript高级程序设计》读书笔记--(3)引用类型的更多相关文章
- javascript高级程序设计读书笔记-事件(一)
读书笔记,写的很乱 事件处理程序 事件处理程序分为三种: 1.html事件2. DOM0级,3,DOM2级别 没有DOM1 同样的事件 DOM0会顶掉html事件 因为他们都是属性 而 ...
- javascript高级程序设计读书笔记----引用类型
Array类型. ECMAScript数组的每一项可以保存任何类型的数据. 数组大小是可以动态调整的. 创建数组第一种基本方式方式: 使用Array构造函数 var colors = new ...
- javascript高级程序设计读书笔记
第2章 在html中使用javascript 一般都会把js引用文件放在</body>前面,而不是放在<head>里, 目的是最后读取js文件以提高网页载入速度. 引用js文 ...
- Javascript高级程序设计读书笔记(第六章)
第6章 面向对象的程序设计 6.2 创建对象 创建某个类的实例,必须使用new操作符调用构造函数会经历以下四个步骤: 创建一个新对象: 将构造函数的作用域赋给新对象: 执行构造函数中的代码: 返回新 ...
- JavaScript高级程序设计 读书笔记
第一章 JavaScript 简介 第二章 Html中使用JavaScript 第三章 基本概念 第四章 变量,作用域,内存 第五章 引用类型 第六章 面向对象 第七章 函数表达式 第八章 BOM 第 ...
- 《JavaScript高级程序设计》笔记:引用类型(五)
Object类型 创建object实例方法有两种.第一种方法使用new操作符后跟object构造函数.如下: var person=new Object(); person.name="Ni ...
- JavaScript高级程序设计-读书笔记(7)
第22章 高级技巧 1.高级函数 (1)安全的类型检测 在任何值上调用Object原生的toString()方法,都会返回一个[object NativeConstructorName]格式的字符串. ...
- JavaScript高级程序设计-读书笔记(2)
第6章 面向对象的程序设计 创建对象 1.最简单方式创建Object的实例,如 var person = new Object(); person.name = “Greg”; person.age ...
- JavaScript高级程序设计-读书笔记(1)
第1章 JavaScript简介 JavaScript是一种专为与网页交互而设计的脚本语言,由下列三个不同的部分组成: l ECMAScript:提供核心语言功能: l 文 ...
- javascript高级程序设计读书笔记----面向对象的程序设计
创建对象 工厂模式 function createPerson(name, age, job){ var o = new Object(); o.name = name; o.age = ...
随机推荐
- C++ 字符编码转换类
记录一下C++ 编码转换的函数: #pragma once #include "afx.h" #define DEFAULT_CODE 0 #define CHINESE_SIMP ...
- 深入理解BFC和外边距合并(Margin Collapse)
一.什么是BFC? 1.BFC的概念 BFC全称Block Formatting Context ,直译“块级格式化上下文”,也有译作“块级格式化范围”.它是 W3C CSS 2.1 规范中的一个概念 ...
- Intellij 打开就闪退或关闭
找到安装目录的bin目录,搜索vmoptions可以看到两个文件, idea.exe.vmoptions idea64.exe.vmoptions 这两个文件就是IDEA的一些配置文件,带64位 ...
- Php中的强制转换详解
强制转换中分为两种,第一种就只临时转换,和永久转换.在临时转换中呢,首先可以通过第一中方式来显示,就是小括号的形式,临时转换成整型我们可以通过(int)都是这样的形式,或者是(integer)临时转换 ...
- BWT压缩算法(Burrows-Wheeler Transform)
参考: BWT (Burrows–Wheeler_transform)数据转换算法 压缩技术主要的工作方式就是找到重复的模式,进行紧密的编码. BWT(Burrows–Wheeler_transfor ...
- HTML5 十大新特性(五)——SVG绘图
相对于canvas绘图,SVG是一种绘制矢量图的技术.全称叫做Scalable Vector Graphics,可缩放的矢量图,在2000年就已经存在,H5把它纳入了标准标签库,并进行了一些瘦身.需要 ...
- SQLServer字符操作
1.CHARINDEX('A',‘VALUE’) result:2 style:PATINDEX(varchar,varchar) 解释:A在字符串VALUE的位置次序. 2.PATINDEX( ...
- SQL Server Replication issues-the row was not found at the subscriber end
Issue type: 1.find out the number 0x0006F18F00006082002300000000 from publication end. 2.use below s ...
- mmorpg手游中的战斗系统
目前的项目是一款mmorpg手游, 非常不幸的是,当前战斗系统的实现非常脆弱, 也毫无技巧可言.具体存在如下问题: 1.战斗层逻辑与自动战斗AI逻辑混在一起, 互相纠缠. 2.战斗层自身逻辑混乱不堪, ...
- SPSS数据分析-时间序列模型
我们在分析数据时,经常会碰到一种数据,它是由时间累积起来的,并按照时间顺序排列的一系列观测值,我们称为时间序列,它有点类似于重复测量数据,但是区别在于重复测量数据的时间点不会很多,而时间序列的时间点非 ...