Javascript之旅——第二站:对象和数组
一觉睡到中午,本来准备起来洗洗继续睡,不过想想没辙,还得继续这个系列,走过变量的第一站,第二站我们再来看看对象和数组。
一:对象
说起对象,我们不自然就想起了面向对象中自封装的一个类,同样JS中也是遵循这个守则,在web编程中几乎天天用到的就是JSON。是的,
这就是一个对象,不过这个对象下面的字段都是字符串和值类型,如下图。
var delivery = {
no: 1,
sendtime: "2014-11-25",
way: "PJS"
};
从上面可以看出delivery中只具有基本的字符串和数值类型,当然给你玩的可不仅仅就这么多,除了基本的类型,我们还可以定义一个数组类型,
函数类型字段,就像下面这样。
var delivery = {
no: 1,
sendtime: "2014-11-25",
//三个可用配送地址
address: ["北京", "上海", "南京"],
way: "PJS",
//根据逻辑是否支持配送
cansend: function () {
//logic code....
return true;
}
};
现在我们的delivery类刹那间就丰富起来了,有丰富的可用配送地址,有是否可以配送的逻辑运算,是不是有了C#中的类的感觉?可能有人会说,
C#中有索引器,有属性,有事件等等这些,其实这些都是编译器给的语法糖,真的一点都不好玩,本质上都是些方法,有些人就会被这些糊弄到
了而没有看到本质的东西。
现在对象是创建出来了,下一步就是怎么用呢?通常有两种方法:
<1> "." 运算符
这种方法,我想是人都应该知道,所以没什么好说的,比如:delivery.way。
<2> 索引方式
这种不知道有多少人清楚,就是用字符串索引的方法去寻找,比如我想去找delivery中字符串为“way”的字段值?因为这个“way"字符串
可能来自用户的输入,那么这种情况在C#里面叫做后期绑定,只能用反射来寻找类的元数据,然后再输出强类型way的值,但是在JS中肯定
是没有元数据的,不过大概也是用了类似反射的方法动态绑定的,说了这么多,我们来看看例子。

可能有些人想问,JS在内部是不是用哈希做的,我只能说遗憾的是,不像C#可以反编译或者看看IL,但是在JS中你是没法看到底层做了些
什么,不过我觉得看似哈希,其实跟C#反射差不多,毕竟key都是string,而value却是各种类型都有,string,function,int,array等等,
有值类型,有引用类型,这些大杂烩都放到value,我觉的不好操作是一点,也不符合设计规范,既然觉得不是hash,在内部在寻找”way“的
时候只能采用遍历的方式了。
二:数组
说起数组,先要看看数组的定义,两种方式,字面量和Array构造函数,如下图:
var s = [1, "ctrip"];
var a = new Array(1, "ctrip");
不过要是你仔细观察,你也许会发现,字面量能做到的,array构造函数都能做到,字面量做不到的,array也能做到,比如初始化数组的个
数。也就是array构造函数的第一个参数。

因为看不到array中的底层代码,真是非常的伤心,所以我只能猜测一下,字面量[] 只是js提供给我们的语法糖,底层应该还是调用array的
第二个重载函数。

第二个觉得有意思的地方就是,我们会发现一个现象,数组居然还能和对象扯到一块,最后会搞得你眼花缭乱,也许这个就是无类型的灵活
性,有利有弊吧。

