js的引用类型之Object类型

1. 概念

ECMAScript中的对象就是一组数据和功能的集合。

2. 创建自定义对象

2.1 第一种方法是new+Object构造函数

1
2
3
4
5
6
7
var person = new Object();
//var person = {}; 这是上面的简写
person.name = 'jack';
person.age = 18;

//不给构造函数传递参数,则可以省略后面的括号。
var person = new Object;//有效,但不推荐

2.2 第二种是使用对象字面量表示法

1
2
3
4
var person = {
name:"jack",
age:18
}

对于对象字面量语法,我们推荐只考虑对象属性名的可读性时使用。在通过对象字面量定义对象时,实际上不会调用Object构造函数(Firefox2及更早版本会调用Object构造函数)

3. 访问对象属性

一般访问对象属性使用点表示法,不过js中也可以用方括号表示法

1
2
console.log(person.name);
console.log(person["name"]);

在功能上两种没有区别,但方括号尤其优点:

  • 可以使用变量来访问属性

    1
    2
    var myname = "name";
    console.log(person[myname]);
  • 属性名可能发生错误,比如使用空格,关键字或保留字

    1
    person["jack name"])= "jack";

4. 删除对象的属性和方法

delete

1
2
3
4
5
var obj = {};
obj.name = '张三';
console.log(obj.name);//输出张三
delete obj.name;
console.log(obj.name);//输出undefined

5. for-in对象属性和方法

1
2
3
4
5
6
7
8
9
10
11
12
13
var obj = {};
obj.name = 'jack';
obj.age = 18;
obj.say = function(){
console.log('hello');
}
for(var attr in obj) {
console.log(attr);
//console.log(obj[attr]);
//!!!注意下面
//console.log(obj.attr);//会输出undefined
}
//输出name age say

object的每个实例都具有下列属性和方法

constructor

保存用于创建当前对象的函数

1
2
3
4
5
6
7
8
9
10
11
var obj = {};
var arr = [];
function People(name,age,sex){
this.name = name;
this.age = age;
this.sex = sex;
}
var person = new People('jack',18,'male');
console.log(obj.constructor);//ƒ Object() { [native code] }
console.log(arr.constructor);//ƒ Array() { [native code] }
console.log(person.constructor);

hasOwnProperty(propertyName)

用于检查给定的属性是否存在当前对象实例中(而不是实例的原型中)。

参数属性名(propertyName)必须以字符串形式指定

1
2
3
4
var obj = {};
obj.name = 'jack';
console.log(obj.hasOwnProperty('name'));//true
console.log(obj.hasOwnProperty('age'));//false

isPrototypeOf(object)

用于检查传入的对象是否是当前对象的原型
原型链接

propertyIsEnumerable(propertyName)

用于检查给定的属性是否能够使用for-in语句来枚举

参数属性名(propertyName)必须以字符串形式指定

1
2
3
var obj = {};
obj.name = 'jack';
console.log(obj.propertyIsEnumerable('name'));//true

toLocaleString

toString()

返回对象的字符串表示

1
2
3
var arr = [1,2,3,4];
console.log(arr.toString());
//1,2,3,4

valueOf()

返回对象的字符串、数值或布尔值表示

1
2
3
var arr = [1,2,3,4];
console.log(arr.valueOf());
//[1,2,3,4]