JavaScript的简单数据类型包括数字、字符串、布尔值、null值和undefined值,其他所有的值都是对象。数字、字符串、布尔值“貌似”对象,因为他们拥有方法,但是他们是不可变的。
  JavaScript中的对象是可变的键控集合。在JavaScript中,数组是对象,函数是对象,正则表达式是对象,当然对象自然也是对象。
     对象是属性的容器,其中每个属性都拥有名字和值。属性的名字可以是包括空字符串在内的任意字符串。属性值可以是除了undefined值之外的任何值。
JavaScript的对象是无类型(class-free)的。它对新属性的名字和属性的值没有限制。对象适合用于汇集和管理数据。对象可以包含其他对象,所以它们可以容易地标识成树状或者是图形结构。
  JavaScript包含一种原型链的特性,允许对象继承另一个对象的属性。正确地使用它能减少对象初始化时消耗的时间和内存。
  JavaScript的对象使用一对花括号中0个或者多个“属性名/属性值”对来表示。属性名是合法的时候并不强制要求使用引号
属性的值可以从包括另一个对象字面量在内的任意表达式中获得。对象是可以嵌套的。
 
实例
var stoge = {
"first-name":"Jerome"
}
var flight = {
airline: "Oceanic",
number:815,
departure:{
IATA:"SYD",
time:"2016-01-01 14:55",
city:"Sydney"
},
arrival:{
IATA:"LAX",
time:"2016-01-02 10:42",
city:"Los Angeles"
}
}
检索Retrieval
  要检索对象里面包含的值,有两种方式 [ ]和 . 。[]是在对象后缀中括住一个字符串表达式的方式。如果字符串表达式是一个字符串字面量,而且它是一个合法的JavaScript标识符且不是保留字,那么可以用 . 表示法代替。优先考虑使用 . 表示法,因为它更紧凑且可读性更好。
 
实例
stoge["first-name"]     //返回"Jerome"
flight.departure.IATA //返回 "SYD"
  如果检索一个不存在的成员属性的值,返回undefined
stoge["middle-name"]  //返回undefined
 
  ||可以填充默认值
var middle = stoge["middle-name"] || "{none}"; //返回"{none}"
 
  &&可以避免错误(从undefined的属性成员中取值将会导致TypeError异常)
flight.equipment               //undefined
flight.equipment.model //throw "TypeError"
flight.equipment && flight.equipment.model //undefined
 
更新Update
  对象里的值可以通过复制语句来更新。如果属性名已经存在于对象里,那么这个属性的值就会被替换,如果对象之前没有拥有那个属性ing,那么该属性就被扩充到对象当中。
stoge["first-name"] = "liusxg";
 
引用Reference
  对象通过引用来传递,它们永远不会被复制
var x = stoge;
x.nickname = 'Curly';
var nick = stoge.nickname;
//因为x和stoge是指向同一个对象的引用,所以nick为'Curly'
var a = {}, b = {}, c = {};
//因为a、b和c每个人都引用一个不同的空对象
a = b = c = {}'
//a、b和c都引用同一个空对象
原型Prototype
  每个对象都连接都一个原型独享,并且它可以从中继承属性。所有通过对象字面量创建的对象都连接到Object.prototype,它是JavaScript中的标配对象。
  当你创建一个新对象时,你可以选择某个对象作为它的原型。JavaScript提供的实现机制杂乱而复杂,但其实可以被明显地简化。我们江哥Object增加一个create方法。这个方法创建一个使用元对象作为其原型的新对象。
var another_stoge = Object.create(stoge);
  原型连接在更新时是不起作用的。当我们对某个对象作出该表时,是不会触及改对象的原型
another_stoge["first-name"] = 'Harry';
  原型连接只有在检索值的时候才被用到。如果我们尝试去获取对象的某个属性值,但该对象没有此属性值,那么再从它的原型中寻找,以此类推,知道该过程最后到达终点Object.prototype。如果想要的属性完全不存在于原型链中,那么结果就是undefined值。这个过程称为委托。
  原型关系是一种动态的关系。如果我们添加一个新的属性到原型中,该属性会立即对所有基于该原型创建的对象可见。
