创建对象:

var o = new Objct();   //创建一个空对象
var o = {}; var a = new Array(); //创建一个空数组
var a = []; var d = new Date(); //创建一个表示当前时间的日期对象

对象属性的设置:

book.edition = 6             //给book创建一个edition的属性
book[ "mainTile" ] = "ECMASript" //给mainTile属性赋值
book[i] = param; //如果有多个属性与值,可以使用这种方法,只要将i与param传回来,就可以给book这个数组设置多个属性与值

如果一个对象的属性我是保留字,必须使用 [] 的形式访问他们: o["class"] / o["for"],使用方括号时,方括号内的表达式必须返回为字符串。

作为关联数组的对象:

Object["property"]     //方括号和一个数组,数组元素通过字符串索引。
  • 通过 . 访问对象时,属性名是一个标识符,这个标识符必须直接出现在js的代码中,比如接口的属性,因此程序无法修改它们
  • 通过 []  访问对象时,属性名是一个字符串,字符串是js的一个数据类型,可以通过程序修改和创建它们

场景:由于在写程序时无法知道属性名称,因此无法通过 . 来访问对象的属性。但可以使用 [] ,因为它使用字符串值(字符串是可以更改的)而不是标识符(标识符是静态的,不可以更改的)作为索引对属性进行访问的。

下面两个JS的表达式的值相同:

Obj.property
Obj["property"]

当通过 [] 来访问对象的属性时,属性名通过字符串来表示。如果无法得知属性名称是什么的时候,可以使用  Obj ["属性名称"] = value,这个属性名称是动态的,可以在运行时更改

场景:如果访问对象的属性时,而没有这个属性,会报错,那么怎么避免这种没有属性的错误呢?

var len = book && book.sub && book.sub.length;

属性的操作:

删除:  delete

delete book.str;           //删除book的str属性
delete book["srt"]; //删除book的str属性

判断某个属性是否存在于某个对象中,使用 in 运算符:左侧为属性(字符串),右侧为对象,in 可以区分不存在的属性存在但值为undefined的属性

var o = {x:1,w}

"x" in o; //true,存在的属性

"y" in o; //false,不存在的属性

"w" in o //false,  存在的属性,但值为undefined

如何遍历对象的属性,使用 for / in  ,它可以遍历所有的属性,包括自有属性和继承属性。

用来枚举属性的对象工具类函数

function extend(o,p){                //两个对象参数
for(str in p){ //遍历p中的所有属性
o[str] = p[str]; //将属性添加到o中
}
return o; // 返回 o 对象
}

增强版的枚举属性的对象工具类函数:

/*将p中可枚举的属性复制至o中,并返回o
* 如果 o与p 中有同名的属性,o 中的属性不受影响
* 这个函数并不处理getter 和 setter 以及复制属性
*/ function extend(o,p){ //两个对象参数
for (prop in p){ //遍历p中的所有属性
if(o.hasOwnProperty[prop]) continue; //过滤已经在o中存在的属性
o[prop] = p[prop]; //将属性添加至o中
}
return o; //返回o
}

检测属性是否为undefined:使用 !== 进行判断,    “!==”可以区分undefined 和 null

var o = {x : 1}

o.x !== undefined;           //true, o中有x这个属性
o.y !== undefined; //false,o中没有y这个属性

返回一个数组,这个数组包含 o 中可枚举的自有属性的名称

function keys(o){
if( typeof o !== "object") throw TypeError(); //参数必须是对象
var result = []; //将要返回的数组
for(var prop in o){ //遍历可枚举的属性
if (o.hasOwnProperty(prop)) //判断是否是自有属性
result.push(prop); //将属性名添加至数组中
}
return result; //返回这个数组
}

如何删除属性? delete ,只能删除自有属性,不能删除继承属性

delete book.name;

delete book['name'];

  • 以下是一些实用的枚举属性的方法:
for(p in o){
if( !o.hasOwnProperty(p) ) continue; //跳过继承的属性
} for( p in o){
if(typeof o[p] === 'function') continue; //跳过方法
}
function extend(o,p){    //把p中可枚举的属性复制到o中
for(prop in p){ //遍历p中所有属性
o[prop] = p[prop]; //将属性添加至o 中
}
return o; //返回 o
}

判断某个属性是否为该对象的自有属性,对于继承属性则返回 false.

