JavaScript总结

JavaScript概述的介绍:

    JavaScript是一门web上的编程语言,主要用于和用户交互。浏览器客户端的脚本语言,不需要进行编译,直接就可以被浏览器解析执行,嵌套在HTML文件中有浏览器引擎加载执行,和Java没有大的联系。

      好处:可以增强一些用户的体验,实现人与页面的动态交互,也可以使用js来控制页面的元素内容,让页面有一些动态效果(轮播图) 

      C--  LiveScript   网景公司NetScspe  1995 Java --->javaScript  微软  JScript  IE

      ECMA欧洲计算机制造商协会   ECMAScript     统一制定了客户端脚本语言的标准

      JavaScript = ECMAScript + JavaScript语言自己本身的内容(DOM+BOM)

JavaScript的组成:

   1.核心(ECMAScirpt)语法,包括基本的流程控制,运算符,数据类型,数组,对象,类,接口等。

    2.浏览器对象模型(BOM)browser  object  model,主要是操作当前浏览器窗口的内容,如页面的跳转和页面刷等动作

  3.文档对象模型(DOM)document object model,主要是操作HTML文件中的具体内容(页面元素内容),页面中有一个div,动态的给div添加高宽,添加背景图像,植入需要的文本内容,让div隐藏起来。

JavaScript代码的引入:

     1.内嵌式:在html文档中,将相关的js代码直接放在标签<script>中    (位置可以放在HTML标签中,也可以放在body中,可以多个同时存在)     

       <script   type="text/javascript">

                          /*就是js代码 多行注释*/

                         //单行注释   

                        alart("点我!!!");

                </script>
 <script   type="text/javascript">

                         prompt("输入一个文字信息");
                </script>

    2.外联式:首先需要在HTML文件的外面独立创建一个js文件,文件的扩展名为XXX.js,在HTML文件中通过script标签进行引入,至于引入的位置没有要求,(head和body都可以);

   备注:1.引入的位置虽然随意,但是有一个加载的顺序问题,如果js代码存放在head标签中,那么会首先加载js代码,如果js代码中对页面元素内容有控制,则没有效果;如果js代码存放在body标签中并且存放在body页面元素的下面,那么浏览器会首先加载body中的页面元素,再去加载js代码,此时如果js对页面元素有控制,则有效果。

             2.如果引入的不是直接对页面元素的控制的技术代码,而是第三方js插件,那么一般情况下需要先引入(浏览器先加载),才能进行后续依赖开发。

外联式

<script type="text/javascript" src="XXX.js">

ECMAScript核心语法

      在核心语法中,语法的特征基本和java一致,个别有点区别(js语言是弱类型语言,属于一门浏览器客户端的脚本语言).

   声明变量:不需要指定变量的数据类型,通用写法,使用var(variable),比如你想声明一个整数类型的变量 var   num=90;

  基本语法: 

         1.书写方式;内联式,外联式

                      内联式:直接在html文件中使用<script>标签中书写js代码

                     外联式:首先在HTML页面文件外部创建一个js文件,在js文件中书写js代码,其次在html文件中通过<script>标签中的属性src引入外部的js文件代码

                    注意事项:  

                       1.<script>可以定义在html的任何地方,但是定义的位置不同加载顺序不同,如果书写在<head>标签内,首先会加载,如果放在<body>标签中(js文件放在body标签的最后面),等待标签加载完加载js代码

                       2.<script> 可以使用多个

        2.注释        //源码可见

               单行注释://注释的内容

              多行注释:/* 被注释的内容 */

        3.数据类型:java当中的数据类型:基本数据类型和引用类型

               1.原始数据类型:

                       number型:数字型 ,整型/浮点型  整数,小数,NaN(not a number)不是数字的数字类型;

                       string型:字符串类型.'a'  " aaa";

                       boolean型:布尔型  true/false

                       null型:一个对象为空的类型

                       undefined:未定义类型:如果一个声明的变量没有给初始值,那么浏览器会给该变量赋值为undefined

                2.引用数据类型:对象

        4. 变量

                本质:一小块存储数据类型的内存空间

               java语言是强类型语言,需要显示的指定内存空间的数据类型

               javascript是弱类型语言.不需要显示的指定内存空间的数据类型,可以存储整数,小数,布尔,字符串...

               1.强类型:申请存储空间的时候需要显示定义空间将来存储的数据类型.只能存储固定类型的数据.

               2.弱类型:在申请存储空间的时候,不需要定义空间将来存储数据的数据类型,可以存放任意的数据类型的数据.

           语法:

                

