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. JavaScript开发的技巧

    1. 使用===取代==    ==和!=操作符会在需要的情况下自动转换数据类型.但===和!==不会,它们会同时比较值和数据类型,这也使得它们要比==和!=快. "){ //速度慢 } & ...

  2. 自定义Image自动切换图像控件

    做这么一个控件,图片自动切换,形成动画效果. 随便的码码,码完发现东西太少了,不过还算完善. public class MyPictureBox : PictureBox { Timer timer ...

  3. MVC及WebAPI添加Jsonp支持

    Windows Live Writer 有点问题,着色代码看起来不清晰,所以贴的图片,完整代码在最后. 1:MVC实现 大致思路就是实现一个JsonpResult,在ExecuteResult内实现支 ...

  4. Introduction of Open CASCADE Foundation Classes

    Open CASCADE Foundation Classes Open CASCADE基础类 eryar@163.com 一.简介 1. 基础类概述 Foundation Classes Overv ...

  5. 信息加密之Base64

    Base64是一种最简单的简单的加密形式,经常被使用,记录一下,以便日后可以深入了解. jdk格式: //获得密钥Base64Encoder encoder = new Base64Encoder() ...

  6. VS2013正则表达式应用示例

    VS2013正则表达式语法 在查找替换对话框中查看 VS2013语法可在查找替换对话框中查看,具体过程如下: 通过编辑->查找和替换->在文件中替换或者相应快捷键(Ctrl+Shift+H ...

  7. 应用 CSS3 动画实现12种风格的通知提示

    今天我们想分享几个简单的款式的网站通知效果.有很多的方式来呈现消息给用户:从经典的咆哮般的通知到窗口顶部的通知栏.各个网站的通知样式和效果千篇一律,难得出现创意的通知效果.这里是实现一个应用 CSS3 ...

  8. 推荐20款基于 jQuery & CSS 的文本效果插件

    jQuery 和 CSS 可以说是设计和开发行业的一次革命.这一切如此简单,快捷的一站式服务.jQuery 允许你在你的网页中添加一些真正令人惊叹的东西而不用付出很大的努力,要感谢那些优秀的 jQue ...

  9. Android安装BusyBox(三星N7108)

    近期公司安卓app测试,分配任务为监控APP内存.CPU占用率.因安卓是基于linux开发,故很容易就联想使用Linux监控相关的命令.想法总是美好的,现实总是残酷的,使用三星 Galaxy Note ...

  10. Windows Azure Traffic Manager (6) 使用Traffic Manager,实现本地应用+云端应用的高可用

    <Windows Azure Platform 系列文章目录> 注意:本文介绍的是使用国内由世纪互联运维的Azure China服务. 以前的Traffic Manager,背后的Serv ...