JavaScript基础&实战(5)js中的数组、forEach遍历、Date对象、Math、String对象

简介: 这篇文章介绍了JavaScript中的数组、Date对象、Math对象以及包装类(String、Number、Boolean),并详细讲解了数组的创建、方法(如forEach、push、pop、unshift、slice、splice)和遍历操作,以及工厂方法创建对象和原型对象的概念。

文章目录

  • 1、工厂方法创建对象
    • 1.1 代码块
    • 1.2、测试结果
  • 2、原型对象
    • 2.1 代码
    • 2.2 测试结果
  • 3、toString
    • 3.1 代码
    • 3.2 测试结果
  • 4、数组
    • 4.1 代码
  • 5、字面量创建数组、数组的方法
    • 5.1 代码
    • 5.2 测试结果
  • 6、forEach遍历
    • 6.1 代码
    • 6.2 测试结果
  • 7、splice和slice
    • 7.1 代码
    • 7.2 测试结果
  • 8、Date对象
  • 9、Math
  • 10、包装类
    • 10.1 代码
  • 11、String对象

1、工厂方法创建对象

1.1 代码块

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>工厂方法创建对象</title>
    <style type="text/css"> </style>

    <script type="text/javascript">

    /*
                   思路:
                      将创建对象的方法封装 在一个函数中,在创建对象的时候直接调用函数。
                                          对象的属性可以在调用函数的时候传参

                    使用工厂方法创建的对象,使用的构造函数都是object
                    所以创建的对象都是object这个类型
                    就导致我们无法区分出多种不同类型的对象

    */

               function createPerson(name,gender,age){
                    var obj = new Object();
                    obj.name = name;
                    obj.gender = gender;
                    obj.age = age;
                    obj.sayName = function(){
                        alert(this.name);
                    }
                    return obj;
               }

               var person1 = createPerson("小红","女",18);
               var person2 = createPerson("小黑", "男", 18);
               var person3 = createPerson("小紫", "女", 18);
               console.log(person1);
               console.log(person2);
               console.log(person3);
               person1.sayName();






    </script>
</head>

<body>

</body>

</html>

1.2、测试结果

在这里插入图片描述

2、原型对象

2.1 代码

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>原型对象</title>
    <style type="text/css"> </style>

    <script type="text/javascript">

    /*
                    我们所创建的每一个函数,解析器都会向函数中添加一个属性prototype
                            这个属性对应着一个对象,这个对象就是我们所谓的原型对象

                    如果函数作为普通函数调用prototype没有任何作用
                      当函数以构造函数的形式调用时,它所创建的对象中都会有一个隐含的属性,
                          指向该构造函数的原型对象,我们可以通过__proto__来访问属性

                    原型对象就相当于一个公共的区域,所有的同一个类的实例都可以访问到这个原型对象
                        我们可以将对象中共有的内容,统一设置到原型对象中


                    当我们访问对象的一个属性或方法时,它会先在对象自身中寻找,如果有则直接使用,
                        如果没有则会去原型对象中寻找,如果找到则直接使用。如果没有找到则到原型的原型中寻找
                            ,直到找到 Object对象的原型,Object对象的原型没有原型,如果在Object中依然没有找到
                                  则返回undefined


                    以后我们创建构造函数时,可以将这些对象共有的属性和方法,统一添加到构造函数的原型对象中,
                        这样不用为每一个对象添加,也不会影响到全局作用域,就可以使每个对象都具有这些属性和方法



    */

                          function Myclass(){

                          }

                        //   向Myclass的原型中添加属性a
                          Myclass.prototype.a = 123;

                        //  向Myclass的原型中添加一个方法
                          Myclass.prototype.sayHello = function(){
                              alert("hello");
                          }

                        /*

                          原型中写的同名的方法,后写的会覆盖之前写的
                           Myclass.prototype.sayHello = function () {
                                alert("hello yuanxing");
                            }

                        */

                          var mc = new Myclass();
                          mc.sayHello();
                          console.log(mc.a);
                          console.log(Myclass.prototype);
                          console.log(mc.__proto__);


    </script>
</head>

<body>

</body>

</html>

2.2 测试结果

在这里插入图片描述

3、toString

3.1 代码

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>toString</title>
    <style type="text/css"> </style>

    <script type="text/javascript">


                   function Person(name,gender,age){
                       this.name = name;
                       this.gender = gender;
                       this.age = age;
                   }

                   //修改Person原型的toString
                   Person.prototype.toString = function(){
                       return "Person[name = " + this.name + ",age = " + this.age + ",gender = " + this.gender + "]";
                   }

                   //创建一个person实例
                   var per = new Person("孙悟空","男",18);

                   var per1 = new Person("唐僧","男",18);
                //    per1.toString();
                   console.log(per1.toString());

                //    per.toString = function(){
                //             return "Person[name = "+this.name+",age = "+this.age+",gender = "+this.gender+"]";
                //    }

                   //当我们在页面中打印一个对象时,实际上输出的对象的toString()方法的返回值

                   var result = per.toString();
                   console.log(result);

                   console.log(per.hasOwnProperty("toString"));//false
                   console.log(per.__proto__.hasOwnProperty("toString"));//false
                    console.log(per.__proto__.__proto__.hasOwnProperty("toString"));//true


    </script>
