二、(5)JavaScript对象

JavaScript-对象

1. 对象(重点)

定义:对象就是一组属性与方法的集合。对象是一种复合数据类型,或者称为引用类型。基本数据类型只能用于描述单个数据,而引用类型是一个可以描述多个数据的集合。

对象:对象由属性和方法组成;

属性:描述对象自身的特征;比如人的姓名,猪的体重;

方法:对象具有的行为和功能,比如人可以拥有一个“自我介绍”功能;

注意:

  • Ese5是基于对象,可以直接创建对象,没有类。
  • Es6是面向对象,有类。

对象的分类

JavaScript(内置对象)内建对象

  由JavaScript语言规范定义的一系列对象,这些对象提供了完成各种任务的方法,比如Math对象,String对象,Date对象等。

var date = new Date();//日期对象
console.log(date.getSeconds());
console.log(date.getHours());

自定义对象:由程序员创建描述特定事物的对象;

对象创建的两种方式:

    <script>
        //自定义对象
        //a.字面量创建对象
        var user={name:"张三",run:function () {
                console.log("李四");
            }};
        console.log(user.name);//调用属性
        user.run();//调用方法

        //b.实例化方式创建对象
        var user1=new Object();
        user1.names="王五";
        user1.sex="男";
        user1.shoeInfo=function () {
            console.log("我是:"+this.names+",性别:"+this.sex);
        }
        user1.shoeInfo();//调用方法
        console.log(user1.names);//调用属性
    </script>

比如:

var user = new Object(); //创建了一个对象
    user.name = “王花花”; // 为对象添加属性(特征)
    user.sex = true;
    user.showInfo = function(){
    //this指向user. this==user;
        console.log(“我是:”+this.name+“,是一个”+this.sex?”男人”:”女人”);
};

var myGirl = {
    name:'小华',
    age:18,
    height:2.8,
    run:function(){
        alert('跑步走...');
    }
};

方法中的this

  当一个函数作为对象的属性存在时,并且通过对象调用这个方法,那么函数中的this就指向调用函数的这个对象;

function sayName(){
    console.log(this.name);
}
var ergou = {
    name :”二狗”,
    say:sayName
};
ergou.say();//二狗
var juer = {
    name :”菊儿”,
    say:sayName
};
juer.say();//菊儿

  this指向对象的好处在于,可以更加方便的对象自身的内部成员。

基本类型与引用类型区别

内存存储

  • 1、基本类型和引用类型,都是数据类型;
  • 2、数据的值都存储在内存中;
  • 3、程序在运行时,会把内存划分不同区域,其中最重要的两个区域,是栈和堆。
  • 4、栈中的值占用空间固定,而堆中是动态分配的内存;
  • 5、所有的变量都存储在栈
  • 6、基本数据类型的值直接存储在栈中,而引用类型的值存储在堆中,变量只是一个指向堆内存的地址引用。

基本类型:基本类型的数据存储在内存栈中,在赋值时将值复制一份给另一个变量,两个互补影响。

引用类型:引用类型的数据存储在内存堆中,赋值时将内存地址给另一个变量,两个变量操作同一块空间。

遍历对象

语法:for...in遍历对象

var user={
    name="张三",
    age=20,
    email:"123@qq.com"
};

//遍历对象
for(var i in user){  
    console.log(i);//i是遍历所有变量名
    console.log(user[i]);//使用动态属性遍历所有值 
}

2. String对象(重点)

什么是字符串对象

  JS中字符串可以是基本数据类型,也可以是引用数据类型,具体是哪一种根据我们创建的方式而定;

var s1 = “aaa” ; //基本数据类型
var s2 = new String(“bbb”) //引用数据类型
var str1 = “abcd”; //简单常用的定义形式
var str2 = ‘abcd’;
var str3 = new String(“abcd”); //标准定义形成
var str4 = new String(‘abcd’);

//以上都是字符串,只是不同的数据类型而已,及存储的位置也不同。

基本类型和实例化对象类型区别:

  相同点:都是对象,都可以调用属性和方法

  不同点:1、类型不同,内存处处位置也不同。2、基本类型的字符串不能自定义属性和方法,引用数据类型可以自定义属性和方法。

注意点:JS中基本数据类型(存储字符串值的能力)与JS引用数据类型(存储字符串值、长度、方法(功能))虽然

从类型的角度来讲,他们的确不同,但是使用的时候其实差异不大,简单理解:就是说JS中的基本数据类型可以当成

