- 对象属相调用的方法
- .调用直接在对象后面添加 .和属性名(属性名即使原本是加了引号的字符串,调用的时候不用添加);
- []调用在对象直接添加[],在其中添加属性名,有引号的属性名一定要添加引号,不然输出为undefined
var textObj = {
name: 'tom',
age: 22,
12: 'text'
}
var textVar = 'name';
console.log(textObj.name) // tom
console.log(textObj[name]) // undefined
console.log(textObj['name']) // tom
console.log(textObj.12) // error错误
console.log(textObj[12]) // text
console.log(textObj['12'] // text
console.log(textObj.textVar) // undefined
console.log(textObj[textVar]) // tom
- 也就是说字符串属性名使用 . 的时候不用添加引号,
配合[ ]一定要加引号; - 数字属性名只能配合[ ]使用,引号有无都可以使用;
- 当属性名调用的是变量时要配合[ ]使用;
- 属性删除与判断
- 使用delete 对象.属性名;
- 不可以删除原型属性;
obj.prototype.name = 'Tom';
delete obj.name;
console.log(obj.name) // 是Tom 因为还存在,删不掉
- 同样用 .hasOwnProperty(propname)可以判断一个对象是否拥有特定属性,这个方法不能检测原型链中的属性;
'Hello World'.hasOwnProperty('split') //false 原型属性不能检测
String.prototype.hasOwnProperty('split') //true 原型可以检测自己的属性
{'name':'Tom'}.hasOwnProperty('name') // true 自身属性可以检测
- 对象的创建方法
- 直接声明
var testObj = {
'property1' : 1,
'property2' : 2
}
- 构造函数
function Obj() {
this.property1 = 1;
this.property2 = 2; //共有属性 外部可以可以修改该属性
var property3 = 3; //私有属性 只能通过构造函数内部的方法来修改
this.method1 = function () {} //共有方法
- Object.keys()获取属性名方法
传入对象,返回属性名
var obj = {'a':'123','b':'345'};
console.log(Object.keys(obj)); //['a','b']
传入字符串,返回索引
var str = 'ab1234';
console.log(Object.keys(obj)); //[0,1,2,3,4,5]
数组 返回索引
var arr = ["a", "b", "c"];
console.log(Object.keys(arr)); // console: ["0", "1", "2"]
构造函数 返回空数组或者返回实例的属性名
var obj = {
name: 'aa',
age: 12
}
console.log(Object.keys(Object)); // []
console.log(Object.keys(obj)); // ['name','age']