JavaScript学习笔记(二)

五.对象

1.对象的概念:Javascript中的对象是一组无序的相关属性和方法的集合,所有事物都是对象。例如字符串、数组、函数等等。
对象是由属性和方法组成的。
1)属性:事物的特征,在对象中用属性来表示(常用名词)
2)方法:事物的行为,在对象中用方法来表示(常用动词)

2.创建对象的方式
1)利用字面量来创建对象{}:采用键值对的形式,即属性名:属性值;
注意:多个属性之间用逗号隔开,方法冒号之后是一个匿名函数

var obj = {
            name: 'Lindsay',
            age: '18',
            sayHi: function () {
                console.log('Hi~');
            }
        }

2)利用new Object创建对象:利用等号赋值的方法添加对象的属性和方法,每个属性和方法之间用分号结束。

var obj = new Object();
        obj.name = 'coco';
        obj.age = 5;
        obj.sayHi = function(){
            console.log('Hi~');
        }

3)利用构造函数创建对象:一次创建一个对象,有很多属性和方法都是重复的,那么就可以用函数的方法重复这些相同的代码,就是构造函数,里面封装的是对象。
注意:1)构造函数名的首字母需要大写;
2)构造函数不需要return就可以返回结果;
3)如果构造函数中有方法,方法中用到的参数不需要写到构造函数的形参中

function 构造函数名(形参){
    this.属性 = 对应的形参值;
    this.方法 = function(){
 }

3.使用对象
1)调用对象的属性:对象名.属性名 或者 对象名[‘属性名’]
2)调用对象的方法:对象名.方法名();
3)调用构造函数:new 构造函数名(),返回的是一个对象;
注意:能使用点运算符一定可以使用中括号运算符,反之不一定成立
只能使用中括号的情况:
①使用了不能作为标识符的属性名的情况
②将变量作为属性名使用的情况
③将表达式的求职结果作为属性名使用的情况
4.变量、属性、函数和方法的区别:
1)变量和属性:他们都是用来存储数据的。其中变量是单独声明并赋值,使用的时候直接写变量名,单独存在;属性是在对象里面的不需要声明,使用的时候必须是对象.属性。
2)函数和方法:他们都是实现某种功能。函数是单独声明,并且调用的时候为函数名(),单独存在;方法在对象中,不需要声明,调用时为对象.方法名()。
5.构造函数和对象的关系:构造函数是泛指的某一类,对象是特指一个具体的事物。利用构造函数创建对象的过程也称为对象的实例化。
6.new关键字执行过程:
1)new 构造函数可以在内存中创建一个空的对象;
2)this就会指向刚才创建的空对象;
3)执行构造函数里面的代码,给这个空对象添加属性和方法;
4)返回这个对象(所以构造函数不需在这里插入代码片要return)
7.遍历对象:for(变量 in 对象)

for(var k in hero1){
    console.log(k);//输出得到的是属性名
    console.log(hero1[k]);//输出得到的是属性值
}

六.内置对象

1.内置对象是指JS语言中自带的一些对象,这些对象供开发者使用,并提供一些常用的或是最基础而必要的功能(属性和方法)
2.查阅内置对象:MDN文档W3C
3.经典案例:做一个倒计时
1)核心算法:输入时间减去现在的时间就是剩余的时间,但是不能直接时分秒相减,可能会产生负数;
2)解决办法:用时间戳来做。用户输入时间的总的毫秒数减去现在时间的总的毫秒数,得到的就是剩余时间的毫秒数;
3)把剩余时间的毫秒数转换为天、时、分、秒(时间戳转换为时分秒)
转换公式如下:

d = parseInt(总秒数/1000/60/60/24);//计算天数
h = parseInt(总秒数/1000/60/60%24);//计算小时
m = parseInt(总秒数/1000/60%60);//计算分数
s = parseInt(总秒数/1000%60);//计算秒数

4.数组对象 Array
1)判断是否为数组的方式:arr instanceof Array或者Array.isArray(arr)(H5新增的方法)
2)添加删除数组元素的方法