hasOwnProperty()     这个方法用来检测给定的名字是否是对象的自有属性


function merge(o, p){
for (prop in p){ //遍历p中所有属性
if (o.hasOwnProperty [prop]) continue; //过滤掉已经存在o中的属性
o [prop] = p [prop]; //将属性添加到 o 中
}
return o; //返回 o
}
function delp(o, p){
for (prop in o) { //遍历o中所有的属性
if (! (prop in p) delete o[prop]); //如果p不存在,则删除p
}
return o; //返回o
}
function subtrac (o, p){
for(prop in p) { //遍历p中的属性
delete o[prop] //从o中删除这个属性
}
retrun o;
}
function oobj (o, p){
return newObj (extend (extend ( {},o),p); //返回一个新的对象,这个对象拥有 o 和 p的属性
}
hasOwnProperty()     这个方法用来检测给定的名字是否是对象的自有属性
function keys(o){
if (typeof o !== 'object') throw TypeError(); //参数必须是对象
var result = []; //将要返回的数组
for( var prop in o ){ //遍历所有可枚举的属性
if (o.hasOwnProperty (prop)); //判断是否有自有属性
result.push(prop); //将属性名添加至数组中
}
return result;
}

对象的三个属性:

  • 原型属性
  • 类属性
  • 可扩展性

原型属性是在实例对象创建之初就设置好的,对象的原型属性是用来继承属性的,要想检测一个对象是否是另一个对象的原型,请使用 isPrototypeOf() = instanceof()  ,这两个方法的功能非常类似

var p {x:1};                  //定义一个原型对象
var o = Object.create(p); //使用这个原型创建一个对象
p.isPrototypeOf(o); //true时,继承自p
Object. prototypeOf(o); //true时,p继承自 Object.prototype

对象的类属性是一个字符串,用以表示对象的类型信息。现在还没有提供这样的属性方法,只有一种间接的方式可以查询它:toString(),因此,要想获得对象的类,可以调用对象的toString方法,然后返回一个字符串,如何正确的使用类属性的toString方法:

//一个公共的classOf函数,可以返回传递给它的任意对象的类,这个函数可以传入任意类型的参数,数字、字符串和布尔值都可以直接调用toString方法,就和对象调用toString方法一样

function classof(o){
if(o === null) return "Null";
if(o === undefined) return "Undefined";
return Object.prototype.toString.call(o).slice(8,-1);
}

对象的可扩展性用以表示是否可以给对象添加新属性。所有的内置对象和自定义对象都是可扩展的。

***********对象的序列化***********是指将对象的状态转换为字符串,也可将字符串还原为对象,这些数据都使用JSON作为数据交换格式,提供了如下方法进行转换:

JSON.stringify(o);   //将一个对象解析为JSON字符串
JSON.parse(str); //从字符串中解析出JSON对象
var str = '{"name":"huangxiaojian","age":"23"}'

JSON.parse(str);

//结果为:
//注意:单引号写在{}外,每个属性名都必须用双引号,否则会抛出异常。 {
age: "23"
name: "huangxiaojian"
} var a = {x:1,y:10} JSON.stringify(a) //结果为: "{"a":1,"y":10}"

avascript 中可以动态添加 对象属性

<html>
<head>
<script type="text/javascript">
var obj = new Object();
alert (obj.username);
obj.username = "allen";
alert (obj.username);
</script>
</head>
<body>
</body>
</html>

结果:
依次打印出 undefined, allen

也可用类似 EL (Expression Language)那样用“[]”表示。写成 obj["username"] = "allen";

如何删除属性? 使用 delete

<html>
<head>
<script type="text/javascript">
var obj = new Object();
obj["username"] = "allen";
alert (obj.username);
delete obj.username;
alert (obj.username);
</script>
</head>
<body>
</body>
</html>

结果:依次打印 allen, undefined. 说明 username 属性已经删除。

另外还有一种定义属性的方法,而且是我们必须掌握的:

<html>
<head>
<script type="text/javascript">
var obj = {username:"allen", password:"123"};
alert(obj.username);
alert(obj.password);
</script>
</head>
<body>
</body>
</html>

