零基础JavaScript入门(第六天)

一、JavaScript 内置对象

1.内置对象

  • JavaScript 中的对象分为3种:自定义对象 、内置对象、 浏览器对象
  • 前面两种对象是JS 基础 内容,属于 ECMAScript;  第三个浏览器对象属于我们JS 独有的, 我们JS API 讲解  
  • 内置对象就是指 JS 语言自带的一些对象,这些对象供开发者使用,并提供了一些常用的或是最基本而必要的功能(属性和方法)
  • 内置对象最大的优点就是帮助我们快速开发  
  • JavaScript 提供了多个内置对象:Math、 Date 、Array、String等

 

2.查文档

2.1 MDN

学习一个内置对象的使用,只要学会其常用成员的使用即可,我们可以通过查文档学习,可以通过MDN/W3C来查询。

Mozilla 开发者网络(MDN)提供了有关开放网络技术(Open Web)的信息,包括 HTML、CSS 和万维网及 HTML5 应用的 API。

MDN:   https://developer.mozilla.org/zh-CN/

2.2 如何学习对象中的方法

  1. 查阅该方法的功能
  2. 查看里面参数的意义和类型
  3. 查看返回值的意义和类型
  4. 通过 demo 进行测试

3.Math对象

3.1 Math 概述

Math 对象不是构造函数,它具有数学常数和函数的属性和方法。跟数学相关的运算(求绝对值,取整、最大值等)可以使用 Math 中的成员。

Math.PI         // 圆周率

Math.floor()      // 向下取整

Math.ceil()            // 向上取整

Math.round()           // 四舍五入版 就近取整   注意 -3.5   结果是  -3

Math.abs()         // 绝对值

Math.max()/Math.min()     // 求最大和最小值

注意:上面的方法必须带括号

案例:封装自己的数学对象

利用对象封装自己的数学对象 里面有 PI 最大值和最小值

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        var myMath = {
            PI: 3.141592653,
            max: function () {
                var max = arguments[0];
                for (var i = 0; i < arguments.length; i++) {
                    if (arguments[i] > max) {
                        max = arguments[i];
                    }
                }
                return max;
            },
            min: function () {
                var min = arguments[0];
                for (var i = 0; i < arguments.length; i++) {
                    if (arguments[i] < min) {
                        min = arguments[i];
                    }
                }
                return min;
            }
        }
        console.log(myMath.PI);
        console.log(myMath.max(1, 6, 9));
        console.log(myMath.min(2, 9, 7));
    </script>
</body>

</html>

3.2 随机数方法 random()

random() 方法可以随机返回一个小数,其取值范围是 [0,1),左闭右开 0 <= x < 1

得到一个两数之间的随机整数,包括两个数在内

function getRandom(min, max) {  

return Math.floor(Math.random() * (max - min + 1)) + min;

}

案例:猜数字游戏

程序随机生成一个 1~ 10 之间的数字,并让用户输入一个数字,  

1. 如果大于该数字,就提示,数字大了,继续猜;  

2. 如果小于该数字,就提示数字小了,继续猜;  

3. 如果等于该数字,就提示猜对了, 结束程序。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        function getRandom(min,max){
            return Math.floor(Math.random()*(max-min+1))+min;
        }
        var random=getRandom(1,10);
        while(true){
            var num=prompt('请输入您猜测的数字:')
            if(num>random){
                alert('您猜的数字太大了'); 
            }
            else if(num<random){
                alert('您猜的数字太小了');
            }
            else {
                    alert('您猜对了');
                    break;
            }
        }
    </script>
</body>

</html>

4.日期对象

4.1 Date 概述

  • Date 对象和 Math 对象不一样,他是一个构造函数,所以我们需要实例化后才能使用  
  • Date 实例用来处理日期和时间

4.2 Date()方法的使用

 1. 获取当前时间必须实例化

var now = new Date();

console.log(now);

2. Date() 构造函数的参数

如果括号里面有时间,就返回参数里面的时间。例如日期格式字符串为‘2019-5-1’,可以写成new Date('2019-5-1')  或者 new Date('2019/5/1')

  • 如果Date()不写参数,就返回当前时间
  • 如果Date()里面写参数,就返回括号里面输入的时间

4.3 日期格式化

我们想要 2019-8-8  8:8:8 格式的日期,要怎么办?

需要获取日期指定的部分,所以我们要手动的得到这种格式。    

 案例: 输出当前日期

请写出这个格式的日期:2019年8月8日 星期四

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>

            var date = new Date();

            console.log(date.getFullYear());   //年 
            console.log(date.getMonth()+1);   //月(月份需要+1)
            console.log(date.getDate());   //日
            console.log(date.getDay());  //周几(周日开始算)



            var year=date.getFullYear();
            var month=date.getMonth()+1;
            var dates=date.getDate();
            var arr=['星期日','星期一','星期二','星期三','星期四','星期五','星期六'];
            var day=date.getDay();

            console.log('今天是:'+year+'年'+month+'月'+dates+'日'+'  '+arr[day]);
    </script>
    
</body>
</html>

案例: 输出当前时间