stoge.profession = 'action';
another_stoge.profession //'action'
 
反射Reflection
  检查对象并确定对象有什么属性是很容易的事情,只要试着去检索改属性并验证取得的值。
typeof fight.number  //'number'
typeof flight.status //'string'
typeof flight.manifest //'undefined'
  请注意原型链中的任何属性都会产生之:
typrof flight.toString //'function'
typrof flight.constructor //'function'
  有两种方法处理掉这些不需要的属性。第一个是让你的程序做检查并丢弃值为函数的属性,一般来说,当你想让对象在运行时动态获取自身信息时,你关注更多的是数据,而你应该意识到到一些值可能会是函数。
  另一个方法是使用hasOwnProperty方法,如果对象拥有独有的属性,它将返回true。hasOwnProperty方法不会检查原型链。
flight.hasOwnProperty('number')     //true
flight.hasOwnProperty('construction') //true
枚举Enumeration
  for in 语句可用 来遍历一个对象中的所有属性名。该枚举过程将会列出所有的属性--包括函数和你可能不关心的 原型中的属性--所有有必要过滤掉那些你不想要的值。最为常用的过滤器是hasOwnProperty方法,以及使用typeof来排除函数
 
实例
var name;
for (name in another_stoge){
if(typeof another_stoge[name] !== 'function'){
document.write(name + ': ' + another_stoge[name]);
}
}
  属性名出现的顺序是不确定的,因此要对任何可能出现的顺序有所准备。如果你想要确保属性以特定的顺序出现,最好的办法就是不使用for in 语句,而是创建一个数组放置属性名,并以for循环来获取想要的属性值
 
实例
var i;
var properties = [
'first-name',
'middle-name',
'profession'
];
for (i = 0; i < properties.length; i++){
document.writeln(properties[i] + ': ' +
another_stoge[properties[i]]);
}
  这可以直接获取我们需要的属性,而不用担心可能发掘出原型链中的属性。
 
删除Delete
  delete运算符可以用来删除对象属性。如果对象包含该属性,那么该属性就会被移除。它不会触及原型链中的任何对象。
  删除对象的属性可能会让来自原型链中的属性透现出来,
another_stoge.nicknam     //'Moe'
//删除another_stoge的nickname属性,从而暴露出原型的nickname属性。
delete another_stoge.nickname;
another_stoge.nickname // 'Curly'
 
减少全局变量污染Global Abatement
  JavaScript可以很随意地定义全局来容纳你的应用的所有资源。但是全局变量削弱了程序的灵活性。
  最小化使用全局变量的方法之一就是为你的应用只创建一个唯一的全局变量

var MYAPP = {};
  该变量此时就变成了你应用的容器
MYAPP.stoge = {
"first-name":"Joe",
"last-name":"Howard"
};
MYAPP.flight = {
airline: "Oceanic",
number:815,
departure:{
IATA:"SYD",
time:"2016-01-01 14:55",
city:"Sydney"
},
arrival:{
IATA:"LAX",
time:"2016-01-02 10:42",
city:"Los Angeles"
}
};
  只要把全局性的资源都纳入一个名称空间之下,你的程序与其他应用程序、组件或者类库之间发生冲突可能性就会显著降低。同时也可以使用闭包来减少全局污染。

