原文:从头开始学JavaScript (十一)——Object类型

一、object类型

一个object就是一系列属性的集合,一个属性包含一个名字(属性名)和一个值(属性值)。

object对于在应用程序中存储和传输数据而言,是非常理想的选择

二、创建object

创建object实例有两种方法:

  • 使用new 操作符后跟object构造函数
  • 使用对象初始化器,也就是对象字面量表示法

2.1使用new 操作符后跟object构造函数创建object实例:

  var person = new Object();
person.name = "Nicholas";
person.age = 29;

和其他 javascript 变量一样,对象的名字(可以是普通的变量)和属性的名字都是大小写敏感的。

2.2使用对象字面量表示法创建object实例:

 var person = {
name : "Nicholas",
age : 29
};

每个属性用”,“隔开,最后一个属性不能加”,“否则在某些浏览器中会报错。

2.2.1在使用字面量表示法时,属性名也可以用字符串表示:

  var person = {
"name" : "Nicholas",
"age" : 29,
5:true
};

这个例子包含3个属性:name、age、5,这里的数值属性名会自动转化成字符串。

2.2.2在使用对象字面量表示法时,如果留空{},则可以定义只包含默认属性和方法的对象:

  var person = {};
person.name = "Nicholas";
person.age = 29;

向函数传递大量可选参数时,建议使用字面量表示法:

   function displayInfo(args) {
var output = ""; if (typeof args.name == "string"){
output += "Name: " + args.name + "\n";
} if (typeof args.age == "number") {
output += "Age: " + args.age + "\n";
} alert(output);
} displayInfo({
name: "Nicholas",
age: 29
}); displayInfo({
name: "Greg"
});

首先使用typeof操作符检测每个属性是否存在,然后再针对这个属性执行操作。

三、object属性表示法

  • 点表示法
  • []表示法

3.1点表示法

 var person = {
"name" : "Nicholas",
"age" : 29
}; alert(person.name);
alert(person.age);

最后两行就是用点表示法获取object属性的。

3.2[]表示法

如下:

  var myCar = new Object();
myCar.make = "Ford";
myCar.model = "Mustang";
myCar.year = 1969;
alert(myCar["make"]+myCar["model"]+myCar["year"]);

最后一行就是用[]表示法来获取object属性的。

因为每个属性都有一个用于访问它的字符串值(也就是键:值对中的键),所以对象有时也被叫作关联数组。

  • 可以通过变量来访问属性   
var  pName="name";
alert(cat[pName]);
  • 如果属性名中包含会导致语法错误的字符(例如,一个有空格或短横线,或者以数字开头的属性名),或者属性名使用的是关键字或保留字,也可以用方括号表示法。

cat["lovely brother"]="Tom"; 属性名中包含空格所以不能使用点表示法访问它。

  • 在属性名称是动态判定(属性名只有到运行时才能判定)时非常有用,详见下文中的for...in循环

四、枚举一个对象的所有属性

    • for...in 循环
    • Object.keys(o)
    • Object.getOwnPropertyNames(o)

4.1for...in 循环

该方法依次访问一个对象的自身属性及其原型链中所有可枚举的属性。

 var obj = {a:1, b:2, c:3};
for (var prop in obj) {
console.log("obj." + prop + " = " + obj[prop]);
}

prop是属性名。obj[prop]是用[]的方法获取对象的属性值。

4.2Object.keys(o)

该方法返回一个对象自身包含(不包括原型中)的所有属性的名称的数组,该数组所有值均为字符串。

 var obj={"No1":"a","No2":"b"}
alert(Object.keys(obj));

4.3Object.getOwnPropertyNames(o)

该方法返回一个数组,它包含了对象 o 所有拥有的属性(无论是否可枚举)的名称。

(未完待续。。。)