从图中我们可以看到,通过s.name="cnblogs"这种类对象赋值的方式,可以将key和value加入到数组中,并且你还可以通过s.name和
s["name"]输出结果值,这就说明数组本质上还是类,只不过在类里面做了一些高层封装,比如需要定时的统计length大小,也就造成了可
以用两个方式输出结果值,不过这就造成了索引数组和关联数组并存的情况了。如果在C#里面,普通的索引数组,我们知道他们在堆中的空
间具有连续性,这样就可以使用索引来达到O(1)查找,但是在js中这样各种类型混在一起,我想应该也没有办法做hash查找,因为这样hash
函数真的很难做,让我写可能写不出来,不过同样很可惜的是,看不到array的源码,所以没有发言权了。
然后数组方面就没什么好说的了,什么for和forin遍历,数组中常用的操作方法,比如pop,push,join,unshift,shift,大家都能看不到源码,
也就只能见名识义的用吧。
Javascript之旅——第二站:对象和数组的更多相关文章
- javascript进阶课程--第二章--对象
javascript进阶课程--第二章--对象 学习要点 理解面向对象的概念 掌握对象的创建方法 掌握继承的概念和实现方法 基本概念 对象究竟是什么?什么叫面向对象编程? 对象是从我们现实生活中抽象出 ...
- javascript进阶教程第二章对象案例实战
javascript进阶教程第二章对象案例实战 一.学习任务 通过几个案例练习回顾学过的知识 通过案例练习补充几个之前没有见到或者虽然讲过单是讲的不仔细的知识点. 二.具体实例 温馨提示 面向对象的知 ...
- JavaScript(第七天)【对象和数组】
什么是对象,其实就是一种类型,即引用类型.而对象的值就是引用类型的实例.在ECMAScript中引用类型是一种数据结构,用于将数据和功能组织在一起.它也常被称做为类,但ECMAScript中却没有这种 ...
- javascript数据基本定义以及对象{}和数组[]的含义和使用
一.基本的数据类型 原始类型(简单数据类型.基本数据类型) Undefined类型: 表示声明了变量但未对其初始化时赋予该变量的值.undefined为Undefined类型下的唯一的一个值. Nul ...
- Javascript根据指定下标或对象删除数组元素
删除数组元素在工作中经常会用到,本文讲解一下Javascript根据下标删除数组元素的方法,需要了解的朋友可以参考下 将一下代码放在全局js文件中: Js代码 /** *删除数组指定下标或指定对象 * ...
- CSS之旅——第二站 如何更深入的理解各种选择器
上篇我们说了为什么要使用css,这篇我们就从选择器说起,大家都知道浏览器会把远端过来的html解析成dom模型,有了dom模型,html就变成 了xml格式,否则的话就是一堆“杂乱无章”的string ...
- Javascript之旅——第九站:吐槽function
说到funciton,也是我对js非常吐槽的一点,封装的让我眼瞎,马蛋的,哥只能大眼睁着去黑盒的使用,简直只有完完全全的听各类图书对 function的道听图说,完全没有做到一点点的眼见为实. 一:f ...
- Javascript基础学习(3)_对象和数组
一.对象是一种无序的属性集合,每个属性都有自己的名字和值. 1.创建对象 花括号内逗号分隔 var person = { "Name" : "LiCheng", ...
- Javascript之旅——第一站:从变量说起
工作这几年,js学的不是很好,正好周末有些闲时间,索性买本<js权威指南>,大名鼎鼎的犀牛书,好好的把js深入的看一看.买过这本 书的第一印象就是贼厚,不过后面有一半部分都是参考手册. 一 ...
随机推荐
- 动易CMS之标签管理
一.如何添加一个标签 1.系统设置->模板标签管理->添加标签 2.输入标签名称,根据需要选择数据设置: sql语句则选择[系统数据库SQL查询] 3.添加参数 4.系统可以根据设置的条件 ...
- Scalaz(49)- scalaz-stream: 深入了解-Sink/Channel
一个完整的scalaz-stream有以下几个部分组成:Source -> Transducer -> Sink,用直白文字来描述就是:“输入 -> 传换 -> 输出”.我们已 ...
- Discuz X2任务开发
简单描述 由于公司的需求要在系统中添加任务管理,用户通过完成任务而获得一定的奖励,因此其设计过程需要考虑到: 1.由于任务都是在系统中相关功能块处做一些相关事情,比如说在做题系统中完成指定的试题[1] ...
- 修改windows系统文件权限
修改windows系统文件总是提示没有权限,虽然已是administrator也不管用. 以下方法可以解决: 右键属性,安全,高级,所有者,编辑,选择当前用户并确定, 回到上一页再确定, 然后在安全页 ...
- ubuntu安装VNC、Xfce桌面
1.首先安装xfce桌面环境 sudo apt-get -y install xfce4 2.安装vncserver sudo apt-get -y install vnc4server 3.设置访问 ...
- Sharepoint2013:在页面上显示错误信息
在sharepoint2013中我们需要修改以下三处的web.config,以显示错误信息 1, C:\inetpub\wwwroot\wss\VirtualDirectories\端口号\web.c ...
- WPF的ComboBox 数据模板自定义
WPF的ComboBox 有些时候不能满足用户需求,需要对数据内容和样式进行自定义,下面就简要介绍一下用数据模板(DataTemplate)的方式对ComboBox 内容进行定制: 原型设计如下: 步 ...
- Sequence.js 实现带有视差滚动特效的图片滑块
Sequence.js 功能齐全,除了能实现之前分享过的现代的图片滑动效果,还可以融合当前非常流行的视差滚动(Parallax Scrolling)效果.让多层背景以不同的速度移动,形成立体的运动效果 ...
- React Native——我的学习套路
学习东西都有一定的套路,特别是新的框架,对于React Native,我是这么学的. 第一步 : 这是啥 在各种原因下,需要使用某个框架时,那第一件事就是知道这个框架是用来干什么.React Nati ...
- 为 MDS 修改 SharePoint 2013组件
了解如何修改 SharePoint 项目中的组件以在 SharePoint 2013 中利用最少下载策略(MDS). 本文内容 为何修改 SharePoint 组件? 母版页 ASP.NET 页面 ...