【 js基础 Day6】内置对象和基本包装类型等知识

在这里插入图片描述

01 复习

复习
编程思想:
面向过程:凡事亲力亲为,所有的事情的过程都要清楚,注重的是过程
面向对象:提出需求,找到对象,对象解决这个问题,我们要结果,注重的是结果

面向对象的特性:封装,继承,多态,(抽象性)

JS是一门什么样的语言?
是一门解释性的语言
是一门脚本语言
是一门弱类型的语言
是一门基于对象的语言
是一门动态类型的语言

对象:有属性和方法,具体特指的某个事物
对象:js中就是一组无序的属性的集合
属性----特征
方法----行为

创建的对象的方式:
1.通过调用系统的构造函数创建对象 new Object()

 var obj1=new Object();

2.自定义构造函数创建对象

 var obj2=new 自定义构造函数();

3.字面量的方式创建对象

 var obj3={};

变量 instanceof 对象------->布尔类型,判断这个变量是不是这个类型的

JSON格式的数据,都是键值对,成对的数据

 var obj={
   name:"小明"
 };
 var json={
   "name":"小明"
 };

json的数据实际上就是格式化后的一组字符串的数据

对象设置属性的值的写法
对象.属性名字=值;----点语法
对象[“属性的名字”]=值;-----

对象获取属性的值的写法
对象.属性
对象[“属性”]

遍历对象

 for(var key in 对象){   key---是一个变量,这个变量中存储的是遍历的对象的属性的名字

 }

原始数据类型:number,string,boolean,null,undefined,object
基本类型(简单类型,值类型):number,string,boolean
复杂类型(引用类型):object
空类型:undefined,null

基本类型的值在栈上
复杂类型的对象在堆上,地址(引用)在栈上

值类型之间传递的是值
引用类型之间传递的是引用(地址)

对象分三种:内置对象,自定义对象,浏览器对象

- 内置对象:系统提供的
- 自定义对象:自己写的
- 浏览器对象:浏览器的

Math 是一个对象,但是不是一个函数
Math对象下的属性和方法都是静态**

方法:
Math.ceil()—向上取整
Math.floor()—向下取整
Math.Pi----圆周率的值
Math.Max()—一组数字中的最大值
Math.Min()—一组数字中的最小值
Math.abs()----绝对值
Math.random—随机数字
Math.sqrt()----开平方
Math.pow()----一个数字的多少次幂

new 的执行过程:----->new的时候,系统做了什么事?

  1. 开辟空间,存储创建的新的对象
  2. 把this设置为当前的对象
  3. 设置属性和方法的值
  4. 返回当前的新的对象
    在这里插入图片描述
 var obj={
     name:"牙擦苏",
     age:20,
     sex:"男",
     height:198,
     weight:55
   };
   var objs={
     "name":"值"
   };
   //遍历对象
   for(var key in obj){
     console.log(key+"======>"+obj[key]);
   }
var obj={
  "name":"牙擦苏",
  "age":20,
  "sex":"男",
  "height":198,
  "weight":55
};
var objs={
  "name":"值"
};
//遍历对象
for(var key in obj){
  console.log(key+"======>"+obj[key]);
}

02 课程介绍

内置对象
Math------>
Math的两个例子-----写一遍
Date
一个案例----格式化时间
Array
String

所有我介绍的常见的方法—熟练的时候,需求—该用什么方法

03 Math对象的案例

var result= Math.max(10,20,30,40);
   console.log(result);

    //例子:自己定义一个对象,实现系统的max的方法
    function MyMath() {
      //添加了一个方法
      this.getMax=function () {
        //所有数字中的最大值
        var max=arguments[0];
        for(var i=0;i<arguments.length;i++){
          if(max<arguments[i]){
            max=arguments[i];
          }
        }
        return max;
      };
    }
    //实例对象
    var mt=new MyMath();
    var result=mt.getMax(10,20,30,40,100,3);
    console.log(result);

04 Math对象的案例