从头开始学JavaScript (十一)——Object类型的更多相关文章

  1. 从头开始学JavaScript (十三)——Date类型

    说明:UTC:国际协调日期 GMT:格林尼治标准时间 一.date类型的创建 使用new操作符和Date()构造函数 var now=new Date(): 传入参数:Date.parse()和Dat ...

  2. 从头开始学JavaScript (十二)——Array类型

    原文:从头开始学JavaScript (十二)--Array类型 一.数组的创建 注:ECMAscript数组的每一项都可以保存任何类型的数据 1.1Array构造函数 var colors = ne ...

  3. 从头开始学JavaScript (八)——变量

    原文:从头开始学JavaScript (八)--变量 一.变量分类: 基本类型值:null.undefined.number.string.Boolean: 引用类型值:保存在内存中的对象,如:Obj ...

  4. 从头开始学JavaScript (四)——操作符

    原文:从头开始学JavaScript (四)--操作符 一.一元操作符 1.自增自减操作符:分为前置型和后置型: 前置型:++a;--a; 后置型:a++;a--; 例: <script typ ...

  5. 从头开始学JavaScript (三)——数据类型

    原文:从头开始学JavaScript (三)--数据类型 一.分类 基本数据类型:undefined.null.string.Boolean.number 复杂数据类型:object object的属 ...

  6. 从头开始学JavaScript (十)——垃圾收集

    原文:从头开始学JavaScript (十)--垃圾收集 一.垃圾收集 1.1javascript垃圾收集机制: 自动垃圾收集,执行环境会负责管理代码执行过程中的使用的内存.而在C和C++之类的语言中 ...

  7. 从头开始学JavaScript (六)——语句

    原文:从头开始学JavaScript (六)--语句 一.条件分支语句:if 基本格式: if (<表达式1>){    <语句组1>}else if (<表达式2> ...

  8. 从头开始学JavaScript (五)——操作符(二)

    原文:从头开始学JavaScript (五)--操作符(二) 一.乘性操作符 1.乘法:*      乘法操作符的一些特殊规则: 如果操作数都是数值,按照常规的乘法计算,如果乘积超过了ECMAscri ...

  9. 从头开始学JavaScript (二)——变量及其作用域

    原文:从头开始学JavaScript (二)--变量及其作用域 一.变量 ECMAscript变量是松散型变量,所谓松散型变量,就是变量名称可以保存任何类型的数据,每个变量仅仅是一个用于保存值的占位符 ...

随机推荐

  1. Android SDK 和 Eclipse ADT 离线安装 教程

    因为google 被限制,就是FQ后,下载的速度依旧非常慢,让人非常崩溃啊,所以这里就分享一下离线安装android SDK 和eclipse ADT 离线安装方法. 安装之前首先已经确保java s ...

  2. Android多点触控(图片的缩放Demo)

    本文主要介绍Android的多点触控,使用了一个图片缩放的实例,来更好的说明其原理.须要实现OnTouchListener接口,重写当中的onTouch方法. 实现效果图:       源码: 布局文 ...

  3. PhoneGap 开发与应用 上传 App Store 在

    几个简单的归纳过程,前提是你有一个开发者账户,而且必须有Mac 虚拟机或真机.尽管WIndows 也可以上载证书.但最终也必须用于上传应用程序 Xcode 要么  Application Loader ...

  4. 【C语言】推断一个数的奇偶(位操作)

    //推断一个数的奇偶 #include <stdio.h> int is_signal(int num) { if (num & 1) return 1; else return ...

  5. UI标签库的话题:JEECG智能开发平台 BaseTag(样式表和JS标签的引入)

    UI标签库专题一:JEECG智能开发平台 BaseTag(样式表和JS引入标签) 1.BaseTag(样式表和JS引入标签) 1.1. 演示样例 <t:base type="jquer ...

  6. 写hive sql和shell脚本时遇到几个蛋疼的问题!

    错误一: Hive的where后不能用字段的别名, 错误二: hive的groupby中不能用自己定义函数,否则报错(用嵌套select取代) 错误三: 运行:$ ./hive_game_operat ...

  7. 解决无法切换到jenkins用户的问题

    su - jenkins一直有效,今天在centos发现无效,原因是 /etc/password文件里的/bin/bash被yum安装的时候变成了/bin/false. 改动后就能够了. ubuntu ...

  8. ReferenceTypeDemo

    对象a作为参数argument在方法中使用时,如果argument在方法中赋予另一个对象的地址,则之后方法中对参数argument的操作,都不会影响到对象a. 方法中参数argument如果是对象,a ...

  9. Codeforces Round #107 (Div. 2)---A. Soft Drinking

    Soft Drinking time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  10. Cocos2d-x3.3它DrawPrimitivesTest分析

    1.代码列表 2.VisibleRect类 该类是test-cpp自带工具类 3.HelloWorldScene类 同前面代码 4.DrawPrimitivesDemo类 1).h文件 #includ ...