javascript 对象实例的更多相关文章

  1. 吴裕雄--天生自然 JAVASCRIPT开发学习:JavaScript 对象 实例

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  2. 如何理解javaScript对象?

    在我们生活中,常常会提到对象一词,如:你找到对象了吗?你的对象是谁呀?等等. 在我们家庭中,有男友的女青年都会说我有对象了,那么她的对象是XX(她的男友). 夫妻间呢?都会说我的爱人是谁谁谁,现在我们 ...

  3. JavaScript 对象JavaScript 对象

    JavaScript 中的所有事物都是对象:字符串.数值.数组.函数... 此外,JavaScript 允许自定义对象. 所有事物都是对象 JavaScript 提供多个内建对象,比如 String. ...

  4. 创建 JavaScript 对象

    http://www.w3school.com.cn/js/js_objects.asp 创建 JavaScript 对象 通过 JavaScript,您能够定义并创建自己的对象. 创建新对象有两种不 ...

  5. javascript 对象简单介绍(一)

    JavaScript 对象JavaScript 中的所有事物都是对象:字符串.数值.数组.函数...此外,JavaScript 允许自定义对象.所有事物都是对象JavaScript 提供多个内建对象, ...

  6. javascript对象如何使用

    javascript对象如何使用 一.总结 一句话总结:JavaScript 中的所有事物都是对象:字符串.数值.数组.函数... 因为函数是对象,所以自定义对象的创建中有种方法就是函数 1.js中的 ...

  7. JavaScript Browser 对象 实例

    使用JavaScript来访问和控制浏览器对象实例. Window 对象 弹出一个警告框 弹出一个带折行的警告框 弹出一个确认框,并提醒访客点击的内容 弹出一个提示框 点击一个按钮时,打开一个新窗口 ...

  8. JavaScript教程——实例对象与 new 命令

    典型的面向对象编程语言(比如 C++ 和 Java),都有“类”(class)这个概念.所谓“类”就是对象的模板,对象就是“类”的实例.但是,JavaScript 语言的对象体系,不是基于“类”的,而 ...

  9. Javascript进阶:对象实例属性和方法

    Ecmascript中,Object类型是所有它的实例的基础.换句话说,Object类型所具有的任何属性和方法也同样存在于更具体的对象中. Object的每个实例都具有以下属性和方法,这些都能方便于我 ...

随机推荐

  1. Stanford机器学习笔记-5.神经网络Neural Networks (part two)

    5 Neural Networks (part two) content: 5 Neural Networks (part two) 5.1 cost function 5.2 Back Propag ...

  2. 第30课 Qt中的文本编辑组件

    1. 3种常用的文本编辑组件的比较 单行文本支持 多行文本支持 自定义格式支持 富文本支持 QLineEdit (单行文本编辑组件) Yes No No No QPlainTextEdit (多行普通 ...

  3. Json数据的学习

    JSON 教程 <body><h2>JSON Object Creation in JavaScript</h2> <p>Name: <span ...

  4. 转:软件架构入门 (from 阮一峰)

    说明:其中讲到了 5 种的架构模型,很不错. from: http://www.ruanyifeng.com/blog/2016/09/software-architecture.html

  5. Zygote浅谈

    Zygote是什么 操作系统中,进程实际上是文件到地址空间的映射像.进程将要运行时,由操作系统将其映射到地址空间,完成这项工作的事物本质也应是一个进程,我们称这个进程为孵化进程,那么这个进程怎么收到消 ...

  6. 在Android中如何获取视频的第一帧图片并显示在一个ImageView中

    String path  = Environment.getExternalStorageDirectory().getPath(); MediaMetadataRetriever media = n ...

  7. sql server 修改表结构语法大全

    1.增加字段 ) 2.删除字段 alter table table_name drop column column_name 3.修改字段类型 alter table table_name alter ...

  8. CentOS RHEL 安装 Tomcat 7

    http://www.davidghedini.com/pg/entry/install_tomcat_7_on_centos This post will cover installing and ...

  9. JS 关闭 页面 浏览器 事件

    JS监听关闭浏览器事件关键字: js监听关闭浏览器事件Onunload与OnbeforeunloadOnunload,onbeforeunload都是在刷新或关闭时调用,可以在<script&g ...

  10. c#描述异常处理语句try、catch、finally执行时的相互关系

    try里面是执行代码,其中的代码"可能"产生异常. catch是对产生异常后的处理代码,可以抛出异常,也可以显示异常,也可以弹出某中提示,总之catch里是任何代码都行,如果你知道 ...