<style>
    div {
      width: 300px;
      height: 200px;
      background-color: pink;
    }
  </style>
  <script>
    //随机产生一个十六进制的颜色值
    //封装成一个函数
    console.log(parseInt(Math.random() * 5));

    function getColor() {
      var str = "#";
      //一个十六进制的值的数组
      var arr = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"];
      for (var i = 0; i < 6; i++) {
        //产生的每个随机数都是一个索引,根据索引找到数组中对应的值,拼接到一起
        var num = parseInt(Math.random() * 16);
        str += arr[num];
      }
      return str;
    }
    //页面记载的事件
    window.onload = function () {
      //在文档中通过id属性的值查找这个元素(标签).设置该标签的背景颜色
      document.getElementById("dv").style.backgroundColor = getColor();
    };
    //console.log(getColor());
  </script>
</head>
<body>
<div id="dv"></div>

</body>

05 Date对象

//创建实例对象
    var dt = new Date();
    //当前的时间---当前的服务器
    console.log(dt);

    var dt = new Date("2017-08-12");
    //传入的时间
    console.log(dt);


    var dt = new Date("2017/08/12");
    传入的时间
    console.log(dt);
    获取时间的对象
    var dt = Date.now();
    console.log(dt);//毫秒


   var dt = new Date();

   //获取年份
   console.log(dt.getFullYear());
   //获取月份
   console.log(dt.getMonth()+1);//是0开始的 真实的月份是需要加1的
   //获取日期
   console.log(dt.getDate());
   //获取小时
   console.log(dt.getHours());
   //获取分钟
   console.log(dt.getMinutes());
   //获取秒
   console.log(dt.getSeconds());

   //获取星期
   console.log(dt.getDay());//星期从0开始的


   // var dt=new Date();

    //console.log(dt.toDateString());//英文的---日期
    //console.log(dt.toLocaleDateString());//数字格式--日期

//    console.log(dt.toTimeString());//小时分钟秒
//    console.log(dt.toLocaleTimeString());//小时分钟秒

    //console.log(dt.valueOf());//毫秒值
//    console.log(dt);
//    //转成字符串
//    console.log(dt.toString());

//    var num=10;
//    console.log(num.toString());

06 总结Date对象的方法

var dt=new Date();
var dt=+new Date();//一种特殊的写法,只适用于这个Date的对象
console.log(dt);

dt.getFullYear();//年
dt.getMonth();//月---从0开始
dt.getDate();//日
dt.getHours();//小时
dt.getMinutes();//分钟
dt.getSeconds();//秒
dt.getDay();//星期---从0开始
dt.toDateString();//日期
dt.toLocaleDateString();//日期
dt.toTimeString();//时间
dt.toLocaleTimeString();//时间
dt.valueOf();//毫秒

07 格式化日期和时间

格式化后的指定格式的日期和时间–封装一个函数

function getDate(dt) {
 // var dt=new Date();//创建日期的对象
 //获取年
 var year = dt.getFullYear();
 //获取月
 var month = dt.getMonth() + 1;
 //获取日
 var day = dt.getDate();
 //获取小时
 var hour = dt.getHours();
 //获取分钟
 var minute = dt.getMinutes();
 //获取秒
 var second = dt.getSeconds();

 month = month < 10 ? "0" + month : month;
 day = day < 10 ? "0" + day : day;
 hour = hour < 10 ? "0" + hour : hour;
 minute = minute < 10 ? "0" + minute : minute;
 second = second < 10 ? "0" + seconnd : second;

 return year + "年" + month + "月" + day + "日" + hour + ":" + minute + ":" + second;
 //return "2017年08月23日 11:12:23"
}

var dt = new Date();
console.log(getDate(new Date(dt)));

08 String对象

String---->是一个对象
字符串可以看成是字符组成的数组,但是js中没有字符类型
字符是一个一个的,在别的语言中字符用一对单引号括起来
在js中字符串可以使用单引号也可以使用双引号
因为字符串可以看成是数组,所以,可以通过for循环进行遍历

字符串特性:不可变性,字符串的值是不能改变

字符串的值之所以看起来是改变的,那是因为指向改变了,并不是真的值改变了

var str="hello";
      str[1]="W";  字符串可以通过索引访问字符串中的某个值