对应的引用类型来使用,后面章节中会有直观体会;

为什么使用字符串对象

  因为在JavaScript中为字符串对象提供了很多现成对字符串处理的方法和属性,借助于现有的方法和属性可以对对象中的字符串进行处理. 我们在工作中遇到的数据最多也是字符串类型的数据。

字符串的属性和方法

  JavaScript为字符串对象定义了很多方法和属性,通过对象可以直接是调用方法和数据对自身的字符串进行处理。
语法:
  字符串对象.属性

  字符串对象.方法名()

1  .length:length属性字符串对象字符串长度;

2  .charAt(index):index 必需。查找指定下标的字符,返回在指定位置的字符。

注意:字符串中第一个字符的下标是0。如果参数 index 不在 0 与 string.length 之间,该方法将返回一个空字符串。

3  .indexOf(searchvalue,fromindex):searchvalue 必需。查找字符首次出现的位置。

  fromindex 可选的整数参数。规定在字符串中开始检索的位置。它的合法取值是 0 到 stringObject.length - 1。如省略该参数,则将从字符串的首字符开始检索。方法可返回某个指定的字符串值在字符串中首次出现的位置。

注释:indexOf() 方法对大小写敏感!
注释:如果要检索的字符串值没有出现,则该方法返回 -1。

4  .lastIndexOf(searchvalue,fromindex):searchvalue 必需。查找字符最后出现的位置。

  fromindex 可选的整数参数。规定在字符串中开始检索的位置。它的合法取值是 0 到 stringObject.length - 1。如省略该参数,则将从字符串的最后一个字符处开始检索。

  返回一个指定的字符串值最后出现的位置,在一个字符串中的指定位置从后向前搜索。

5  .replace(substr,replacement):字符串替换。substr 必需。需要被替换的字符串值。replacement 必需。替换后的字符串值。

  字符串中用一些字符替换另一些字符。

默认情况下使用replacement替换找到的第一个substr的值. 如果需要全部替换需要加上全局标志 g

6  .substr(start,length):字符串截取。start 下标。length 长度。可在字符串中抽取从 start 下标开始的指定数目的字符。

7  .substring(start,stop):用于提取字符串中介于两个指定下标之间的字符。

  start 必需。一个非负的整数,规定要提取的子串的第一个字符在 stringObject 中的位置。

  stop 可选。一个非负的整数,比要提取的子串的最后一个字符在 stringObject 中的位置多 1。

  如果省略该参数,那么返回的子串会一直到字符串的结尾。  

8  .toLowerCase():把字符串转换为小写。

9  .toUpperCase():把字符串转换为大写。

10  .charCodeAt():返回在指定的位置的字符的 Unicode 编码。

var s = “程序员”;
console.log(s.charCodeAt(1));//获取“序”的unicode编码。

11  .fromCharCode():可接受一个指定的 Unicode 值,然后返回一个字符串。

var s = String.fromCharCode(97,98,99);
console.log(s);

字符串方法实例

  点击上传图片按钮检测上传文件后缀是否支持指定的上传后缀。

<body>
<form action="login.php" method="post" enctype="multipart/form-data" id="myform">
    <p>上传头像:<input type="file" id="img" /></p>
    <p><button type="button" id="btn">提交</button></p>
</form>
<script>
    // 验证文件格式
    btn.onclick=function(){
        var filename = img.value;//得到文件路径
        var number = filename.lastIndexOf(".");//得到文件格式后缀.的下标
        var s = filename.substr(number);//从.开始截取文件后缀

        //定义允许上传的文件扩展名
        var allowExt=[".jpg",".gif",".jpeg",".png"];
        var flag=false;
        for (var i=0;i<allowExt.length;i++){
            if (allowExt[i]===s){
                flag=true;
            }
        }
        if (flag){
            myform.submit();//执行表单提交
        }else{
            alert("文件格式不支持!");
        }
    }
</script>
</body>

特殊字符串

  可以在 JavaScript 中使用反斜杠来向文本字符串添加特殊字符。
  代码   输出
  \'   单引号
  \"   双引号
  \&   和号
  \\   反斜杠
  \n   换行符
  \r   回车符
  \t   制表符
  \b   退格符
  \f   换页符

以上特殊的字符串是不能够单独存在在字符串中,需要通过\来转义.

3. Number对象(重点)

  toFixed:把数字转换为字符串,结果的小数点后有指定位数的数字。 

 //指定小数点位数,四舍五入
