对象
概念:简单说,所谓对象,就是一种无序的数据集合,有若干个“键值对”(key-value)构成。
var obj = { ???name : ‘tom‘, ???sex : ‘man‘};
上面代码中,大括号就定义了一个对象,这是一种字面量的写法,它被复制给变量 obj 。 这个对象内部包含了一个键值对(又称为“成员”), name 和 sex 是“键名”(成员的名称),字符串“tom”和“man”是“键值”(成员的值)。键名和键值之间用冒号分割。如果对象内部包含多个键值对,每个键值对之间用逗号分割。
键名
对象的所有键名都是字符串,可以加引号也可以不加引号。如果键名是数值,会被自动转换成字符串。
var o = { ???1 : ‘a‘, ???3.2 : ‘b‘}
上面以数值作为键名都会转换成字符串
如果键名不符合标识符的命名规则(比如第一个字符为数字,或者含有空格或运算符),也不是数字,则必须加上引号,否则会报错。
var o ={ ???‘1p‘ : "Hellow World", ???‘h w‘ : "Hellow World", ???‘p+q‘ : ‘Hellow World‘};
上面的键值不符合标识符的命名规则,所以必须要加引号
对象的每一个“键名”又称为“属性”(property),它的“键值”可以是任何的数据类型。如果一个属性的值为函数,通畅把这个属性成为“方法”,它可以像函数那样调用。
var obj = { ???p: function(){...}};
关于属性的操作
对象的属性有两种方法可以读取:
var obj = { ???name: ‘tom‘, ???sex:‘man‘};
obj.name //"tom"
obj[‘sex‘] //"man"
可以通过对象名后面加点“.”的方式,也可以对象名后面加['']。
注意:如果键名是数值的话,不能用“.”的方式获取对象的属性,这样会报错,而用方括号的方式引号加不加上都可以。
对象的属性可以动态的创建
var obj = { ???name: ‘tom‘, ???sex:‘man‘};obj.age = 20;obj.age ???//20
上面代码对对象动态创建了一个属性且赋值。
对象的操作
1)查看所有属性
可以用 Object.keys 方法查看对象的所有属性。
var obj = { ???name: ‘tom‘, ???sex:‘man‘};Object.keys(obj) ???//["name", "sex"]
2)删除对象的属性
用delete方法可以删除对象的属性,删除成功后返回true。
var obj = { ???name: ‘tom‘, ???sex:‘man‘};delete obj.sex //trueobj.sex //undefinedObject.keys(obj) //["name"]
注意!删除一个本来就没有的属性是不会报错的,还是会返回true
3)in运算符
in运算符可以检查对象是否包含某种属性,如果包含返回true,反之返回false。
var obj = { ???name: ‘tom‘, ???sex:‘man‘};‘name‘ in obj ???//true
4)for...in 循环
for...in 循环可以遍历对象的所有属性
var obj = { ???name: ‘tom‘, ???sex:‘man‘};for(var keys in obj){ ???console.log(obj[i]);}//"tom"//"man"
其他要点
对象的引用
如果不同的变量名指向同一个对象,那么它们都是这个对象的引用,也就是说指向同一个内存地址。修改其中一个变量,会影响到其他所有变量。
var o1 = {};var o2 = o1;o1.a = 1;console.log(o2.a); ???//1o2.b = 2;console.log(o2.b); ???//2
上面代码中,o1
和o2
指向同一个对象,因此为其中任何一个变量添加属性,另一个变量都可以读写该属性。
此时,如果取消某一个变量对于原对象的引用,不会影响到另一个变量。
var o1 = {};var o2 = o1;o1 = 1;o2 // {}
上面代码中,o1
和o2
指向同一个对象,然后o1
的值变为1,这时不会对o2
产生影响,o2
还是指向原来的那个对象。
但是,这种引用只局限于对象,如果两个变量指向同一个原始类型的值。那么,变量这时都是值的拷贝。
var x = 1;var y = x;x = 2;y // 1
上面的代码中,当x
的值发生变化后,y
的值并不变,这就表示y
和x
并不是指向同一个内存地址。
参考资料:http://javascript.ruanyifeng.com/grammar/object.html#toc4
JS中的对象
原文地址:https://www.cnblogs.com/ianyanyzx/p/9225751.html