- 浏览: 919987 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (537)
- Java SE (114)
- Struts (18)
- Hibernate (25)
- Spring (3)
- Page_Tech (41)
- Others (87)
- Database (29)
- Server (24)
- OpenSource_Tools (15)
- IDE_Tool (22)
- Algorithm (28)
- Interview (22)
- Test (28)
- Hardware (1)
- Mainframe (25)
- Web application (4)
- Linux (3)
- PHP (17)
- Android (1)
- Perl (6)
- ubuntu (1)
- Java EE (9)
- Web Analysis (5)
- Node.js (2)
- javascript (2)
最新评论
-
一键注册:
request.getRequestURL()和request.getRequestURI() -
SuperCustomer:
...
SED的暂存空间和模式空间 -
juyo_ch:
讲得挺好理解的,学习了
java 死锁及解决 -
chinaalex:
最后一题答案正确,但是分析有误.按照如下过程,上一行为瓶,下一 ...
zz智力题 -
liaowuxukong:
多谢博主啦,弱弱的了解了一点。
C++/Java 实现多态的方法(C++)
在javascript中,对象实际上就是一个哈希表,比如下面这个user对象:
- function user(n, a)
- {
- this.name = n;
- this.age = a;
- this.toString = function() {
- return 'Name:' + this.name + ', Age:' + this.age;
- }
- }
- var u = new user('tom', 18);
- for (var k in u) {
- alert('key: ' + k + ', value:' + u[k]);
- }
function user(n, a) { this.name = n; this.age = a; this.toString = function() { return 'Name:' + this.name + ', Age:' + this.age; } } var u = new user('tom', 18); for (var k in u) { alert('key: ' + k + ', value:' + u[k]); }
稍作改动,使用Array对象来代替对象:
- var user = new Array();
- user['name']='tom';
- user['age']=18;
- user['toString']=function(){
- return 'Name:' + this.name + ', Age:' + this.age;
- }
- alert(user.toString());
var user = new Array(); user['name']='tom'; user['age']=18; user['toString']=function(){ return 'Name:' + this.name + ', Age:' + this.age; } alert(user.toString());
更简单的写法:
- var u = {
- 'name':'tom',
- 'age':18
- }
- u.toString = function(){return 'Name:' + this.name + ', Age:' + this.age;};
- alert(u.toString());
var u = { 'name':'tom', 'age':18 } u.toString = function(){return 'Name:' + this.name + ', Age:' + this.age;}; alert(u.toString());
由以上这些代码可以看出:
- 所有的javascript对象,包括Array对象在内实际上就是一个哈希表,属性名称就是哈希表的key,而属性的值就是哈希表的值。
- Array对象与通常意义的数组对象并不相关,通常的数组仅能通过下标来定位,而javascript中的Array却可以像哈希表一个通过key来定位集合中的对象。
- 可以将一个function直接作为值赋给对象的“哈希表”。
前端时间看了阮一峰的 《数据类型与Json格式》 一文,提到在yaml描述数据时,将所有的数据分成三种类型:
- 第一种类型是scalar(标量),一个单独的string或数字,比如“北京”这个单独的词。
- 第二种类型是sequence(序列),若干个相关的数据按照一定顺序并列在一起,又叫做array(数组)或List(列表),比如“北京,东京”。
- 第三种类型是map(映射),一个键/值对(Key/value),又称作hash(散列)或dictionary(字典),比如“首都:北京”。
可能这三种类型我们都很熟悉,但文中提到的对json的四条规则却正好剖析了javascript描述数据的方式:
- 并列的数据之间用逗号(“,”)分隔。
- 映射用冒号(“:”)表示。
- 并列数据的集合(数组)用方括号('[]')表示。
- 映射的集合(对象)用大括号(“{}”)表示。
有了这四条规则(再加上对function的理解),对于很多看上去非常“诡异”的写法,都可以理解了。因此,一个javascript对象,实际上就是一个数组或是映射。
关于数组与映射的不同,可以看下面这个例子:
- var m = {
- name:'keel',
- age:5
- }
- var a = [m,'sss',3];
- //以下请求成功定位到name属性
- alert(m['name']);
- alert(a[0]['name']);//a[0]定位到m
- alert(a[0].name);
- //以下失败
- alert(m[0]);//映射无法以数组下标的方式访问
var m = { name:'keel', age:5 } var a = [m,'sss',3]; //以下请求成功定位到name属性 alert(m['name']); alert(a[0]['name']);//a[0]定位到m alert(a[0].name); //以下失败 alert(m[0]);//映射无法以数组下标的方式访问
- 从定位到成员的方法来看,映射使用key来定位其中的成员,而数组使用下标,映射无法使用下标定位,同样数组也无法使用key(理所当然,根本就没有key);
- 从表示方法来看,映射可以使用类似对象属性的方式来访问(如:m.name),也可以使用带key的[]方式(如:m['name'],这是javascript一个特例,看上去像数组,实际上仍是映射);但数组仅能使用下标的方式;
- 从顺序来看:数组是有顺序的,映射是无序的;
数据类型和json格式:(Note:this blog copied from:http://www.ruanyifeng.com/blog/2009/05/data_types_and_json.html ,if u reship it,pls note the resource.)
1.
前几天,我才知道有一种简化的数据交换格式,叫做yaml。
我翻了一遍它的文档,看懂的地方不多,但是有一句话令我茅塞顿开。
它说,从结构上看,所有的数据最终都可以分成三种类型:
第一种类型是scalar(标量),也就是一个单独的string(字符串)或数字(numbers),比如“北京”这个单独的词。
第二种类型是sequence(序列),也就是若干个相关的数据按照一定顺序并列在一起,又叫做array(数组)或List(列表),比如“北京,东京”。
第三种类型是mapping(映射),也就是一个名/值对(Name/value),即数据有一个名称,还有一个与之相对应的值,这又称作hash(散列)或dictionary(字典),比如“首都:北京”。
我恍然大悟,数据构成的最小单位原来如此简单!难怪在编程语言中,只要有了数组(array)和对象(object)就能够储存一切数据了。
2.
我马上想到了json。
21世纪初,Douglas Crockford寻找一种简便的数据交换格式,能够在服务器之间交换数据。这其实需要二步,第一步是将各种数据转化为一个字符串,也就是数据的串行化(serialization),第二步才是交换这个字符串。
当时通用的数据交换语言是XML,但是Douglas Crockford觉得XML的生成和解析都太麻烦,所以他提出了一种简化格式,也就是Json。
Json的规格非常简单,只用一个页面、几百个字就能说清楚,而且Douglas Crockford声称这个规格永远不必升级,因为该规定的都规定了。
1) 并列的数据之间用逗号(“,”)分隔。
2) 映射用冒号(“:”)表示。
3) 并列数据的集合(数组)用方括号("[]")表示。
4) 映射的集合(对象)用大括号(“{}”)表示。
上面四条规则,就是Json格式的所有内容。
比如,下面这句话:
“北京市的面积为16800平方公里,常住人口1600万人。上海市的面积为6400平方公里,常住人口1800万。”
写成json格式就是这样:
如果事先知道数据的结构,上面的写法还可以进一步简化:[
{"城市":"北京","面积":16800,"人口":1600},
{"城市":"上海","面积":6400,"人口":1800}
]
[
["北京",16800,1600],
["上海",6400,1800]
]
由此可以看到,json非常易学易用。所以,在短短几年中,它就取代xml,成为了互联网上最受欢迎的数据交换格式。
我猜想,Douglas Crockford一定事先就知道,数据结构可以简化成三种形式,否则怎么可能将json定义得如此精炼呢!
3.
我还记得,在学习javascript的时候,我一度搞不清楚“数组”(array)和“对象”(object)的根本区别在哪里,两者都可以用来表示数据的集合。
比如有一个数组a=[1,2,3,4],还有一个对象a={0:1,1:2,2:3,3:4},然后你运行alert(a[1]),两种情况下的运行结果是相同的!这就是说,数据集合既可以用数组表示,也可以用对象表示,那么我到底该用哪一种呢?
我后来才知道,数组表示有序数据的集合,而对象表示无序数据的集合。如果数据的顺序很重要,就用数组,否则就用对象。
4.
当然,数组和对象的另一个区别是,数组中的数据没有“名称”(name),对象中的数据有“名称”(name)。
但是问题是,很多编程语言中,都有一种叫做“关联数组”(associative array)的东西。这种数组中的数据是有名称的。
比如在javascript中,可以这样定义一个对象:
var a={"城市":"北京","面积":16800,"人口":1600};
但是,也可以定义成一个关联数组:
a["城市"]="北京";
a["面积"]=16800;
a["人口"]=1600;
这起初也加剧了我对数组和对象的混淆,后来才明白,在Javascript语言中,关联数组就是对象,对象就是关联数组。这一点与php语言完全不同,在php中,关联数组也是数组。
比如运行下面这段javascript:
var a=[1,2,3,4];
a['foo']='Hello World';
alert(a.length);
最后的结果是4,也就是说,数组a的元素个数是4个。
但是,运行同样内容的php代码就不一样了:
$a=array(1,2,3,4);
$a["foo"]="Hello world";
echo count($a);
最后的结果是5,也就是说,数组a的元素个数是5个。
发表评论
-
正则表达式(实例讲解)
2012-07-18 11:38 7671. 正则表达式规则1.1 普通字符 字母、数字、 ... -
正则表达式之我见
2012-07-18 11:20 766正则表达式就是一个模式匹配的表达式,通过这个表 ... -
zz 深入正则表达式
2012-07-18 11:13 8361. 什么是正 ... -
常用正则表达式
2012-07-18 10:14 8471、非负整数:^\d+$2、正整数:^[0-9]*[1-9][ ... -
zz 网站采集 url网址正则表达式
2012-07-18 10:12 1250正则表达式规则 1. 正则表达式规则1.1 普通字符 ... -
XMLNS的作用
2012-05-16 12:54 1063做WEB页面的人经常会碰到形如<html xmlns=& ... -
如何解决Tomcat下中文乱码问题?
2010-12-25 15:03 831现在将常见的乱码问题分为JSP页面显示中文乱码、表单提交乱 ... -
javascript中字符串替换函数replace()方法详解
2010-12-20 17:02 947replace()最简单的算是能力就是简单的字符替换。示例代码 ... -
JSP应用导出Excel报表的简单实现以及中文乱码彻底解决(HTML)
2010-10-28 15:58 1057Web应用导出Excel报表的简单实现(HTML) 在Web应 ... -
JSP导出excel
2010-10-28 15:33 2409将web页面上显示 ... -
JavaScript 一些函数
2010-10-26 16:05 891第一:onload 网页加载完执行的函数,这个代码是从 ... -
一些JS兼容问题
2010-10-26 15:57 8291. document.form.item 问题问题:代码中存 ... -
Jsp乱码问题
2010-10-26 15:51 695最基本的乱码问题 这 ... -
61548错误!
2010-09-26 15:59 1019最近写一个简单的FckEditor发文章的Web ... -
request.getParameterNames()和request.getParameterValues()
2010-09-19 10:34 1585request.getParameterNames()方法是将 ... -
AJAX学习
2010-09-16 20:33 766AJAX学习 AJAX技术背景介 ... -
各类Http请求状态(status)及其含义
2010-07-17 14:16 883Web服务器响应浏览器或其他客户程序的请求时,其应答一般由以下 ... -
不重新发送信息,则无法刷新网页
2010-06-24 13:33 1683如果想刷新一下从别的页面提交过来页面,有时会出现讨厌的“不重新 ... -
模态窗口的缓存问题
2010-04-13 09:17 1291有时频繁的打开弹出的模态框操作(比如编辑一个目标的名字),里面 ... -
Ajax.Request方法
2010-04-12 18:20 995Ajax.Request(url,{method:met ...
相关推荐
在JavaScript编程中,对象是核心概念之一。它们是键值对的集合,可以包含数据(属性)和行为(方法)。JavaScript Object Browser扩展通过图形化的方式展示这些对象,使得开发者能够清晰地看到对象层次结构,快速...
以上概述了《Object_Oriented_Javascript》一书中的主要内容,涉及了JavaScript的基础知识、面向对象编程的核心概念以及具体实现细节。这些知识点不仅适用于初学者,也对希望深入了解JavaScript内部机制的开发者非常...
在JavaScript中,`object`和`Object`两者虽然在名称上仅有一字之差,但它们代表的概念却大不相同。理解这两者的区别对于深入掌握JavaScript的面向对象编程至关重要。 首先,`object`并不是JavaScript中的一个特定...
#### 知识点三:JavaScript基础知识与核心概念 - **变量声明**:使用`var`, `let` 和 `const` 来声明变量。 - **函数**:JavaScript中的函数不仅可以被调用,还可以作为参数传递或由其他函数返回。 - **作用域**:...
然而,在深入学习JavaScript的过程中,不少开发者对于语言内部的一些概念仍感困惑,比如Object与Function之间的关系及其如何影响`instanceof`运算符的结果。 #### 二、JavaScript对象体系结构概述 在JavaScript...
《DOM Scripting: Web Design with JavaScript and the Document Object Model》是由Jeremy Keith撰写的一本关于JavaScript和DOM编程的经典著作。这本书深入浅出地介绍了如何利用JavaScript动态操控网页内容,提升...
在标题“Object-oriented-javascript”和描述“关于javascipt的一本很不错的书,主要是从初级开始的,面向对象的书。”中,我们可以提取出关于面向对象JavaScript编程的知识点。这本书由Stoyan Stefanov所著,出版于...
本书不仅适合JavaScript初学者了解面向对象的概念,也适合有一定经验的开发者进一步掌握高级技巧。 #### 二、面向对象的基本概念 面向对象编程主要基于四个核心概念:封装、继承、多态和抽象。 - **封装**:将数据...
本书《Object-Oriented Programming in Javascript》是为了解决如何在JavaScript中正确应用面向对象编程(OOP)问题而撰写的,作者是曾任职于雅虎的前端工程师范 Nicholas C. Zakas。全书将涵盖JavaScript中面向对象...
JavaScript Object和JSON是Web开发中两个非常重要的概念,它们在数据交换和存储中扮演着关键角色。这篇博客将深入探讨这两个主题,以及它们之间的关系。 首先,JavaScript Object(JS对象)是JavaScript语言中的...
在JavaScript中,Function和Object是两个非常重要的概念,它们之间存在着紧密的关系。在这篇文章中,我们将深入探讨Function和Object的关系,了解它们之间的联系和区别。 Function:函数对象 ---------------- 在...
JSON,全称JavaScript Object Notation,是一种轻量级的数据交换格式。它采用完全独立于语言的文本格式,同时也被广泛用于非JavaScript环境。JSON的设计目标是简洁和易于阅读及编写,同时也易于机器解析和生成。它是...
本书名为《Web Design with JavaScript and the Document Object Model 2005》(2005年版的Web设计与JavaScript及文档对象模型),是由英国知名网络编程专家Jeremy Keith所著。此书主要讲述了如何在Web开发中运用...
通过理解并掌握这些核心概念,开发者能够充分利用JavaScript的强大功能,创造出更加出色和可靠的软件产品。随着技术的不断进步,JavaScript将继续作为前端和后端开发的重要语言,引领着Web开发的未来趋势。
本书《面向对象编程在JavaScript中的原则》旨在帮助读者深入理解并掌握如何在JavaScript环境中运用面向对象编程(OOP)的概念和技术。对于那些熟悉C++或Java等语言中的类为基础的OOP模型的开发者来说,JavaScript...
总结以上内容,这份学习笔记主要向我们介绍了JavaScript中Object对象的构造、属性、方法及原型链等概念。了解这些基础知识对于掌握JavaScript对象的创建、操作和继承机制至关重要。掌握这些概念,可以帮助我们更好地...
《面向对象的JavaScript原理》是2014年出版的一本关于JavaScript编程的书籍,旨在深入探讨和解析JavaScript中的面向对象编程概念。JavaScript,作为互联网上最广泛使用的脚本语言,其面向对象特性是开发者必须掌握的...