前端入门篇(三十九)JS基础6对象

对象的定义

一堆变量+一堆函数的集合

对象的创建

用直接量{}的方式创建:

var obj1 = {
     
    x: 60,
    y:70,
    z:function() {
     console.log('z func')}
}

1.x: 60是一个属性,x为属性名,60为属性值;
属性与属性之间以逗号隔开
2.属性名均为string,会被系统隐式地转为string类型
3.如果属性名是纯数字、纯字母、以字母开头的字母+数字,可以不写引号
4.如果属性名包含特殊字符(如空格,连接符’-’),就要加上引号(下划线可以不加引号,不会报错)

var person1 = {
     
    name:'xiaoming',
    age:18,
    sex:'male',
    slogan: function() {
     
        console.log('My name is xiaoming.')
    }
}

当要创建与person1小明类似的对象时,用直接量的方式创建有些冗余,可以改为用类的方式创建,将person都具备的结构抽象出来,用new的方式创建出对象,更方便简洁

用类的方式创建对象(new)

//构造方法
function personClass(pAge,pSex,pName) {
     
    this.name=pName || 'xiaoming';
    this.age=pAge;
    this.sex=pSex;
    this.slogan= function() {
     
        console.log('My name is ' + this.pName)
    }
}

var person1 = new personClass(18,'male');
var person2 = new personClass('xiaohong',18,'female');

person1和person2是独立的两个对象
当要设置默认值时,还是要遵循有默认值的属性放最后的原则
(回忆起当年学c++和Java的感觉,心里有点。。。)

操作对象本身的属性(增删改查,遍历所有属性)

查:

获取对象的属性——用点’.’ 或者方括号[]

//方法一
var name = person1.name;
//方法二
var name = person1['name'];

当属性名可以不用引号时才能用点的方式获取
使用方括号时,如果不是纯数字,记得加引号

改:

//方法一
person1.name = 'xiaoming1';
//方法二
person1['name'] = 'xiaoming2';

修改属性时,如果对象里没有这条属性,会自动加上

增:

//方法一
person1.height = 180;
//方法二
person1['height'] = 180;

删:

var person1 = {
     
    name:'xiaoming',
    age:18,
    sex:'male',
    slogan: function() {
     
        console.log('My name is xiaoming.')
    },
    first_name:'xiao',
    son:{
     
        name:'xiao xiao ming',
    }
}
var xiaoxiaoming = person1.son;
delete person1.son;

此时person1已经没有son属性,但xiaoxiaoming还存在
删属性只是切断了对象和属性之间的联系,没有将属性销毁回收

遍历属性:

for (var pN in person1) {
     
    console.log('person1的属性名:'+pN+",值:"+person1[pN]);
}

对象的存储、引用

var person1 = {
     
    name:'xiaoming',
    age:18,
    sex:'male',
    slogan: function() {
     
        console.log('My name is xiaoming.')
    },
    first_name:'xiao',
    son:{
     
        name:'xiao xiao ming',
    }
}

var person2 = person1;
person2.name = 'xiaoming2'
console.log(person2)
console.log(person1)

person1和person2中的name都是’xiaoming2’

原因:
1.变量仅能存储很小的东西,如数字,字符串,布尔值;

2.对象比较复杂,变量存储的是对象的地址,即引用;

3.变量不存储对象的内容,因此我们对对象的操作是通过方括号或点实现的;

4.person2得到的也是对象的地址,因此,person2对属性做的修改直接修改了该对象(浅拷贝)

5.如果想要快速定义出独立的对象,又不冗余地重新再写一遍,可以用类来定义对象结构

命名空间

多人协作时,个人维护自己的内容,命名不冲突
例如:

//我是ccy,创建name和age变量
var ccy = {
     }
ccy.name = 'ccy';
ccy.age = 18;

系统提供的非常好用的对象

1.Object()创建空对象

obj1 = {
     };
//相当于使用系统创建:
obj2 = new Object();

2.数组合并、小数取指定位数、字符串按固定值拆分、数字转字符串、时间相关Date对象(计算代码性能,耗时,getTime())、

//耗时计算
var time1 = new Date();
var t = 0;
for (var i = 0; i < 1000000; i++){
     
    t++;
}
var time2 = new Date();
t1 = time1.getTime();
t2 = time2.getTime();
n = t2-t1;
//结果:n=4;

3.Math(不是类,相当于命名空间,用点调用)
Math.random():0-1之间随机数
Math.floor()向下取整

// 获得0-9随机数
for (var i=0; i < 10;i++){
     
    console.log(Math.floor(Math.random()*10));
}

具体看官网:链接

你可能感兴趣的:(前端入门,javascript)