Javascript的对象
来源:互联网 发布:mac谜案处by虎喵喵 编辑:程序博客网 时间:2024/06/06 03:17
- 创建对象
- 对象字面量对象的属性存储
- 对象属性的查找与检索
- 对象属性的更新
- 对象的委托
- 属性的枚举
- 全局命名空间
- 对象的方法
Javascript是一门很灵活多变的语言,也是一门面向对象的语言。在JS的世界里,有“函数是一等公民”“一切皆对象”的说法。
在JS里,对象指的是可变的键控集合。Javascript里有Number,Array,Function,Object,Boolean,Regex,String,Undefined,Null九种类型。在这里面,Array,Function,Object,Regex是对象。
对象是无类型的,并且可以嵌套。对象所包含的是一组名值对的集合,这里的“名”也称作属性,“值”又称作属性值。
那么,我们如何创建一个对象呢?我们该如何使用对象呢?现在我们来一一解答
创建对象
关于如何创建一个对象,一般熟悉Javascript的人能够回答上来两种方法:
第一种:
var newObj = new Object();
第二种:
var newObj = {};
但是,Javascript还为我们提供了第三种创建对象的方法,那就是Object.create()
方法:
var newObj = Object.create({});
对象字面量(对象的属性存储)
在Javascript的对象里,我们采用对象字面量的方式来存储名值对到对象里:
var newObj = { key1: 'value1', //如果值是String类型必须用引号包含 key2: 123 //如果值是Number类型,那么不用引号};
当然,我们属性名和属性值的格式也可以采用JSON的格式:
var newObj = { "key1": "value1", "key2": 123};
关于属性名的格式,如果属性名里包含了短横线,那么,属性名必须使用引号包含,但是,如果是包含的下划线,那么,可以不使用引号包含,比如:
var newObject = { key1_name: 'name1', 'key2-name': 'name2'};
对象是可以嵌套的:
var newObj = { name: 'Erichain', info: { sex: male, age: 21 }};
对象的属性值可以是任意的数据类型:
var newObj = { newStr: 'this is a string', //String newNumber: 123, //Number newBoolean: true, //Boolean newArray: [1, 2, 3], //Array newFunction: function () {} //Function //and so on...};
对象属性的查找与检索
与其它的语言(比如Java,C等)类似,Javascript里的属性查找可以使用小数点的方式:
var newObj = { name: 'Erichain', age: 21};console.log(newObj.name);>> Erichain
也可以使用[属性名]
的方式:
var newObj = { name: 'Erichain', age: 21};console.log(newObj['name']);>> Erichain
同样的,使用小数点的方式访问属性的时候,属性名不能是数字,或者包含有各种符号的。如果有包含符号的属性名,就只能使用[属性名]
的方式访问属性。一般优先考虑使用小数点访问的方式。
如果尝试去访问一个不存在的属性的话,将会返回undefined
:
var newObj = { name: 'Erichain', age: 21};console.log(newObj.girlfriend);>> undefined //够形象了吧
对象属性的更新
Javascript的对象的属性值是可以实时更新的。属性的个数也可以随时进行添加。
var newObj = { name: 'Erichain', age: 21};console.log(newObj.name);>> Erichain//更新属性值newObj.name = 'Zain';console.log(newObj.name);>> Zain//添加新属性newObj.girlfriend = true;console.log(newObj);>> newObj = { name: 'Zain', age: 21, girlfriend: true};
有了属性的添加,肯定就会有属性的删除。我们使用delete
来对对象的属性进行删除:
var newObj = { name: 'Erichain', age: 21};console.log(newObj.name);>> Erichaindelete newObj.name;console.log(newObj.name);>> undefined
对象的委托
Javascript的对象都会有一个叫做prototype
的属性,所有的对象的prototype
都是Object。当我们访问对象的属性值的时候,对象会首先在本对象里面寻找,如果找不到,那么就会到prototype
里面去找,这个寻找的过程就称作委托。
我们可以看一个例子来理解:
var newObj = { name: 'Erichain', age: 21};newObj.prototype.getAge = function () { return this.age;};console.log(newObj.getAge());>> 21
我们没有在newObj里面定义getAge()
方法,但是,我们在它的原型上定义了这个方法,所以,它在本地找不到的时候,会去原型上查找这个方法。这就是委托的过程。
属性的枚举
想要枚举Javascript对象的属性,我们可以使用for in
方法,也可以使用for循环,其中,for in
不会按照属性的顺序来进行枚举:
var newObj = { name: 'Erichain', age: 21};//使用for infor( var name in obj ) { console.log(obj[name] + '\n');}//使用for循环//首先,定义一个数组,来存放相关的属性名var keyName = ['name', 'age'];for( var i = 0; i < newObj.length; i++ ) { console.log(keyName[i] + ':' + newObj[keyName[i]] + '\n');}
全局命名空间
关于Javascript的全局命名空间,我们为了不污染这个空间,一般是在一个js文件里,我们定一个对象,将其他的方法等,都写在这个对象里面:
var namespace = {};namespace.initial = function () {};namespace.getSomeValue = function () {};//and so on...
对象的方法
关于对象的方法,我在这里只简单的介绍一个,就是hasOwnProperty
,用来判断一个对象是否含有某个属性:
var newObj = { name: 'Erichain', age: 21};console.log(newObj.hasOwnProperty('name'));>> trueconsole.log(newObj.hasOwnProperty('girlfriend'));>> false
关于Javascript的对象,要说的话,十篇博文都说不完,这里,是我个人总结了一些常用的东西。如果想要深入学习,大家可以找我互相交流。
- 【JavaScript】JavaScript的对象-内部对象
- 【JavaScript】JavaScript的对象-对象专门语句
- JavaScript的对象
- JavaScript 的对象属性
- 面向对象的javascript
- Javascript的Event对象
- Javascript的Event对象
- javascript的面向对象
- JavaScript的对象
- JavaScript的面向对象
- JavaScript的对象
- JAVASCRIPT的常用对象
- Javascript的event对象
- JavaScript的String对象
- JavaScript的document对象
- Javascript的history对象
- 面向对象的JavaScript
- Javascript的Event对象
- 小结生活,大结工作问题
- 给Array本地对象增加一个原型方法,他的用途是删除数组中重复的条目,并将新的数组返回
- leetcode笔记:Recover Binary Search Tree
- Cocos2d-JS项目结构介绍
- OpenGL中的一些注意点
- Javascript的对象
- 文件进行 MD5 加密的意义
- 关于cfile fopen fopen_s 在windows vista win7 win8 win 10系统盘目录创建文件失败解决方案-- fopen 创建文件失败
- 好多的东西需要掌握!
- oracle基础
- python(3)methods & tips~
- 关于sizeof()函数
- 详解spring: 事务属性的设置
- win32程序判断windows系统(是否为win7或是更高版本)