var  变量名 = 初始化值;
<script type="text/javascript">
        //
        //typeof运算符--->可以获取数据定义的数据类型
//document.write(); 把write中的内容输出到页面上
        //number类型的定义
        var num = 123;
        var num3 = 1.23;
        var num2 = 16;
        alert(typeof (num));
        document.writeln(num + "--数据类型" + typeof (num) + "<br>");
        document.writeln(num2 + "--数据类型" + typeof (num2) + "<br>");
        document.writeln(num3 + "--数据类型" + typeof (num3) + "<br>");
        document.writeln("<hr>");

        //string类型的定义
        var str01 = "abc";
        var str02 = 'abc';
        var str03 = "你好";
        document.writeln(str01 + " --数据类型" + typeof (str01) + "<br>");
        document.writeln(str02 + "--数据类型 " + typeof (str02) + "<br>");
        document.writeln(str03 + "--数据类型 " + typeof (str03) + "<br>");
        document.writeln("<hr>");

        //boolean类型的定义
        var flags = true;
        var flagss = false;
        document.writeln(flags + " --数据类型" + typeof (flags) + "<br>");
        document.writeln(flagss + "--数据类型 " + typeof (flagss) + "<br>");
        document.writeln("<hr>");

        //null类型的定义;
        //null被typeof解析后获取的数据类型是object;
        var obj = null;
        document.writeln(obj + "--数据类型 " + typeof (obj) + "<br>");
        document.writeln("<hr>");

        //undefinded类型的定义
        var obj01;
        document.writeln(obj01 + "-- 数据类型" + typeof (obj01) + "<br>");
        document.writeln("<hr>");


    </script>

