JavaScript 之 对象
Posted 潇洒滴大师
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript 之 对象 相关的知识,希望对你有一定的参考价值。
一、对象是个啥
对象是javascript的基本数据类型。对象是一种复合值:它将很多值(原始值或者其他对象)聚合在一起,可通过名字来访问这些值。除了字符串、数字、false、true、null和undefined之外,javascript中的值都是对象。
首先对象是可变的(原始值是不可变的),他们的值可以进行修改,怎么比较两个对象是否相等?即使两个对象包含同样的属性和属性值,他们也是不相等的。各个索引元素完全相等的两个数组也是不相等的。请看下面的代码
var a = [1,2,3]; var b = [1,2,3]; console.log(a==b) //false var aa = []; var bb = []; console.log(aa==bb) //false
通常我们将对象称为引用类型,以此来和javascript的基本数据类型区分开来,按照术语的叫法,对象值都是引用,对象的比较均是引用的比较;当且仅当它们引用同一个基对象时,它们才相等。请看下面代码
var aaa = []; var bbb = aaa; bbb[0] = 1; console.log(aaa) //[1] console.log(aaa===bbb) //true
那么如何得到一个对象或数组的副本(目的是修改副本却不想修改被复制的对象或数组),则必须显式复制对象的每一个属性或数组的每一个元素,请看下面代码
var es = [\'a\',\'b\',\'c\']; var ea = []; for(var i=0;i<a.length;i++){ ea[i] = es[i] } console.log(ea); //["a", "b", "c"] ea[0] = \'Q\'; console.log(ea); //["Q", "b", "c"] console.log(es); //["a", "b", "c"]
对象最常见的用法就是创建、设置、查找、删除、检测和枚举它的属性。属性包括名字和值,除了名字和值之外,每个属性还有一些与之相关的值,称之‘“属性特性”
- 可写,表明是否可以设置该属性的值。
- 可枚举,表明是否可以通过for/in循环返回该属性。
- 可配置,表明是否可以删除或修改该属性。
下面用术语来对三类javascript对象和两类属性作区分:
- 内置对象:ECMAscript规范定义的对象或类。例如,数组、函数、日期和正则表达式都是内置对象。
- 宿主对象:是由javascript解释器所嵌入的宿主环境定义的。
- 自定义对象:是由运行中的javascript代码创建的对象。
- 自有属性:是直接在对象中定义的属性。
- 继承属性:是在对象的原型对象中定义的属性。
二、创建对象
可以通过 对象直接量、关键字new和object.create()函数来创建对象。
1 、对象直接量
使用对象直接量最简单的创建对象的方式,请看下面例子:
var empty = {}; var point = {x:1,y:2};
2、通过new创建对象
new运算符创建并初始化一个新对象。关键字new后面跟一个函数调用。这里的函数称作构造函数,构造函数用以初始化一个新创建的对象。请看下面例子:
var o = new Object(); //创建一个空对象,和{}一样 var a = new Array(); //创建一个空数组,和[]一样 var d = new Date(); //创建一个表示当前时间的Date对象 var r = new RegExp("js"); //创建一个RegExp对象
3、原型
中间穿插一下,先说一下原型,这里懒得打字,插一张图
4、Object.create()
Object.create(),其中第一个参数是这个对象的原型。Object.create()提供第二个可选参数,用以对对象的属性进行进一步描述(稍后再补充第二个参数的用法),Object.create()是一个静态函数,请看下面代码:
var o1 = Object.create({x:1,y:2}); //o1继承了属性x和y
可以创建一个普通的空对象
var o3 = Object.create(Object.prototype) //o3和之前的{}和new Object()一样
5、属性的查询与设置
先看例子:
var book = { anthor:\'aaa\', name:\'bbb\', }; console.log(book.anthor) //aaa console.log(book["name"]) //bbb
可以通过点(.)或方括号([ ])运算符来获取属性的值和设置属性。但有两点需要注意,第一、[ ]括号里面的表达式必须返回字符串。第二、. 运算符的标识符不能是关键字。
6、继承
待补充~
7、属性访问错误
一、查询一个不存在的属性不会报错,会返回undefind。
二、但如果对象本身都不存在,你再试图去访问一个不存在的对象上面的属性,就肯定会报错。
三、给null和undefined设置属性也会报错
四、有一些属性是只读的,不能重新赋值,有一些对象不允许新增属性,但让人要命的是,这些失败操作竟然都不报错。
未完待续~
以上是关于JavaScript 之 对象 的主要内容,如果未能解决你的问题,请参考以下文章