JavaScript对象(Object)的更多相关文章

  1. 深入JavaScript对象(Object)与类(class),详细了解类、原型

    JavaScript基于原型的对象机制 JavaScript原型上的哪些事 一.JavaScript基于原型的对象机制 JavaScript对象是基于原型的面向对象机制.在一定程度上js基于原型的对象 ...

  2. JavaScript对象 Object类型基础

    前言 JavaScript 对象是整个语言学习的一个难点.本文主要带大家入门学习Object知识 对象定义 javascript的基本数据类型包括undefined.null.boolean.stri ...

  3. JavaScript对象Object

    <script> var obj = new Object(); var obj2 = {}; obj2.firstName = "wang"; obj2.lastNa ...

  4. Javascript 对象Object

    1.new构造函数法 2.对象字面量 对象字面量很好理解,使用key/value的形式直接创建对象,简洁方便.   这种方式直接通过花括号将对象的属性包起来,使用key/value的方式创建对象属性, ...

  5. javascript ES5 Object对象

    原文:http://javascript.ruanyifeng.com/stdlib/object.html 目录 概述 Object对象的方法 Object() Object.keys(),Obje ...

  6. JavaScript之Object对象常用属性与方法手册

    MDN Object参考地址:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Obje ...

  7. es6 javascript对象方法Object.assign()

    es6 javascript对象方法Object.assign() 2016年12月01日 16:42:34 阅读数:38583 1  基本用法 Object.assign方法用于对象的合并,将源对象 ...

  8. javascript——对象的概念——Object(未完)

    http://www.blogjava.net/zkjbeyond/archive/2006/04/16/41336.html javascript中对象只包括属性和方法两种成员.ECMA-262 把 ...

  9. json与JavaScript对象互换

    1,json字符串转化为JavaScript对象: 方法:JSON.parse(string) eg:var account = '{"name":"jaytan&quo ...

随机推荐

  1. 每天一个linux命令(26):用SecureCRT来上传和下载文件

    用SSH管理linux服务器时经常需要远程与本地之间交互文件.而直接用SecureCRT自带的上传下载功能无疑是最方便的,SecureCRT下的文件传输协议有ASCII.Xmodem.Zmodem. ...

  2. SoapUI测试WS接口实战

    引文: 本文讨论以下问题: 视频播放功能如何进行压力测试? 进行webservices接口测试时,用LR和soapui哪个工具更好? 1 测试需求 前几天接到一项压力测试的任务:视频播放功能的并发压力 ...

  3. 使用jasperreports-5.6.0.jar导致的问题

    使用jasperreports-5.6.0.jar导致的问题 Struts2+jasperReport5.6如下设置: <!-- 社员档案 --> <package name=&qu ...

  4. 数据可视化(8)--D3数据的更新及动画

    最近项目组加班比较严重,D3的博客就一拖再拖,今天终于不用加班了,赶紧抽点时间写完~~ 今天就将D3数据的更新及动画写一写~~ 接着之前的博客写~~ 之前写了一个散点图的例子,下面可以自己写一个柱状图 ...

  5. c#连接mysql环境配置

    写.net的时候一直用的都是sql sever,mysql小 有命令行方便就想试了一下,网上搜很久,下载很多配置文件都不成功.昨晚上搞到两点多,冒着生命危险. 后来终于在一个网站上找到这个 MySQL ...

  6. 队列的存储结构和常见操作(c 语言实现)

    一.队列(queue) 队列和栈一样,在实际程序的算法设计和计算机一些其他分支里,都有很多重要的应用,比如计算机操作系统对进程 or 作业的优先级调度算法,对离散事件的模拟算法,还有计算机主机和外部设 ...

  7. javascript学习4

    JavaScript Date(日期)对象 日期对象用于处理日期和时间. JavaScript Date(日期)对象 实例 返回当日的日期和时间 如何使用 Date() 方法或者当日的日期. getT ...

  8. Math.ceil(a/b)结果出错--原因是a和b不是double

    脑袋短路.连续测试几次发现Math.ceil(188/20)==9; 忍无可忍,突然发现是int问题,顺着表达式走一遍,188/20==9,然后再向上取整.脑袋僵化了.看来一直做简单的不动脑筋的工作, ...

  9. 第1/24周 SQL Server 如何执行一个查询

    大家好,欢迎来到第1周的SQL Server性能调优培训.在我们进入SQL Server性能调优里枯燥难懂的细节内容之前,我想通过讲解SQL Server如何执行一个查询来建立基础.这个部分非常重要, ...

  10. elasticsearch 查询(match和term)

    elasticsearch 查询(match和term) es中的查询请求有两种方式,一种是简易版的查询,另外一种是使用JSON完整的请求体,叫做结构化查询(DSL). 由于DSL查询更为直观也更为简 ...