运算符:

      一元运算符

      


    <script type="text/javascript">
        /* 
          一元运算符:只有一个运算数参与的运算的运算符
                       ++  --   +(正数号) -(负数号)
                  ++ --:
                       前++ : ++a -->先自增一再其他运算
                       后++ : a++ -->先其他运算再自增一
                       前-- : --a -->先自减1再进行其他运算
                       后-- : a-- -->先进行其他运算再自减一
                   +  -(正负号):
                       注意:在js中,如果运算数不是所要求的类型,那么js解析引擎会将运算数转换成对应的数据类型
                       类型转换:
                              其他类型转换成number
                                  1. string转number 按照字面值转换,如果字面值不是数字,则转为NaN类型
                                  2. boolean转number 1为true 0为false
                                  3. null ,undefined转number 转为NaN类型
         */
        var num = 123;
        num++;
        document.write(num);//124
        document.write("<hr>");

        // 字符串转number类型
        var str = "123abc";
        document.write(typeof (str) + "<br>");
        document.write(typeof (+str) + "-------" + (+str + 1) + "<br>");// 1231 /
        document.write("<hr>");

        // boolean转number类型
        var flag = true;
        var flag02 = false;
        document.write((+flag + 10) + "----" + typeof (+flag) + "<br>");// 1 11
        document.write((+flag02 - 5) + "----" + typeof (+flag) + "<br>");// 0 -5
        document.write("<hr>");

        // null/undefined 转number
        var obj = null;
        var obj02 = undefined;
        document.write(+obj + "<br>")
        document.write(+obj02 + "<br>")

    </script>

      算术运算符


    <script>
        //算术运算符
        // + - * / %
        var num01 = 10;
        var num02 = 3;
        document.write(num01 + num02 + "<br>")// 13
        document.write(num01 * num02 + "<br>")// 30
        document.write(num01 / num02 + "<br>")// 3.3333335 number 包含整数、小数
        document.write(num01 - num02 + "<br>")// 7
        document.write(num01 % num02 + "<br>")//1
    </script>

       赋值运算符


    <script>
        //赋值运算符
        // += -= *= /= %= =
        var num01 = 10;
        document.write("= " + num01 + "<br>")// 10
        num01 += 10;
        document.write("+= " + num01 + "<br>")// 20
        num01 -= 10;
        document.write("-= " + num01 + "<br>")// 10
        num01 *= 10;
        document.write("*= " + num01 + "<br>")// 100 number 包含整数、小数
        num01 /= 10;
        document.write("/= " + num01 + "<br>")// 10
        num01 %= 10;
        document.write("%= " + num01 + "<br>")//0
    </script>

      比较运算符


    <script>
        /*
        比较运算符
               第一种:只比较内容值
                     类型相同 : 直接比较
                     字符串:按照字典顺序进行比较,按位逐一进行比较,直到比较两者的大小
                      如果类型不同,先进行类型转换,再进行比较
               第二种;比较内容值和数据类型
                   === :全等于  先进行类型判断,如果类型不一致,直接返回false

         */
        var str = "abc";
        var str01 = "bcd";
        document.writeln((str > str01) + "<br>");//false
        document.write("<hr>");

        var num = 123;
        var num02 = "123";
        document.write((num == num02) + "<br>");//true
        document.write("<hr>");

        num = 123;
        num02 = "123";
        document.write((num === num02) + "<br>");//false
        document.write("<hr>");

        num = 123;
        num02 = "123";
        document.write((num === (+num02)) + "<br>");//true
        document.write("<hr>");

    </script>

      逻辑运算符


    <script>
        //逻辑运算符
        /*
           && 短路与
           || 短路或
           ! 取反
           其他类型转换成boolean类型
             1.number转成boolean :0或者是NaNw为false  其他的数字为true
             2.string转换成boolean:除了空字符串("")为false,其他一律为true;
             3.null或者undefined转换成false
             4.对象:所有的对象一律转为true
         */
        var flag = true;
        document.write(flag + "<br>");
        document.write("<hr>");

        //1.number转成boolean :0或者是NaNw为false  其他的数字为true
        var num01 = 0;//false
        var num02 = NaN;//false
        var num03 = 1;//true
        var num04 = 100;//true
        document.write(!num01 + "<br>");//true
        document.write(!num02 + "<br>");//true
        document.write(!num03 + "<br>");//false
        document.write(!num04 + "<br>");//false
        document.write("<hr>");


        // 2.string转换成boolean:除了空字符串("")为false,其他一律为true;
        var str = "";
        var str1 = "abc";
        var str2 = "123";
        document.write(!str + "<br>");//true
        document.write(!str1 + "<br>");//false
        document.write(!str2 + "<br>");//false
        document.write("<hr>");

        //3.null或者undefined转换成false
        var ocj = null;
        var ocj1 = undefined;
        var ocj2;
        document.write(!ocj + "<br>");//true
        document.write(!ocj1 + "<br>");//true
        document.write(!ocj2 + "<br>");//true
        document.write("<hr>");


        //  4.对象:所有的对象一律转为true
        var date = new Date();//创建一个日期对象
        document.write(date + !date + "<br>");//false
        document.write("<hr>");

    </script>

       三元运算符


    <script>
        //三元运算符
        /*
        ?:    布尔表达式1? 返回值1:返回值2
         */
        var num01 = 10;
        var num02 = 20;
        var num03 = num01 > num02 ? "为true" : false;
        document.write(num03 + "<br>");
        document.write("<hr>");
    </script>