var a=12.258;
console.log(a.toFixed(2));//12.26

4. Math对象(重点)

  JavaScript自身定义了很多数学运算的方法被定义在Math对象中. Math自身就是一个对象无需创建直接使用自身中的方法和属性。

1. Math的属性PI:PI属性代表圆周率。

2. Math.abs(x):返回数x的绝对值。

3. Math.ceil(x):对一个数x进行上舍入

4. Math.floor(x):对一个数x进行下舍入

5. Math.max(x):返回指定数中带有较大的值的那个数。…表示可以传递无限个参数。

6. Math.min(x,y):返回指定数中带有较小的值的那个数。…表示可以传递无限个参数。

7. Math.pow(x,y):返回 x 的 y 次幂的值。

8. Math.random():返回介于 0 ~ 1 之间的一个随机数,包含0不包含1。

9. Math.round(x):可把一个数字舍入为最接近的整数。(四舍五入)

    <script>
        var a=12.258;
        //指定小数点位数,四舍五入
        console.log(a.toFixed(2));

        //Math类
        console.log(Math.abs(-10));//绝对值 10
        console.log(Math.ceil(3.8));//向上取整 4
        console.log(Math.floor(3.8));//向下取整 3
        console.log(Math.max(20,30,50,10));//获取最大值 50
        console.log(Math.min(20,30,50,10));//获取最小值 10
        console.log(Math.pow(2,10));//x的y次方 1024
        console.log(Math.ceil(Math.random()*10+1));//产生1-10的随机数
    </script>

10. 获取指定范围的随机整数:获取指定范围的随机整数的方法,该方法不是系统的方法是系统,该方法必须记住写法,后面经常应用。

function randomInt(min,max){
    return Math.floor(Math.random()*(max-min+1)+min);
}

//需求:获取10到30之间的随机整数

//逆向分析法:
//>>1. 如果能够获取0到20的随机数,再随机上加10
//>>2. 如果能够获取0到1的随机数,再乘以20可以实现,
//因为通过Math.random()生成的随机数不包含1. 所以说在20的基础上加一
//即 Math.random()*(20+1) 计算出来的值0--21之间(不包含21)
//返过来分析
//>>1. Math.random()*(20+1) 计算出来的值0--21之间(不包含21),要得到10--30
//>>2. 在以上的基础上加10 即: Math.random()*(20+1)+10, 得到10--31之间(不包含31)
//>>3. 在 Math.random()*(20+1)+10公式中需求给出没有20,实际上20可以通过30-10得到
// 即: Math.random()*(30-10+1)+10 (10--31之间的数),但不包含31.并且我们需要的是整数
//>>4. Math.floor(Math.random()*(30-10+1)+10),得到10到30之间的整数
//>>5. 如果将以上需求中的10,30分别作为需求的最小数min,最大数max表示的话,
//得到以下公式:
//Math.floor(Math.random()*(max-min+1)+min)
//>>6.可以将该公式看作获取指定范围随机整数的方法如上方法:

5. Date对象(重点)

  Date 对象用于处理日期和时间。

创建Date对象

1. new Date():创建默认系统日期
2. new Date(dateVal):创建指定日期,必须要符合时间格式("年/月/日 时:分:秒")
3. new Date(year, month, date[, hours[, minutes[, seconds[,ms]]]]):创建指定参数日期。
4. new Date(dateVal):根据dateVal指定的时间创建date对象

字符串的格式:

  短日期可以使用“/”或“-”作为日期分隔符,但是必须用月/日/年的格式来表示,例如"7/20/96"。

  小时、分钟、和秒钟之间用冒号分隔,尽管不是这三项都需要指明。"10:"、"10:11"、和 "10:11:12" 都是有效的。

  dateVal也是数字类型的参数,数字类型的参数代表毫秒值,该毫秒值是从1970 年 1 月 1 日 到指定日期的毫秒数.

5. new Date(year, month, date[, hours[, minutes[, seconds[,ms]]]]):根据指定年月日时分秒创建date对象。

注意:month中的值从0开始, 0—11代表12个月

Date对象的常用方法

1  .getFullYear():可返回一个表示年份的 4 位数字。

2  .getMonth():可返回表示月份的数字。使用本地时间。返回值是 0(一月) 到 11(十二月) 之间的一个整数。

3  .getDate():可返回月份的某一天。使用本地时间。返回值是 1 ~ 31 之间的一个整数。