但是,是可以访问—读取—只读
设置:就是可以改变
对象的方式来看待

   var str="小苏好猥琐";
   str="小苏好邪恶了";//重新赋值
   console.log(str);
var str="hello";
  str[1]="W";
  console.log(str);
  for(var i=0;i<str.length;i++){
    console.log(str[i]);
  }

  var str="1";
  str="2";
  str="3";

  var str = "123";
  str = "456";
  console.log(str);//456

String对象

string ---->字符串类型----基本类型
String---->字符串类型----引用类型
字符串对象----String对象

  var str1="90";
  var str2="哈哈,我又变帅了";
  var str3="안녕하세요.";
  var str4="こんにちは";
  var str5="สวัสดี";
  var str6="Привет ";

var str = “萨瓦迪卡”;
js中没有字符类型
字符类型
字符串类型

整数类型

 int num=10;

小数

 float num2=90.4

字符串

 string str="hello";  //字符串必须用双引号

字符

 char ch='h';    //字符必须用单引号---值---只有一个

    char ch='y'

    'h'+'e'+'l'+'l'+'o'---- "hello"

字符串是可以看成是多个字符组合成的数组的

js中无论是单引号的还是双引号的都是字符串

var str="hello";//可以看成是一个字符数组
for(var i=0;i<str.length;i++){
  console.log(str[i]);
}

09 String对象的下的方法

实例方法---->必须要通过new的方式创建的对象(实例对象)来调用的方法
静态方法---->直接通过大写的构造函数的名字调用的方法(直接通过大写的对象名字调用的)

字符串的常用属性:
.length------>字符串的长度
.charAt(索引),返回值是指定索引位置的字符串,超出索引,结果是空字符串
.fromCharCode(数字值,可以是多个参数),返回的是ASCII码对应的值
.concat(字符串1,字符串2,…);返回的是拼接之后的新的字符串
.indexOf(要找的字符串,从某个位置开始的索引);返回的是这个字符串的索引值,没找到则返回-1
.lastIndexOf(要找的字符串);从后向前找,但是索引仍然是从左向右的方式,找不到则返回-1
.replace(“原来的字符串”,“新的字符串”);用来替换字符串的
.slice(开始的索引,结束的索引); 从索引5的位置开始提取,到索引为10的前一个结束,没有10,并返回这个提取后的字符串
.split(“要干掉的字符串”,切割后留下的个数);切割字符串
.substr(开始的位置,个数);返回的是截取后的新的字符串
.substring(开始的索引,结束的索引),返回截取后的字符串,不包含结束的索引的字符串
.toLocaleLowerCase();转小写
.toLowerCase();转小写
.toLocaleUpperCase()转大写
.toUpperCase();转大写
.trim();干掉字符串两端的空格

       var str="12345";
       console.log(str.length);
    
       var str="whatareyounoshalei";
       var result=str.charAt(5);
       console.log(result);

       var str=String.fromCharCode(107,108,109);
       console.log(str);


       var str=String.fromCharCode(83,79,83);
       console.log(str);


       var str="what";
       console.log(str+"are"+"you"+"no"+"sha"+"lei");


       var str="小苏";
       console.log(str.concat("喜欢","凤姐","这是","真的"));


       var str="小苏真的好猥好琐啊";
       var index=str.indexOf("好",5);
       console.log(index);

       var str="helo amen";
       var index=str.lastIndexOf("Y");
       console.log(index);

       var str="小苏好帅哦,真的好勇敢哦";
       if(str.indexOf("帅")!=-1){
         str=str.replace("帅","猥琐");
       }else{
         console.log("不存在");
       }
       console.log(str);
   var str = "如果有一天我邪恶了,请记住,我曾纯洁过";
   //从索引5的位置开始提取,到索引为10的前一个结束,没有10,并返回这个提取后的字符串
   str = str.slice(5, 10);
   console.log(str);

   var str="乔峰|慕容|凤姐|梅超风|小苏|大蛇丸";
   var arr=str.split("|");
   for(var i=0;i<arr.length;i++){
     console.log(arr[i]);
   }


   var str="哈哈,小苏真的是好帅哦";
   str=str.substr(5,5);
   console.log(str);


   var str="哈哈,小苏真的是好帅哦";
   str=str.substring(5,9);
   console.log(str);

   var str="HELLO";
   //str=str.toLocaleLowerCase();
   str=str.toLowerCase();
   console.log(str);


   var str="hello";
   str=str.toLocaleUpperCase();
   //str=str.toUpperCase();
   console.log(str);

    var str="   哦,这    是一个神奇的一天   ";
    str=str.trim();
    console.log("===="+str+"====");