特殊语句

 <!--特殊语句-->
    <script>
        //特殊语句
        /*
         1.在java中,语句的结束用分号";",但是js中语句的结束是回车换行(使用分号也可以)
         2.在java中,变量的定义使用数据类型  变量名=变量值
            而js当中,可以不要前面的数据类型 变量名=变量值
               使用var:定义的变量如果在方法内,那么就是局部变量
               不使用var:定义的变量如果在方法内,那么就是全局变量

         */
        num01 = 123;
        num02 = 124;
        alert(num01);
        alert(num02);

        //定义一个方法
        function me() {
            //var num09=3;报错找不到num09
            num09 = 3;//认为是全局变量
        }

        me();
        alert(num09);
    </script>

 

    js中的bug调试,打开浏览器,按下F12,找到Console窗口-->查看console当中的错误类型,错误原因,错误发生的位置.

  流程控制语句

     条件语句:

     if  else ...

    


    <script>
        /*
          js当中的if else 语句和java当中的if else语句几乎相同

         */
        var area = "innerCountry";
        var signal = "red";
        if ("innerCountry" == area) {

            document.write("靠右行驶" + "<br>");
            if ("red" == signal) {
                document.write("停车等待" + "<br>");
            } else if ("yellow" == signal) {
                document.write("停车观察" + "<br>");
            } else {
                document.write("慢速穿过" + "<br>");
            }

        } else {
            document.write("靠左行驶" + "<br>");
            if ("red" == signal) {
                document.write("停车等待" + "<br>");
            } else if ("yellow" == signal) {
                document.write("停车观察" + "<br>");
            } else {
                document.write("慢速穿过" + "<br>");
            }
        }


    </script>

    switch case ....

 
    <script>
        //switch -case语句
        /*
        ja当中的switch-case和java当中的语法几乎一样(包括穿透性)
         */
        var str = "星期一";
        switch (str) {
            case "星期一"://string
                document.write("今天是" + str + "<br>");
                break;
            case 2://number
                document.write("今天是星期二" + "<br>");
                break;
            case true://boolean
                document.write("今天是星期三,结果是true" + "<br>");
                break;
            case false://boolean
                document.write("今天是星期四,结果是false" + "<br>");
                break;
            case null://null类型
                document.write("今天是星期五,结果是null" + "<br>");
                break;
            case undefined://未定义
                document.write("今天是星期六,结果是undefined" + "<br>");
                break;
            default:
                document.write("今天是星期日,结果是其他类型(一般是对象类型)" + "<br>");
                break;
        }


    </script>

   循环语句:

      for循环

 

  <!--for循环语句-->
    <script>
        /*
        for(初始化;判断语句;迭代语句){

           //3.循环体内容
           1-->2-->3-->4-->2-->3-->4...
        }
        初始化条件用var来声明

         */
        //在js中求前100项的和5050
        var sum = 0;
        for (var i = 0; i <= 100; i++) {
            sum += i;
        }
        document.write(sum);

    </script>

      while循环

<!--while语句-->
    <script>
        //while语句
        /*
        1.初始化语句
           while(2.判断语句)
           //3.循环体内容
            //4.迭代语句
         */
        //求前5项的乘积 120
        var num = 1;
        var result = 1;
        while (num <= 5) {
            result = result * num;
            num++;
        }
        document.write(result);

    </script>

      do-while(循环)

  <!--do-while循环语句-->
    <script>
        /*

         */
        var num = 1;
        var result = 1;
        do {
            result *= num;
            num++;
        } while (num <= 5);
        document.write(result);
        document.write("<hr>");
    </script>
    <!--99乘法表(带表格)-->
    <script>
        /*
         table tr  td
         */
        //1.先写入一个table标签
        document.write("<table cellspacing='45px' align='center'>");
        //2.循环语句,外层for循环中的循环变量i控制行数
        for (var i = 1; i <= 9; i++) {
            //3.没外层循环一次,需要写入一个tr
            document.write("<tr>");
            //4.每进行一次外循环,需要循环遍历该行所有的乘法口诀
            for (var j = 1; j <= i; j++) {
                //5.每内层循环一次,需要写入一个td
                document.write("<td style='border: 1px solid red;'> ");
                //6.往td标签中写入文本内容
                document.write(j + "*" + i + "=" + i * j);
                //7.内容写完,需要添加结束标签td
                document.write("</td>");
            }
            document.write("</tr>");

        }
        document.write("</table>");

    </script>

 