4  .getHours():可返回时间的小时字段。以本地时间显示。返回值是 0 (午夜) 到 23 (晚上 11 点)之间的一个整数。

5  .getMinutes():以本地时间显示。返回值是 0 ~ 59 之间的一个整数。

6  .getSeconds():可返回时间的秒。以本地时间显示。返回值是 0 ~ 59 之间的一个整数。

7  .getMilliseconds():可返回时间的毫秒。以本地时间显示。返回值是 0 ~ 999 之间的一个整数。

8  .getDay():可返回表示星期的某一天的数字。使用本地时间。返回值是 0(周日) 到 6(周六) 之间的一个整数。

9  .getTime():可返回距 1970 年 1 月 1 日之间的毫秒数。

10  .toLocaleString():可根据本地时间把 Date 对象转换为字符串,并返回结果。

  以上的方法是获取时间中的内容.Date对象也提供了设置Date对象内容的方法

setDate()      设置 Date 对象中月的某一天 (1 ~ 31)。

setMonth()      设置 Date 对象中月份 (0 ~ 11)。

setFullYear()     设置 Date 对象中的年份(四位数字)。

setYear()      请使用 setFullYear() 方法代替。

setHours()     设置 Date 对象中的小时 (0 ~ 23)。

setMinutes()    设置 Date 对象中的分钟 (0 ~ 59)。

setSeconds()    设置 Date 对象中的秒钟 (0 ~ 59)。

setMilliseconds()   设置 Date 对象中的毫秒 (0 ~ 999)。

setTime()     以毫秒设置 Date 对象。

时间案例

1. 倒计时案例

<body>
    <h1>倒计时:<span id="hours">00</span>:<span id="minutes">00</span>:<span id="seconds">00</span></h1>
    <script>
        /*制作一个倒计时*/
        //setInterval周期执行,1秒执行一次函数
        setInterval(function () {
            var d1=new Date(2021,2,5,14,0,0);//目标日期时间
            var d2 = new Date();//当前时间
            var s = Math.floor((d1-d2)/1000);//获取时间差毫秒

            hours.innerHTML=Math.floor(s/3600);//获取小时,放到span标签中
            minutes.innerHTML=Math.floor((s%3600)/60);//获取分钟,放到span标签中
            seconds.innerHTML=Math.floor(s%3600)%60;//获取秒,放到span标签中

        },1000);
    </script>
</body>

2. 计算一个人活了多少天?

/**
    @param birthday: 指定出生日期
    @return 截止当前时间出生天数
*/
function f(birthday){
  //>>1.生日时间对象
    var d1 = new Date(birthday);
  //>>2.当前时间对象
  var d2 = new Date();
  //>>3.得到生日时间距1970.07.07的毫秒值
  var t1 = d1.getTime();
  //>>3.得到当前时间距1970.07.07的毫秒值
  var t2 = d2.getTime();
    return Math.round((t2-t1)/1000/60/60/24)
}
var days = f('1980/06/26');
alert(days);

3. 计算一个人活到60岁还需要多少天?

/**
    @param birthday: 指定出生日期
    @param num: 指定岁数
    @return 截止当前时间出生天数
*/
function f1(birthday,num){
    //>>1.生日时间对象
    var d1 = new Date(birthday);
    //>>2.设置岁数
    var year = d1.getFullYear();
    year+=num;
    //>>3.设置num岁后的日期
    d1.setYear(year);
    var d2 = new Date();
    //>>4.未来num岁后距1970.07.07的毫秒值
    var t1 = d1.getTime();
    //>>5.得到当前时间距1970.07.07的毫秒值
    var t2 = d2.getTime();
  return Math.round((t1-t2)/1000/60/60/24)
}
var days = f1('1980/06/26',60);
alert(days);

6. 作业

1、使用两种方式创建一个车(car)对象,
  属性有:颜色、价格、车门,
  方法有:显示汽车颜色,显示汽车价格。

2、字符串查询:(字符)判断一个字符(比如”a”)是否出现在另一个字符(比如”2340sadfj2affa2”)中。

3、敏感词过滤

4、字符串反转:利用var s1 = prompt(“请输入任意字符”,””)可以获取用户输入的字符(存到变量s1中了),

  //试编程将用户输入的字符“反转顺序”并首尾字母转为大写,其他字母转为小写后alert出来。

5、在网页中显示类似:2017-3-30 18:03:46 星期四

posted @ 2021-01-31 21:37  全村的希望、  阅读(176)  评论(0)    收藏  举报