方法名说明返回值
push(参数1…)末尾添加一个或多个元素,注意修改原数组返回新的长度
pop()删除数组最后一个元素,把数组长度减1无参数,修改原数组返回它删除的元素的值
unshift(参数1…)向数组的开头添加一个或更多的元素,注意修改原数组返回新的长度
shift()删除数组的第一个元素,数组长度减1无参数,修改原数组返回删除元素的值

5.数组排序

方法名说明
reverse颠倒数组中的源的顺序,无参数
sort对数组中的元素进行排序

其中,sort函数要注意:
1)如果不带参数,只能对1~9的数字进行升序排序,大于10只会按照单个数字进行排序
2)想要实现所有数字升序排序

var arr1 = [2,8,78,54,23];
    arr1.sort(function (a,b) { 
       return b-a;
    })
    console.log(arr1);
    //升序
    arr1.sort(function (a,b) { 
        return a-b;
     })
     console.log(arr1);

6.获取数组元素的索引arr.indexOf()从前往后找,返回元素的下标;
arr.lastIndexOf()从后往前找,返回元素的下标;
注意:如果要查询的元素在数组中不存在,返回值是-1

//重要案例:数组去重
//思路:使用indexOf在新数组中查找旧数组中所有元素的下标,如果index为-1,那就使用push或者unshift方法将元素添加进新数组中
        var str = ['c','a','z','a','x','a','x','c','b'];
        var str1 = [];
        for(var i = 0; i < str.length; i++){
           var index = str1.indexOf(str[i]);
           if(index === -1){
               str1.push(str[i]);
           }
        }
        console.log(str1);

7.将数组转换为字符串

方法名说明返回值
toString()把数组转换为字符串,逗号分隔每一项返回一个字符串
join(‘分隔符’)方法用于把数组中所有的元素转换为一个字符串返回一个字符串
concat()连接两个或多个数组,不影响原数组返回一个新数组
slice()数组截取slice(begin,end)返回被截取项目的新数组
splice数组删除splice(第几个开始,要删除的个数)返回被删除项目的新数组,注意,这个会影响原数组

8.字符串不可变:指的是里面的值不可变,虽然看上去可以改变内容,但其实是地址变了,内存中新开辟了一个内存空间。字符串中方的所有方法,都不会修改字符串本身,操作都会返回一个新的字符串。
9.根据位置返回字符(重点)

方法名说明
charAt()返回指定位置的字符(index字符串的索引号)
charCodeAt(index)获取指定位置处字符的ASCII码(index索引号)
str[index]获取指定位置处字符

10.字符串操作方法(重点)

方法名说明
concat(str1,str2,str3…)concat()方法用于连接两个或者多个字符串,拼接字符串,等效于+,+更常用
substr(start,length)从start位置开始(索引号),length取的个数,重点记住这个
slice(start,end)从start位置开始,截取到end位置,end取不到
substring(start,end)从start位置开始,截取到end位置,end取不到,基本和slice相同,但是不接受负值
replace(a,b)a是被替换的字符,b是替换的字符
split(‘分隔符’)根据分隔符对字符串进行分割,返回一个数组

11.简单数据类型与复杂数据类型
1)简单数据类型(值类型):在存储时变量中存储的是值本身,有string、number、Boolean、undefined、null(返回的是一个对象object)
2)复杂数据类型(引用类型):在存储时变量中存储的仅仅是地址(引用),通过new关键字创建的对象,如object、Array、Date等。
3)内存分配:
①简单数据类型是存放到栈里面,里面直接开辟一个空间,存放的是值;
②复杂数据类型首先在栈里面存放地址,用十六进制表示,这个地址指向堆里面的数据。
4)传参:
①简单数据类型传递的是值,函数内部的变化不会影响外部数据;
②复杂数据类型传递的是地址,不管外面还是里面,使用的都是同一个堆地址,所以不管在内部还是外部操作都会影响值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值