JS对象

      Function 函数对象

  


    <script>
        //function函数对象
        /*
         Function  函数对象--->方法对象
            1.方法的创建
               两种方式:
                  1. var fun=new Function(形参列表,方法体);
                  2. function 方法名称(形参列表){
                        //方法体内容
                     }
            2.属性
                length:代表方法中形参个数
            3.特点
                1.方法定义时:形参的参数数据类型不需要,返回值类型也不需要定义,但是想要获取该方法的返回值还需要借助于return语句.
                2.方法是一个对象,如果定义的方法名称相同,后面的会把前面定义的方法覆盖掉.
                3.在js中,方法中的参数列表个数在调用时可以不用考虑.换就话说方法调用只和方法名称有关,和参数列表无关.
                4.在方法声明中有一个隐藏的内置对象arguments,里面封装了所有的实际参数
         */
         // 方法创建的第一种方式 java当中定义形参列表  数据类型  参数名称
        /*var fun = new Function("num01","num02","num03","alert(num01+num02);");
        // 调用方法
        fun(123,124,125);*/
        // 方法创建的第二种方式
        var d;
        function  show(a,b,c) {
            document.write(a + "<br>");
            document.write(b + "<br>");
            document.write(c + "<br>");
            document.write(d + "<br>");// 一个未定义的变量被引用了
            alert(show.length);// 获取形参的个数
            // 返回a、b、c三个变量的和
            return a+b+c+d;
        }
        // 方法调用
       var result  = show(1,2,3);
       document.write(result + "<br>");// 6
       document.write("<hr>");

       function show(str01,str02){
           document.write(str01 + "<br>");//
           document.write(str02 + "<br>");
           return str01 + str02;
       }
       document.write("<hr>");
       // 方法调用
       var result02 = show("Hello","World");
       document.write(result02 + "<br>");

       // 方法调用
       var result03 =  show();// undefined + undefined --->NaN
       document.write(result03 + "<br>");// NaN

       // 方法调用
       var result04 = show(123);
       document.write(result04 + "<br>");// abcundefined
       //4. 在方法声明中有一个隐藏的的内置对象,参数对象 arguments(数组),封装了所有的实际参数。
       // 求一下1~10的和
       document.write("<hr>");
       function sum() {
            //
           var sum = 0;
           for (var i = 0; i < arguments.length; i++) {
               sum += arguments[i];
           }
           document.write(arguments[0] + "<br>");
           document.write(arguments[1] + "<br>");
           document.write(arguments[2] + "<br>");
           return sum;
       }
       // 求一下1~10的和
       var sum = sum(1,2,3);
       alert(sum);// 55

    </script>

      Array对象

   

