普通对象:由大括号包裹起来的,由零到多个属性名和属性值(键值对)组成的
那什么是属性呢?
属性:描述当前对象特征的,属性名是当前具备这个特征,属性值是这个特征的描述(专业语法,属性名称为键[key],属性值称为值[value],一组属性名和属性值称为一组键值对)
对象的属性名 可以是数字
var obj={
1:12,
true:100,
null:200,
undefined:300,
{}:400
} obj[1];// 12 obj['1'];// 12 obj.1 ; //语法错误
obj[{}]=300 ;// 存储的是[object Object]: 300
当我们存储的属性名不是字符串和数字,浏览器会把这个值转换为字符串(toString转换),然后在进行存储
属性的操作:增删改查
var obj = { name:'我是一个名字', age:10 }
//获取属性名的值 (查) obj.name //obj的name属性名 obj['name'] //正规的获取方式,一般来说,对象的属性名都是字符串格式的,属性值是任意格式的
//增加和修改 var obj1 = {name:'qqq'}; var obj2 = {name:'www'}; obj1.name = '韩梅梅'; //修改 obj1.sex = 20; //增加属性sex
js对象中属性名是不允许重复的,是唯一的,原来有就是修改,原来没有就是增加
//删除属性 var obj3 = { name:'jack', age:18 } delete obj3['name'] ;//彻底删除 再获取为undefined obj3['age'] = null; //假删除,只是将当前属性的值为空,属性名还在 再获取为null
数组对象
数组也是对象,并且数组对象的属性名是数字,我们称为数字属性名为当前对象的索引
var ary =[20,30,40]; ary['0'];//20 ary[0]'//20 ary.0 ;//Uncaught SyntaxError: Unexpected number,语法错误 ary.length;//2 ary['length'];//2 ary.age=50 ; [20,30,40,age:50]
数组和对象的关系是啥?
数组是对象的一种细分,对象包含数组,对象拥有的数组一样可以拥有
数组对象属中依次递增的数字属性名叫做索引
思考题:
var obj4 = {name:'lilei'}; var name='hanmeimei'; obj4.name; obj4['name']; obj4[name];
答案:
obj4.name;//'lilei'
obj4['name'];// 'lilei'
obj4[name];//undefined
分析:'name'和name区别,
'name'是一个字符串的值
name是一个变量,不是值,代表的是它存储的值,这里没有这个name变量,所以是undefined