JavaScript-对象

2019-02-18  本文已影响0人  qh0814

1.概述

JavaScript的对象是一种特殊又重要的数据类型。从结构上来说,对象就是一些以键值对无序组合起来的数据类型,键名称为属性,键值则是属性的值。从它的内容上看,对象内部可以包含各种类型的数据,这些数据的数据结构可以是number、string甚至一些function,对象内部的function称之为方法。方法可以作为接口给外部调用。相比number、string、boolean等其他数据结构,对象是一种带有属性与方法的复杂数据类型。
JavaScript自带了多种对象。如:Date对象、Array对象等。

2.对象的创建

这里有3种创建对象的方法:
1.字面量方式

//创建一个名为role的对象,并定义相关属性及值。
var role = {
  name:'name'
  HP:'1000'
  MP:'500'
  level:'1'
}

2.构造函数

var role = new Object()
role.HP = '1000'
//...

3.Object.create

var a = {
  print:function(){
    console.log('Obj.create')
  }
}
var b = Object.create(a)
Object.getPrototypeOf(b) === a //b对象继承a对象所有的属性和方法
b.print() // Obj.create

3.属性

var obj = {
  3s:'sss'  //报错
  '3s':'sss' //不报错
}

4.对象的操作

读写属性
读写属性的方法一是使用 . 运算符,二是使用 [ ] 运算符

var a = {b:'1'}
a.b //1
a['b'] //1

使用[ ]运算符时,里面的属性必须加上引号,否则会跟同名变量冲突

var a = {b:'1'}
b='2'
a[b] //undefined

上图中b没有加引号,所以被当成变量处理,由于a对象里没有‘2’这个属性,所以返回undefined。

数字键名不能用 . 运算符,因为会被当成小数点,然后报错。

var a = {123:'123'}
a.123  //报错
a[123] //'123'
报错信息

JavaScript允许创建对象后随时新增属性

var a = {}
a.b='c'
a.b //'c'

Object.keys()方法可以查看对象所有属性

var a = {b:1,c:2}
Object.keys(a)  //["b","c"]

delete 命令可以删除对象属性,返回布尔值,若属性不存在返回true,若属性无法删除,则返回false。该命令只能删除自身属性,无法删除继承属性。

var a = {b:1,c:2}
Object.keys(a)  //["b","c"]
delete a.b
Object.keys(a)  //["c"]
delete a.c
Object.keys(a)  //[]

in 运算符判断属性是否存在,但无法判断是否为继承属性,若为继承属性也会返回true

var a = {b:'b'}
'b' in a  //true
 b in a //false

for in循环遍历属性

var a = {b:1,c:2,d:3}
for(var key in a ){
console.log('key:',key)
console.log('value:',a[key])
}
//key: b
//key: 1
//key: c
//key: 2
//key: d
//key: 3

for in 只会遍历可遍历属性,不可遍历的跳过,同样也会遍历继承属性
如果想跳过继承属性,hasOwnProperty()方法可以判断是否为自身属性

同一对象允许被多个变量同时指向,如果其中一个变量改变指向,其他变量不会受到影响。

var a = {name:'123'}
var b = a
a.name //'123'
b.name //'123'
b.name='456'
a.name //'456'
a = {}
b.name //'456'

with语句
当操作一个对象多个属性时,with语句可以提供一些书写方便。

var a = {a:1,b:2}
with(a){
  a=2
  b=3
}

with绑定对象a,然后在同一区块里统一操作属性。但是这样绑定对象不明确,不好判断区块里的是其他变量还是对象的属性,这样不利于代码纠错和模块化。

上一篇下一篇

猜你喜欢

热点阅读