写一个函数,格式化日期对象,成为 HH:mm:ss 的形式   比如  00:10:45

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //写一个函数,格式化日期对象,成为 HH:mm:ss 的形式   比如  00:10:45
        var date=new Date();

        console.log(date.getHours());
        console.log(date.getMinutes());
        console.log(date.getSeconds());



        var hours=date.getHours();
        var minutes=date.getMinutes();
        var second=date.getSeconds();
        console.log('现在的时间是:'+hours+':'+minutes+':'+second)



    </script>
</body>
</html>

4.4 获取日期的总的毫秒形式

Date 对象是基于1970年1月1日(世界标准时间)起的毫秒数

为什么计算机起始时间从1970年开始?

我们经常利用总的毫秒数来计算时间,因为它更精确

// 实例化Date对象

var now = new Date();

// 1. 用于获取对象的原始值

console.log(date.valueOf())    

console.log(date.getTime())    

// 2. 简单写可以这么做

var now = + new Date();            

// 3. HTML5中提供的方法,有兼容性问题

var now = Date.now();

案例:倒计时效果

做一个倒计时效果

案例分析

  1. 核心算法:输入的时间减去现在的时间就是剩余的时间,即倒计时 ,但是不能拿着时分秒相减,比如 05 分减去25分,结果会是负数的。
  2. 用时间戳来做。用户输入时间总的毫秒数减去现在时间的总的毫秒数,得到的就是剩余时间的毫秒数。
  3. 把剩余时间总的毫秒数转换为天、时、分、秒 (时间戳转换为时分秒)

转换公式如下:  

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

5.数组对象

5.1 数组对象的创建

创建数组对象的两种方式  

  • 字面量方式  
  • new Array()

5.2 检测是否为数组

  •  instanceof 运算符,可以判断一个对象是否属于某种类型  
  • Array.isArray()用于判断一个对象是否为数组,isArray() 是 HTML5 中提供的方法    

var arr = [1, 23];

var obj = {};

console.log(arr instanceof Array); // true

console.log(obj instanceof Array); // false

console.log(Array.isArray(arr));   // true

console.log(Array.isArray(obj));   // false

5.3 添加删除数组元素的方法

 案例: 筛选数组

有一个包含工资的数组[1500, 1200, 2000, 2100, 1800],要求把数组中工资超过2000的删除,剩余的放到新数组里面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
      
        //有一个包含工资的数组[1500, 1200, 2000, 2100, 1800],要求把数组中工资超过2000的删除,剩余的放到新数组里面
    var arr=[1500, 1200, 2000, 2100, 1800];
        var newArr=[];
        for(var i=0;i<arr.length;i++){
            if(arr[i]<2000){
    //          newArr[newArr.length]=arr[i];
                newArr.push(arr[i]);   //添加数组
            }
      
    }
    console.log(newArr);
    </script>
    
</body>
</html>

5.4 数组排序

 var arr = [1, 64, 9, 6]; arr.sort(function(a, b) {    

return b - a;      // 降a序    

// return a - b;   // 升序

});

console.log(arr);

5.5 数组索引方法

案例: 数组去重(重点案例) 

有一个数组[‘c’, ‘a’, ‘z’, ‘a’, ‘x’, ‘a’, ‘x’, ‘c’, ‘b’],要求去除数组中重复的元素。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>

        function rep(arr){
        //有一个数组[‘c’, ‘a’, ‘z’, ‘a’, ‘x’, ‘a’, ‘x’, ‘c’, ‘b’],要求去除数组中重复的元素。
        var newarr=[];
        for(var i=0;i<arr.length;i++){
                if(newarr.indexOf(arr[i])===-1){
                    newarr.push(arr[i]);//找到了该数据的下表就删除
                }
            }
        return newarr;
        }
        var arraa=rep(['c','a', 'z', 'a', 'x', 'a', 'x', 'c', 'b']);
        console.log(arraa);
        
    </script>
</body>
</html>

5.6 数组转换为字符串

 5.7 课下查询

slice() 和 splice()  目的基本相同,建议同学们重点看下 splice()

6.字符串对象

6.1 基本包装类型

为了方便操作基本数据类型,JavaScript 还提供了三个特殊的引用类型:String、Number和 Boolean。 基本包装类型就是把简单数据类型包装成为复杂数据类型,这样基本数据类型就有了属性和方法。

// 下面代码有什么问题?

var str = 'andy';

console.log(str.length);

按道理基本数据类型是没有属性和方法的,而对象才有属性和方法,但上面代码却可以执行,这是因为 js 会把基本数据类型包装为复杂数据类型,其执行过程如下 :

// 1. 生成临时变量,把简单类型包装为复杂数据类型

var temp = new String('andy');

// 2. 赋值给我们声明的字符变量

str = temp;

// 3. 销毁临时变量

temp = null;

6.2 字符串的不可变

指的是里面的值不可变,虽然看上去可以改变内容,但其实是地址变了,内存中新开辟了一个内存空间。

var str = 'abc';

str = 'hello';

// 当重新给 str 赋值的时候,常量'abc'不会被修改,依然在内存中

// 重新给字符串赋值,会重新在内存中开辟空间,这个特点就是字符串的不可变