</head>

<body>

</body>

</html>

3.2 测试结果

在这里插入图片描述

4、数组

4.1 代码

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>数组</title>
    <style type="text/css"> </style>

    <script type="text/javascript">

                  //创建数组对象
                  var arr =  new Array();

                  //使用typeof检查一个数组时,会返回object
                  console.log(typeof arr);

                  /*
                     向数组中添加元素
                            语法:数组[索引] = 值  
                  */

                  arr[0] = 10;
                  arr[1] = 20;
                  arr[2] = 30;
                  arr[3] = 40;

                  /*
                    读取数组中的元素
                            语法:数组[索引]

                            如果读取不存在的索引,不会报错,会返回undefined

                  */

                  console.log(arr[0]);

                /*

                   对于连续的数组,使用length可以获取到数组的长度(元素的个数)
                          修改length的长度大于原长度,多出部分会空出来
                          如果修改的length小于原长度,则多出的部分会被删除

                */
                console.log(arr.length);

                // arr.length = 1;
                // arr.length = 10;

            /*
                向数组的最后一个位置添加元素
                           arr[arr.length] = 值

            */
           arr[arr.length] = 70;




    </script>
</head>

<body>

</body>

</html>

5、字面量创建数组、数组的方法

在这里插入图片描述

5.1 代码

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>字面量创建数组</title>
    <style type="text/css"> </style>

    <script type="text/javascript">

    /*
            使用字面量创建数组
            语法:[]

            var arr = [];   

            在创建数组的时候,就可以指定数组中的元素


            数组中的元素可以时任意类型的数据类型
              也可以是对象


    */

          var arr = [1,2,"hello","NaN"];
          console.log(arr[2]);

          //对象
          var obj =  {name:"孙悟空"};
          arr[arr.length] = obj;
          console.log(arr);
          console.log(arr[arr.length-1]);

/*
       push()  向数组的末尾添加一个或更多元素,并返回新的长度。
*/
          var array = ["张三","李四","麻子"];
          console.log(array);
          array.push("王五");
          console.log(array);
         var result =  array.push("12","23");
          console.log(array);   
          console.log(result);

/*
        pop()  删除并返回数组的最后一个元素

*/

        var rs = array.pop();
        console.log(array);
        console.log(rs);

/*
         unshift() 向数组的开头添加一个或更多元素,并返回新的长度。
                   向前边添加元素后,后边的元素索引向后移动
*/

        var rss =  array.unshift("武松","武大郎");
        console.log(array);
        console.log(rss);


    </script>
</head>

<body>

</body>

</html>

5.2 测试结果

在这里插入图片描述

6、forEach遍历

6.1 代码

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>数组的遍历</title>
    <style type="text/css"> </style>

    <script type="text/javascript">

/*

               一般我们使用for循环去遍历数组
                 JS中为我们提供了一个方法,用来遍历数组
                 forEach()
                         - 只支持IE8以上的浏览器
                forEach()方法需要一个函数作为参数
                       - 像这种函数,由我们创建但是不由我们调用的,我们称为回调函数
                       - 数组中有几个元素函数就会执行几次,每次执行时,浏览器会将遍历到的元素以实参的形式传递进来
                          我们可以来定义形参,来读取这些内容

                          浏览器会在回调函数中传递三个参数:
                                第一个参数,就是当前正在遍历的元素
                                第二个参数,就是当前正在遍历的元素的索引
                                第三个参数,就是正在遍历的数组


*/

                  //创建一个数组
                var arr = [1,2,3,4,5];
                for(var i = 0; i < arr.length ;i++){
                    console.log(arr[i]);
                }

                arr.forEach(function(value,index,obj){
                    console.log("value= "+value);
                    console.log("index="+index);
                    console.log("obj="+obj);

                });


    </script>
</head>

<body>

</body>

</html>

6.2 测试结果

在这里插入图片描述

7、splice和slice