<script>
        //Array数组对象
        /*
          1.创建  (三种方式)
              1. var array=new Array(数组长度);
              2. var array02=new Array(元素列表)
              3. var array03=[元素列表];
         2. 方法
              join()    把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。
              pop() 删除并返回数组的最后一个元素
              push()    向数组的末尾添加一个或更多元素,并返回新的长度。
         3.属性:
              length:数组的长度
         4.js中的数组特点
              1. 数组元素的数据类型不限制
              2. 数组的长度是可变的。
         */
        // 1.var array = new Array(数组长度);
        // 创建一个数组长度为5的容器
        var array = new Array(5);
        //alert("array数组长度值为:" + array.length);
        // 第二种 var array02 = new Array(元素列表);
        var arr02 = new Array(1,2,3,4);
        document.write(arr02 + "<br>");
        document.write("<hr>");
        // 第三种 var array03 = [元素列表];
        var array03 = [1,true,null,undefined,NaN,new Date(),"abc"];
        document.write(array03 + "<br>")

        // join()	把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。
        var arr01 = [1,2,3,4,5];
        /*var result01  =  arr01.join("-");
        document.write("<hr>");
        document.write(result01 + "<br>");*/
        var result =  arr01.pop();
        var length = arr01.length;
        document.write("删除并获取最后一个元素:" + result + "<br>");
        document.write( "此时数组长度为:" +length + "<br>");// 4
        document.write( arr01 + "<br>");
        // arr01 ---->  1,2,3,4
        // push()	向数组的末尾添加一个或更多元素,并返回新的长度。
        var newLength = arr01.push(5,6,7,8);
        document.write("<hr>");
        document.write( "此时数组长度为:" +newLength + "<br>");// 8
        document.write( arr01 + "<br>");
        document.write("<hr>");

        // 构建一个数组
        var arr05 = new Array(5);
        arr05[10] = 123;
        document.write(arr05 + "<br>");
        document.write(arr05[4] + "<br>");
        document.write(arr05[10] + "<br>");
        document.write(arr05.length + "<br>"); 
    </script>
  • Math数学对象:操作和Java语法一样

  •  <script>
            /*
              Date对象,日期对象
               1. 创建日期对象
                  new Date()
               2. 方法
                   1.getTime();获取距离1970年1月1日零时至今的毫秒值
                   2.toLocalString():返回当前date对象对应的时间本地字符串格式
             */
            var date = new Date();
            document.write(date + "<br>");
            document.write(date.getTime() + "<br>");
            document.write(date.toLocaleString() + "<br>");
    
        </script>

     

  • Date日期对象:操作和Java语法一样

  • <script>
            /*
             Math数学对象不用创建,直接使用,格式:Math.方法名()//属性名
    
             属性:
                PI:圆周率
    
             方法:
                random():随机数[0,1) number小数
                round():四舍五入
                ceil():向上取整
                floor():向下取整
                pow(x,y):返回x的y次方
             */
            document.write(Math.PI + "<br>");
            document.write(Math.round(5.5) + "<br>");//6
            document.write(Math.ceil(6.3) + "<br>");//7
            document.write(Math.floor(3.3) + "<br>");//3
            document.write(Math.pow(4, 3) + "<br>");//64
            document.write("<hr>");
    
        </script>

     

      RegExp正则表达式对象

              1.正则表达式:定义字符串的组成规则

                     1.单个字符:[]

                         如:[a],[ab],[a-z],[a-zA-Z],[a-zA-Z0-9],[a-zA-Z0-9_#¥@]

                         特殊字符:可以表示特殊含义的单个字符:

                                \d:单个数字字符 等价于[0-9] 

                               \w:单个单词字符 等价于[a-zA-Z0-9_#¥@...] 

                     2.量词符号:             

                           ?:表示出现0次或者1次

                           *  :表示出现0次或者多次>=0

                           + :   出现1次或者多次  x>=1        

                           {m,n}:表示---->最少m次,最多n次  m<=x<=n

                                   缺省配置:

                                       {m,}:最少m次   x>=m

                                       {,n} :最多n次    x<=n

                    3.开始和结束符号

                        ^:代表正则表达式的开始

                         $:代表正则表达式的结束

 

            2.正则对象的创建

                   1.var  reg=new RegExp("正则表达式");//不建议使用

                   2.var reg=/正则表达式/;

                   方法:

                        test(参数):用来验证指定的字符串是否符合正则表达式的规则,符合为true,不符合为false

     

 //创建正则表达式
        //第一种方式
        //6-12位的字母数字和其他符号
        var reg01 = new RegExp("^\\w{6,12}$");
        var str = "fghkljkji";
        var str1 = "fghkljkji.";
        document.write(reg01.test(str) + "<br><hr>");
        //第二种方式
        var reg02 = /^\w{6,12}$/;
        document.write(reg02.test(str1) + "<br><hr>");

      Global对象

<script>
        /*
         Global:全局对象,它也没有对应的构造方法,所以也是直接通过名字直接调用  方法名称();
          1.方法
             decodeURI():解码某个编码的URI
             decodeURIComponent()  解码一个编码的URI组件
             encodeURI()    把字符串编码为URI
             encodeURIComponent()  把字符串编码为URI组件
             eval()     计算JavaScript字符串,并把它作为脚本代码执行
             parseInt()   解析一个字符串并返回一个整数   逐一判断每一个字符串是否是数字.直到不是数字为止,
         */
        var str01 = "中国制造";
        var str02 = encodeURI(str01);
        document.write(str02);//%E4%B8%AD%E5%9B%BD%E5%88%B6%E9%80%A0
        document.write(decodeURI(str02));//中国    0制造
        //下面方法比上面方法容纳长度更大
        document.write(encodeURIComponent(str01));//%E4%B8%AD%E5%9B%BD%E5%88%B6%E9%80%A0
        document.write(decodeURIComponent(str02));//中国制造

        // eval()     计算JavaScript字符串,并把它作为脚本代码执行
        var jsScript = "alert('abc')";
        eval(jsScript);

    </script>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值