// 由于字符串的不可变,在大量拼接字符串的时候会有效率问题

var str = '';

for (var i = 0; i < 100000; i++) {

    str += i;

}

console.log(str); // 这个结果需要花费大量时间来显示,因为需要不断的开辟新的空间

6.3 根据字符返回位置

字符串所有的方法,都不会修改字符串本身(字符串是不可变的),操作完成会返回一个新的字符串。

案例:返回字符位置

查找字符串"abcoefoxyozzopp"中所有o出现的位置以及次数

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        //查找字符串"abcoefoxyozzopp"中所有o出现的位置以及次数
        var str = "abcoefoxyozzopp";
        var index = str.indexOf('o');
        var mun=0;
        while (index !== -1) {
            console.log(index);
            mun++;
            index = str.indexOf('o', index + 1);
        }
        console.log('O出现的次数是:'+mun);
    </script>
</body>

</html>

6.4 根据位置返回字符(重点)

 案例2:返回字符位置

判断一个字符串 'abcoefoxyozzopp' 中出现次数最多的字符,并统计其次数。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
         //判断一个字符串 'abcoefoxyozzopp' 中出现次数最多的字符,并统计其次数。
         var str = "abcoefoxyozzopp";
         var o={};
         for(var i=0;i<str.length;i++){
             var chars=str.charAt(i);    //chars是字符串的每一个字符
             if(o[chars]){
                 o[chars]++;
             }else{
                 o[chars]=1;
             }
         }
         console.log(o)

         var max=0;
         var ch='';
         for(var k in o){
             if(o[k]>max){
                 max=o[k];
                 ch=k;
             }
         }
         console.log(max);
         console.log('最多的字符是:'+ch);
         
    </script>
</body>
</html>

6.5 字符串操作方法(重点)

6.6 replace()方法

 replace() 方法用于在字符串中用一些字符替换另一些字符。

其使用格式如下:  

replace(被替换的字符串, 要替换为的字符串);

6.7 split()方法

split()方法用于切分字符串,它可以将字符串切分为数组。在切分完毕之后,返回的是一个新数组。 例如下面代码:  

var str = 'a,b,c,d';

console.log(str.split(','));   // 返回的是一个数组 [a, b, c, d]

6.8 课下查阅

  • toUpperCase()     //转换大写  
  • toLowerCase()     //转换小写

二、JavaScript 简单类型与复杂类型

1.简单类型与复杂类型

简单类型又叫做基本数据类型或者值类型,复杂类型又叫做引用类型。  

  • 值类型:简单数据类型/基本数据类型,在存储时变量中存储的是值本身,因此叫做值类型 string ,number,boolean,undefined,null  
  • 引用类型:复杂数据类型,在存储时变量中存储的仅仅是地址(引用),因此叫做引用数据类型  通过 new 关键字创建的对象(系统对象、自定义对象),如 Object、Array、Date等

2.堆和栈

堆栈空间分配区别:

1、栈(操作系统):由操作系统自动分配释放存放函数的参数值、局部变量的值等。其操作方式类似于数据结构中的栈; 简单数据类型存放到栈里面

2、堆(操作系统):存储复杂类型(对象),一般由程序员分配释放,若程序员不释放,由垃圾回收机制回收。 复杂数据类型存放到堆里面

注意:JavaScript中没有堆栈的概念,通过堆栈的方式,可以让大家更容易理解代码的一些执行方式,便于将来学习其他语言。

3.简单类型的内存分配

值类型(简单数据类型): string ,number,boolean,undefined,null  值类型变量的数据直接存放在变量(栈空间)中

4.复杂类型的内存分配

  •  引用类型(复杂数据类型):通过 new 关键字创建的对象(系统对象、自定义对象),如 Object、Array、Date等  
  • 引用类型变量(栈空间)里存放的是地址,真正的对象实例存放在堆空间中

5.简单类型传参

函数的形参也可以看做是一个变量,当我们把一个值类型变量作为参数传给函数的形参时,其实是把变量在栈空间里的值复制了一份给形参,那么在方法内部对形参做任何修改,都不会影响到的外部变量。

function fn(a) {    

a++;    

console.log(a);

}

var x = 10;

fn(x);

console.log(x);

6.复杂类型传参

函数的形参也可以看做是一个变量,当我们把引用类型变量传给形参时,其实是把变量在栈空间里保存的堆地址复制给了形参,形参和实参其实保存的是同一个堆地址,所以操作的是同一个对象。

function Person(name) {

    this.name = name;

}

function f1(x) { // x = p    

console.log(x.name); // 2. 这个输出什么 ?        

x.name = "张学友";    

console.log(x.name); // 3. 这个输出什么 ?    

}

var p = new Person("刘德华");

console.log(p.name);    // 1. 这个输出什么 ?  

f1(p);

console.log(p.name);    // 4. 这个输出什么 ?  

视频:黑马程序员JavaScript全套教程,Web前端必学的JS入门教程,零基础JavaScript入门_哔哩哔哩_bilibili

此文章是本人学习视频自我总结,如有侵犯还望原谅。侵权必删。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

情绪员Tim

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值