10 字符串案例

//案例1:
    var str = "我爱最帅的杨哥,太帅了";
    //console.log("杨哥");
    var key = "杨哥";
    //先获取要截取的字符串的索引的位置
    var index = str.indexOf(key);
    //从指定的位置开始截取,截取两个即可
    str = str.substr(index, 2);
    console.log(str);

    //案例2:找到这个字符串中所有的 o 出现的位置
    var str2 = "hello wod odd ott fbo nhyo";
    var index = 0;//开始的位置
    var key = "o";//要找的字符串
    while ((index = str2.indexOf(key, index)) != -1) {//如果是-1情况,说明找完了
      console.log(index);
      index += key.length;
    }
    //4 7 10 14 20 25
    //var index=str2.indexOf("o",0);
    //console.log(index);

    //案例3:找到这个字符串中每个字符串出现了多少次
    var str3 = "whatOareYyouYnoYshaHleiHoHmyHgod";
    //第一步:把所有的字母全部变成小写
    str3 = str3.toLocaleLowerCase();
    //第二步:创建一个空对象,目的:把字母作为键,次数作为值
    var obj = {};
    //第三步,遍历字符串,获取每个字母
    for (var i = 0; i < str3.length; i++) {
      //判断obj这个对象中有没有这个字母(字母---键)
      var key = str3[i];//每个字母
      if (obj[key]) {//判断obj中有没有这个键
        //对象中有这个字母了
        obj[key]++;
      } else {
        //对象中没有这个字母,那就把字母加到对象中,并且给这个字母一个出现的次数,默认1次
        obj[key] = 1;
      }
    }

    //遍历对象,显示每个字母的次数
    for (var key in obj) {
      console.log(key + "这个字母出现了" + obj[key] + "次");
    }
    //创建新的对象---空对象---没有属性,也没有方法


     var obj = {
       "sex": "男"
     };
     //我想知道这个obj对象中有没有sex这个属性
     //把对象["属性名字"]--->放在if的判断中即可----判断对象中有没有这个属性
     //if的判断的结果是true,则有这个属性,否则没有这个属性
     if (obj["age"]) {
       console.log("有");
     } else {
       console.log("没有");
    }

11 Array对象

Array.isArray(对象)---->判断这个对象是不是数组
instanceof关键字
.concat(数组,数组,数组,…) 组合一个新的数组
.every(函数)–返回值是布尔类型,函数作为参数使用,函数中有三个参数,第一个参数是元素的值,第二个参数是索引值,第三个参数是原来的数组(没用)
如果这个数组中的每个元素的值都符合条件,最后才返回的是true
.filter(函数);返回的是数组中每一个元素都复合条件的元素,组成了一个新的数组
.push(值);—>把值追加到数组中,加到最后了—返回值也是追加数据之后的数组长度
.pop();—>删除数组中最后一个元素,返回值就是删除的这个值
.shift();—>删除数组中第一个元素,返回值就是删除的这个值
.unshift();—>向数组的第一个元素前面插入一个新的元素,----返回值是插入后的程度
.forEach(函数)方法—遍历数组用—相当于for循环
.indexOf(元素值);返回的是索引,没有则是-1
.join(“字符串”);----返回的是一个字符串
.map(函数);—>数组中的每个元素都要执行这个函数,把执行后的结果重新的全部的放在一个新的数组中
.reverse();----->反转数组
.sort();—排序的,可能不稳定,如果不稳定,请写MDN中的那个固定的代码
.arr.slice(开始的索引,结束的索引);把截取的数组的值放在一个新的数组中,但是不包含结束的索引对应的元素值
.splice(开始的位置,要删除的个数,替换的元素的值);一般是用于删除数组中的元素,或者是替换元素,或者是插入元素

