一觉睡到中午,本来准备起来洗洗继续睡,不过想想没辙,还得继续这个系列,走过变量的第一站,第二站我们再来看看对象和数组。

一:对象

    说起对象,我们不自然就想起了面向对象中自封装的一个类,同样JS中也是遵循这个守则,在web编程中几乎天天用到的就是JSON。是的,

这就是一个对象,不过这个对象下面的字段都是字符串和值类型,如下图。

1     var delivery = {
2         no: 1,
3         sendtime: "2014-11-25",
4         way: "PJS"
5     };

从上面可以看出delivery中只具有基本的字符串和数值类型,当然给你玩的可不仅仅就这么多,除了基本的类型,我们还可以定义一个数组类型,

函数类型字段,就像下面这样。

 1     var delivery = {
 2         no: 1,
 3         sendtime: "2014-11-25",
 4
 5         //三个可用配送地址
 6         address: ["北京", "上海", "南京"],
 7
 8         way: "PJS",
 9
10         //根据逻辑是否支持配送
11         cansend: function () {
12             //logic code....
13             return true;
14         }
15     };

现在我们的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构造函数,如下图:

1         var s = [1, "ctrip"];
2         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之旅——第二站:对象和数组相关推荐

  1. javascript进阶教程第二章对象案例实战

    javascript进阶教程第二章对象案例实战 一.学习任务 通过几个案例练习回顾学过的知识 通过案例练习补充几个之前没有见到或者虽然讲过单是讲的不仔细的知识点. 二.具体实例 温馨提示 面向对象的知 ...

  2. JavaScript判断一个变量是对象还是数组

    typeof都返回object 在JavaScript中所有数据类型严格意义上都是对象,但实际使用中我们还是有类型之分,如果要判断一个变量是数组还是对象使用typeof搞不定,因为它全都返回objec ...

  3. JavaScript基础(四)对象、数组、对象与数组的常用API

    目录 一.对象 1. 对象的创建 2. 对象属性的访问 3. 遍历对象属性 4. 检测属性是否存在 5. 对象的方法 二.数组对象 1. 数组的创建 2. 访问数组 3. 数组长度 4. 数组的遍历 ...

  4. JavaScript(第七天)【对象和数组】

    什么是对象,其实就是一种类型,即引用类型.而对象的值就是引用类型的实例.在ECMAScript中引用类型是一种数据结构,用于将数据和功能组织在一起.它也常被称做为类,但ECMAScript中却没有这种 ...

  5. JavaScript学习(七)——对象与数组、内部对象(1)

    目录 javascript对象与数组 javascript内部对象 object对象 1.创建object对象 2.object对象的属性 3.object对象的方法 String对象 1.创建Str ...

  6. JavaScript写一个能遍历对象和数组的通用forEach函数

    //遍历对象用for...in...,遍历数组用forEach        function forEach(obj){ var key; if(obj instanceof Array){ obj ...

  7. Javascript之旅——第一站:从变量说起

    原文出处: 一线码农的博客   欢迎分享原创到伯乐头条 工作这几年,js学的不是很好,正好周末有些闲时间,索性买本<js权威指南>,大名鼎鼎的犀牛书,好好的把js深入的看一看.买过这本书的 ...

  8. LINQ学习之旅——第二站LTQ之标准数据库操作(增查删改)

    今天要讲解主要内容是关于LINQ TO SQL中的标准数据库操作:插入(Insert).查询(Select).更新(Update)以及删除(Delete),凡是涉及到数据库方面的都会使用这些操作.而这 ...

  9. Android用户界面设计学习之旅-第二站

    通过上一篇文章,大概了解了Android用户界面的设计方式,以及如何通过XML来设计界面.并且完成了一个非常简单的示例. 在上一篇文章中,涉及到了一些资源文件,直观点说,就是res目录下的那些目录和文 ...

最新文章

  1. 网络服务-DNS 域名系统服务
  2. 树莓派 使用读卡器修改WIFI连接配置
  3. jenkins 部署文档
  4. 基于STM32L476的锂电池SOC检测
  5. ubuntu安装perl模块
  6. 第一范式转化为第二范式_深度解读《中国智能经济发展白皮书》:AI为核心驱动力,百度给出智能范式...
  7. 新概念英语(1-95)Tickets,please!
  8. c语言else语句,C# if…else 语句 | 菜鸟教程
  9. 计算机office2010excel试题,将计算机二级Office2010Excel试题中会出现的所有公式汇总...
  10. linux journalctl使用详解
  11. 4939: [Ynoi2016]掉进兔子洞 莫队 压位
  12. win7浏览器主页修改不过来_win7系统浏览器主页修改不了的解决方法
  13. C#之十八 GUI用户界面编程
  14. 在 Surface 或 Windows 10 中启用和禁用触摸屏
  15. 22个优秀的橙色网页设计作品欣赏
  16. 会议室管理系统jsp和mysql_基于jsp+mysql+servlet的JSP会议-会议室管理系统
  17. SpringCloud—笔记(三)高级篇
  18. Laplace(拉普拉斯)先验与L1正则化
  19. Python网络爬虫实战:抓取和分析天猫胸罩销售数据
  20. 吾爱IC社区2019年度总结

热门文章

  1. 眼科手术设备行业调研报告 - 市场现状分析与发展前景预测
  2. Android-解决TextView上下留白问题
  3. 苹果承认了!到底发生了啥?
  4. HttpClient的异步调用,你造吗?
  5. 成为谷歌工程师是不是特别难?不用,自学 8 个月也可以!
  6. dos怎么取消网络计算机,用DOS命令局域网内电脑关机或重启
  7. 震撼推荐:人生的第二次挑战!(转载自51CTO企业网管新生代群)
  8. STM32开发笔记33:解决USB CDC “该设备无法启动”问题
  9. 计算机学院举办 温暖冬日 感恩社会 活动,山东商职学院:开展感恩节活动温暖冬日校园...
  10. Qt连接mysql数据库、数据库开启远程连接,实现QQ登录、注册、修改密码功能(已实现),后续继续更新中...