7.1 代码

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>slice和splice</title>
    <style type="text/css"> </style>

    <script type="text/javascript">

                 //创建一个数组
                    var arr = ["孙悟空", "猪八戒", "唐僧", "沙悟净", "白骨精"];

        /*
                slice()
                   - 可以用来从数组中取出指定元素
                   - 该方法不会改变元素数组,而是截取到的元素封装到一个新数组中返回
                   - 参数:
                         1、截取开始的位置索引,包括开始索引
                         2、截取结束位置的索引,不包括结束索引
                            第二个参数可以不写,从开始索引往后的所有的元素

                            索引可以传递一个负值,如果传递一个负值,则从后往前计算
                             -1 倒数第一个



        */

                    var result = arr.slice(0,2);
                    console.log(result);
                    console.log(arr);

        /*

                   splice()
                            会影响到原数组,会将指定元素从原始数组中删除
                            并将被删除的元素作为返回值返回

                            - 参数
                                 第一个,表示开始位置的索引
                                 第二个,表示删除的数量
                                 第三个及以后,
                                           可以传递新的元素,这些新的元素会自动插入到开始位置索引前边


        */

          var array = ["孙悟空", "猪八戒", "唐僧", "沙悟净", "白骨精"];

          var result = array.splice(1,2,"张三","李四","王二");
          console.log(array);
          console.log(result);


    </script>
</head>

<body>

</body>

</html>

7.2 测试结果

在这里插入图片描述

8、Date对象

在这里插入图片描述

9、Math

在这里插入图片描述

10、包装类

10.1 代码

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>包装类</title>
    <style type="text/css"> </style>

    <script type="text/javascript">

/*
           在JS中提供了三个包装类,通过这三个包装类可以将基本数据类型的数据转换为对象
            String()
                     可以将基本数据类型字符串转换为String对象
            Number() 
                     可以将基本数据类型字符串转换为number对象
            Boolean()
                      可以将基本数据类型字符串转换为Boolean对象



*/


    </script>
</head>

<body>

</body>

</html>

11、String对象

在这里插入图片描述

相关文章
|
1月前
|
JavaScript 前端开发
如何在 JavaScript 中使用 __proto__ 实现对象的继承?
使用`__proto__`实现对象继承时需要注意原型链的完整性和属性方法的正确继承,避免出现意外的行为和错误。同时,在现代JavaScript中,也可以使用`class`和`extends`关键字来实现更简洁和直观的继承语法,但理解基于`__proto__`的继承方式对于深入理解JavaScript的面向对象编程和原型链机制仍然具有重要意义。
|
1月前
|
Web App开发 JavaScript 前端开发
如何确保 Math 对象的方法在不同的 JavaScript 环境中具有一致的精度?
【10月更文挑战第29天】通过遵循标准和最佳实践、采用固定精度计算、进行全面的测试与验证、避免隐式类型转换以及持续关注和更新等方法,可以在很大程度上确保Math对象的方法在不同的JavaScript环境中具有一致的精度,从而提高代码的可靠性和可移植性。
|
1月前
|
JSON 前端开发 JavaScript
JavaScript中对象的数据拷贝
本文介绍了JavaScript中对象数据拷贝的问题及解决方案。作者首先解释了对象赋值时地址共享导致的值同步变化现象,随后提供了五种解决方法:手动复制、`Object.assign`、扩展运算符、`JSON.stringify`与`JSON.parse`组合以及自定义深拷贝函数。每种方法都有其适用场景和局限性,文章最后鼓励读者关注作者以获取更多前端知识分享。
18 1
JavaScript中对象的数据拷贝
|
1月前
|
JavaScript 前端开发 图形学
JavaScript 中 Math 对象常用方法
【10月更文挑战第29天】JavaScript中的Math对象提供了丰富多样的数学方法,涵盖了基本数学运算、幂运算、开方、随机数生成、极值获取以及三角函数等多个方面,为各种数学相关的计算和处理提供了强大的支持,是JavaScript编程中不可或缺的一部分。
|
1月前
|
JavaScript 前端开发 开发者
|
2月前
|
JavaScript 前端开发 大数据
在JavaScript中,Object.assign()方法或展开语法(...)来合并对象,Object.freeze()方法来冻结对象,防止对象被修改
在JavaScript中,Object.assign()方法或展开语法(...)来合并对象,Object.freeze()方法来冻结对象,防止对象被修改
35 0
|
3月前
|
Java 索引
java基础(13)String类
本文介绍了Java中String类的多种操作方法,包括字符串拼接、获取长度、去除空格、替换、截取、分割、比较和查找字符等。
44 0
java基础(13)String类
|
24天前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
38 2
|
2月前
|
Java
【编程基础知识】(讲解+示例实战)方法参数的传递机制(值传递及地址传递)以及String类的对象的不可变性
本文深入探讨了Java中方法参数的传递机制,包括值传递和引用传递的区别,以及String类对象的不可变性。通过详细讲解和示例代码,帮助读者理解参数传递的内部原理,并掌握在实际编程中正确处理参数传递的方法。关键词:Java, 方法参数传递, 值传递, 引用传递, String不可变性。
67 1
【编程基础知识】(讲解+示例实战)方法参数的传递机制(值传递及地址传递)以及String类的对象的不可变性
|
2月前
|
安全 Java 测试技术
Java零基础-StringBuffer 类详解
【10月更文挑战第9天】Java零基础教学篇,手把手实践教学!
52 2
下一篇
DataWorks