构造函数
   var arr1=new Array();
   //字面量的方式
   var arr2=[];


 对象是不是数组类型:两种
   // 1   instanceof关键字
   //var obj=[];
    console.log(obj instanceof Array);//false
 
    //2 使用数组的
    console.log(Array.isArray(obj));//


    var arr=["a","b","c"];
    var newArr=Array.from(arr);
    console.log(newArr);

    var arr1=[10,20,30];
    var arr2=[40,50,60];
    console.log(arr1.concat(arr2));

    var arr=[1000,2000,3000];
    //a----: 元素的值
    //b----: 索引的值
    //c----:谁调用了这个方法,那么c就是谁---->arr
   var flag= arr.every(function (a,b) {
      //console.log(a+"==="+b+"===="+c);
      return a>2000;//数组中的每个元素的值都要大于2000的情况,最后才返回true
    });


    var arr=["小明明lkko","小曹操674","小白白bd","笑眯眯a"];
   var flag=arr.every(function (ele,index) {
      //数组中的每个元素的长度是不是大于4
      return ele.length>4;
    });
     console.log(flag);


    var arr=[10,20,30,40,50,60,70,80];
    var newArr=arr.filter(function (ele) {//ele---每个元素
      return ele>40;
    });
    console.log(newArr);

    var arr=[10,0,20,0,40,0,60,100];
    var newArr=arr.filter(function (ele) {
      return ele!=0;
    });
    console.log(newArr);

    var arr=[10,20,30,40,50];
    var result=arr.unshift(100);
    console.log(result);
    console.log(arr);

var arr = [10, 20, 30, 40];
arr.forEach(function (ele,index) {
  console.log(ele+'======'+index);
});

var arr=[10,20,30,40];
var index=arr.indexOf(300);
console.log(index);


var arr=["小白","小黑","小红","小芳","小绿","小苏"];
var str=arr.join("|");
console.log(str);


var numbers = [1, 4, 9];
var roots = numbers.map(Math.sqrt);
console.log(roots);


var arr=[10,20,30,40,50];
arr.reverse();//反转
console.log(arr);


var arr=[1,40,20,10,100];
//a---arr[j]
//b---arr[j+1]
arr.sort(function (a,b) {
  if(a>b){
    return 1;
  }else if(a==b){
    return 0;
  }else{
    return -1;
  }
});
console.log(arr);



var arr=[10,20,30,40,50,60,70,80,90,100];
var newArr= arr.slice(3,7);
console.log(newArr);


 var myFish = ['angel', 'clown', 'mandarin', 'sturgeon'];

// myFish.splice(2, 0, 'drum'); // 在索引为2的位置插入'drum'

 // myFish 变为 ["angel", "clown", "drum", "mandarin", "sturgeon"]

 myFish.splice(2, 1); // 从索引为2的位置删除一项(也就是'drum'这一项)

 console.log(myFish);
 // myFish 变为 ["angel", "clown", "mandarin", "sturgeon"]

12 基本包装类型

普通变量不能直接调用属性或者方法
对象可以直接调用属性和方法

基本包装类型:本身是基本类型,但是在执行代码的过程中,如果这种类型的变量调用了属性或者是方法,那么这种类型就不再是基本类型了,而是基本包装类型,这个变量也不是普通的变量了,而是基本包装类型对象

  string number boolean


  var str="hello";//普通变量
  str=str.replace("ll","HH");//变量调用方法
  console.log(str);


  var str=new String("hello");
  str=str.replace("ll","HH");
  console.log(str);
  str=null;

  var num=10;//number---->
  console.log(num.toString());

如果是一个对象&&true,那么结果是true
如果是一个true&&对象,那么结果是对象

  var flag=new Boolean(false);
  var result=true&&flag;
  console.log(result);


  var num=10;
  var num2=Number("10");//转换,没有new---类型转
  var num3=new Number("10");//基本包装类型

