js中除数字、字符串、布尔值、null值、undefined之外都是对象。

对象是属性的容器,属性包含属性名和值,属性名可以是包括空字符串在内的任意字符串(个人想法还是使用js标识符好,省的麻烦),值可以是除undefined外任何值。

对象是class-free的,对新的属性键值没有限制。

对象可以套嵌,允许继承。

对象字面量:

对象字面量提供了非常方便创建新对象值得方法。

//空对象
var empty_object = {};
//多个键值对
var object1 = {
"first-name":"党兴明",
"last-name":"周林"
};
//可以套嵌
var object2 = {
first_name:"党兴明", //属性名是合法标识符可以不用引号
last_name:"周林",
another_obj1:{
time:"2016-11-09",
city:"hangzhou"
},
another_obj2{
home:"shengzhou"
}
};

检索:

要检索对象里包含的值可以用[]  或  .

优先考虑使用 .

object1["first-name"]  //党兴明
//如果[]中是合法的js标识符,可以
object1.first_name; //党兴明
//object.first_name = "张三"; //如果你检索不存在的属性,会返回undefined
object1.second_name; //undefined
//运算符||可以用来填充默认值
var name = object1.first_name || "unknow" //尝试从undefined的属性中取值,会导致TypeError的错误,可以通过 && 运算符来解决
object1.equipment; //undefined
object1.equipment.model; //TypeError
object1.equipment && object.equipment.model; //undefined

引用:

对象通过引用来传递,他们永远不会被复制。

var stooge = {
first_name:"dangxingming",
last_name:"zhoulin"
}
var x = stooge;
x.nickname = "Curly";
var nick = stooge.nickname;
//因为x 和 stooge指向同一个对象的引用,所以nick为“Curly”
var a = {}, var b = {}, var c = {};
//a b c 都引用不同的空对象
var a = b = c = {};
//a b c 都引用同一个空对象

原型:

每个对象都链接到一个原型对象,并且可以从中继承属性。所有通过对象字面量创建的对象都连接到Object.prototype,它是js中的标配对象。

当你创建一个对象时,可以选择某个对象作为它的原型。我们将给Object增加一个create方法。这个方法创建一个使用原对象作为其原型的新对象。

委托:原型对象只有在检索值时才用到,当我们尝试去获取某对象的值时,但该对象没有该值,那么js就会试着从原型对象中获取属性值。如果再没有,继续向上追溯,直到到达终点Object.prototype。如果还没有,那就是undefined值。

var stooge = {
first_name:"dangxingming",
last_name:"zhoulin"
}
if(typeof Object.beget !=="function"){
Object.create = function(o){
var F = function (){};
F.prototype = o;
return new F();
};
}
var another_stooge = Object.create(stooge);
//当我们对某对象做出改变时,不会触及该对象的原型
another_stooge.first_name = "Harry";
stooge.first_name; //依然是dangxingming
//原型关系是一种动态关系,当我们添加一个新属性到原型中去时,该属性立即对所有基于该原型创建的对象可见
stooge.first_name = "zhangsan";
another_stooge.first_name;//也变成zhangsan

反射:

确定对象的属性类型,typeof操作符和hasOwnProperty()方法
var object2 = {
first_name:"党兴明", //属性名是合法标识符可以不用引号
last_name:"林",
another_obj1:{
time:"2016-11-09",
city:"hangzhou"
},
another_obj2{
home:"shengzhou"
}
};
//typeof
typeof object2.first_name; //string
typeof object2.another_obj1; //Object
//原型链中的任何属性都会产生值
typeof Object2.toString; //function
typeof Object2.constructor; //function
//hasOwnProperty,如果对象拥有独有属性,它将返回true,此方法不会检查原型链
object2.hasOwnProperty("first_name");//true
object2.hasOwnProperty("constructor");//false

枚举:

for in 语句可以用来遍历一个对象中的所有属性名。包括原型中的属性,可以通过hasOwnProperty方法,以及typeof来排除函数:

//for in属性名出现的顺序是不确定的
var name;
for(name in another_stooge){
if(typeof another_stooge.name !== "function"){
document.writeln(name + ":" + another_stooge.name);
}
}

删除:

delete运算符可以用来删除对象的属性。如果对象包含该属性,那么该属性就会被移除,它不会触及原型链中的任何对象。

删除对象的属性可能让原型链中的属性暴露出来
another_stooge.nickname;   //"Moe"
//删除another_stooge属性可能暴露出原型的nickname属性
delete another_stooge.nickname;
another_stooge.nickname; //"Curly"

减少全局变量污染:

最小化使用全局变量的方法是为应用只创建唯一一个全局变量:

var MYAPP = {};

该变量此时变成你的应用的容器:

var MYAPP = {};
MYAPP.stooge = {
first_name:"dangxingming",
last_name:"zhoul"
}
MYAPP.object2 = {
first_name:"党兴明", //属性名是合法标识符可以不用引号
last_name:"林",
another_obj1:{
time:"2016-11-09",
city:"hangzhou"
},
another_obj2{
home:"shengzhou"
}
};

只要把全局性资源纳入一个命名空间下,程序与其他程序、组件、类库发生冲突的可能性会显著降低。

并且更容易阅读,因为很明显MYAPP.stooge指向的是顶层结构。下一章的闭包来进行信息隐藏。

js对象的更多相关文章

  1. JS对象继承篇

    JS对象继承篇 ECMAScript只支持实现继承,而且其实现继承主要是依靠原型链来实现的 原型链 其基本思路是利用原型让一个引用类型继承另一个引用类型的属性和方法 function Person() ...

  2. JS 对象封装的常用方式

    JS是一门面向对象语言,其对象是用prototype属性来模拟的,下面,来看看如何封装JS对象. 常规封装 function Person (name,age,sex){ this.name = na ...

  3. JSON字符串和JS对象之间的转换

    JSON字符串和JS对象之间的转换 1 json字符串转换为js对象 1.1 标准json格式字符串转换为Js对象  JSON字符串 str JSON.parse(str) eval(str) eva ...

  4. js 对象的_proto_

    js 对象呢,有个属性叫_proto_,以前没听说过,也没关注,最近看这个原型,就被迫知道了这个东西,js 这里面的东西,真是规定的很奇怪,具体为啥也不知道,就测试发现的,对象的_proto_属性,和 ...

  5. js对象/数组深度复制

    今天碰到个问题,js对象.数组深度复制:之前有见过类似的,不过没有实现函数复制,今晚想了一下,实现代码如下: function clone(obj) { var a; if(obj instanceo ...

  6. js对象的深度克隆

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. js对象详解

    js自定义对象 一,概述 在Java语言中,我们可以定义自己的类,并根据这些类创建对象来使用,在Javascript中,我们也可以定义自己的类,例如定义User类.Hashtable类等等. 目前在J ...

  8. js对象常用2中构造方法

    //js 对象的构造方法通常有2中情况: //第一种是通过json对象构造 var persion={ name:"孙悟空", age:40, eat:function () { ...

  9. JS对象复制

    在JavaScript很多人复制一个对象的时候都是直接用"=",因为大家都觉得脚本语言是没有指针.引用.地址之类的,所以直接用"="就可以把一个对象复制给另外一 ...

  10. js对象私有变量公有变量问题

    0 js对象私有变量公有变量问题5 小弟初学JS面向对象编程 现有一问题 请教各位大虾: Person=function (){ //私有变量定义 var name; vae age; var Ale ...

随机推荐

  1. AMD正式公布第七代桌面级APU AM4新接口

    导读 本月5日,AMD正式公布了入门级的第七代桌面级APU为Bristol Ridge,在性能和能效方面较上一代产品拥有显著提升.AMD同时确认Zen处理器和新APU(Bristol Ridge)都将 ...

  2. 如何在 CentOS 7 用 cPanel 配置 Nginx 反向代理

    导读 Nginx 是最快和最强大的 Web 服务器之一,以其高性能和低资源占用率而闻名.它既可以被安装为一个独立的 Web 服务器,也可以安装成反向代理 Web 服务器.在这篇文章,我将讨论在安装了 ...

  3. ionic隐藏tabs方法

    <ion-tabs ng-class="{'tabs-item-hide': $root.hideTabs}"> <!-- tabs --> </io ...

  4. git 教程(3)--时光机穿梭

    我们已经成功地添加并提交了一个readme.txt文件,现在,是时候继续工作了,于是,我们继续修改readme.txt文件,改成如下内容 Git is a distributed version co ...

  5. (备忘)android模拟器摄像头模拟

    Camera分Front Camera和Back Camera 通常我们模拟后摄像头就可以了 三个选项 none:表示没有摄像头,打开摄像应用会崩溃 emulated:系统模拟一个动态的画面--在黑白 ...

  6. zabbix之php安装

    转载自: http://www.ttlsa.com/nginx/nginx-php-5_5/ php下载 https://pan.baidu.com/s/1qYGo8bE

  7. 【GoLang】GO语言系列--002.GO语言基础

    002.GO语言基础 1 参考资料 1.1 http://www.cnblogs.com/vimsk/archive/2012/11/03/2736179.html 1.2 https://githu ...

  8. 一个很详细的web.xml讲解

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "- ...

  9. 【leetcode】Valid Number

    Valid Number Validate if a given string is numeric. Some examples:"0" => true" 0.1 ...

  10. poj 2240(floyd)

    http://poj.org/problem?id=2240 题意:有些人会利用货币的不用汇率来进行套现,比如1美元换0.5英镑,而1英镑又可以换10法郎,而1法郎又可以换0.21的美元,那么经过货币 ...