13 习题

将一个字符串数组输出为|分割的形式,比如“刘备|张飞|关羽”。
使用两种方式实现====

将一个字符串数组的元素的顺序进行反转。
[“a”, “b”, “c”, “d”] -> [ “d”,“c”,“b”,“a”]。
使用两种种方式实现。提示:第i个和第length-i-1个进行交换====

工资的数组[1500, 1200, 2000, 2100, 1800],把工资超过2000的删除
[“c”, “a”, “z”, “a”, “x”, “a”]找到数组中每一个a出现的位置=====

编写一个方法去掉一个数组的重复元素

Ctrl+鼠标左键—转到定义----适合没有网络,自己写代码,看结果,总结
MDN—在线文档,查结果----初级学习
百度----一定要多查----对比的看
谷歌----百度没有的,去谷歌—多对比

Math 是一个对象,但是不是一个函数
Math对象下的属性和方法都是静态

方法:

Math.ceil()—向上取整
Math.floor()—向下取整
Math.Pi----圆周率的值
Math.Max()—一组数字中的最大值
Math.Min()—一组数字中的最小值
Math.abs()----绝对值
Math.random—随机数字
Math.sqrt()----开平方
Math.pow()----一个数字的多少次幂

    console.log(Math.ceil(44.6));
    console.log(Math.floor(44.6));
    console.log(Math.PI);//注意:没有括号
    console.log(Math.max(44,33,22,11,666));//注意:是小写哦
    console.log(Math.min(44,33,22,11,666));
    console.log(Math.abs(-4));
    console.log(Math.random());//注意:有括号!!!
    console.log(Math.sqrt(4));
    console.log(Math.pow(3,2));

   function getDate(dt) {
     var year = dt.getFullYear();
     var month = dt.getMonth() + 1;
     var day = dt.getDate();
     var hour = dt.getHours();
     var minute = dt.getMinutes();
     var second = dt.getSeconds();

     month = month < 10 ? "0" + month : month;
     day = day < 10 ? "0" + day : day;
     hour = hour < 10 ? "0" + hour : hour;
     minute = minute < 10 ? "0" + minute : minute;
     second = second < 10 ? "0" + second : second;


       return year + "年" + month + "月" + day + "日" + hour + ":" + minute + ":" + second;
     }
     var dt = new Date();;
     console.log(getDate(new Date(dt)));

    // var str = [1500, 1200, 2000, 2100, 1800];

     for (var i = 0; i < str.length; i++) {
       if (str[i] > 2000) {
         str.splice(i, 1);
         i--;
       }
     }
     console.log(str)

自己写的—只能求出一个

var str=["c", "a", "z", "a", "x", "a"];
var aa=str.indexOf("a")
console.log(aa)

别人写的!!

  var arr=["c", "a", "z", "a", "x", "a"];
  var index=-1;
  for(var i=0;i<arr.length;i++){
    index=arr.indexOf("a",++index);
    //当index==-1时,已经找到了数组的最末尾并且没有这个元素了,停止循环
    if(index==-1){
      break;
    }
  console.log(index);
  }

其他参考链接

【 js基础 Day1】js的介绍及基本语法变量,运算符

【 js基础 Day2】js的流程控制:分支语句,循环.顺序结构

【 js基础 Day3】关键字的使用,数组(重点)和函数(重点)

【 js基础 Day4】面向过程,面向对象,自定义对象,内置对象

【 js基础 Day5】函数(重点),作用域,预解析,arguments,对象

【 js基础 Day6】内置对象和基本包装类型等知识

【如果你不是新手】推荐链接

【js高级 Day1】深入理解原型及作用,构造函数和实例对象和原型对象之间的关系

【js高级 Day2】深入理解原型添加方法,私有函数,面向对象的编程思想(案例小贪吃蛇)

【js高级 Day3】深入理解原型的方式继承,借用构造函数继承,组合继承,拷贝继承

【js高级 Day4】深入理解apply和call方法,作用域,闭包,递归

【js高级 Day5】深入理解浅拷贝,深拷贝,遍历DOM树,正则表达式

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阿珊和她的猫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值