JavaScript入门_语法、函数、对象、DOM、事件

JavaScript入门_语法、函数、对象、DOM、事件

JavaScript概述

JavaScript是基于对象和事件驱动的脚本语言,主要应用在**客户端,*以下简称*JS

JS具有以下特点:

  • 交互性(它可以做的就是信息的动态交互
  • 安全性(不允许直接访问本地硬盘
  • 跨平台性(只要是可以解释Js的浏览器都可以执行,和平台无关)

JS与Java的区别

  • JS是基于对象,Java是面向对象
  • JS只需解释就可以执行,Java需要先编译成字节码文件,再执行
  • JS是弱类型,Java是强类型,即Java需要严格定义对象的属性方法、JS不需要,与python一样

JS与HTML结合

Js代码一般写在html的head

<script type="text/javascript">
<!--Js代码必须写在脚步标签之内-->
</script>

外部引入相关JS文件

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

注意:如果引入了外部的js文件就不能在这个js的脚本标签内些js代码了

JavaSript语法

硬规范

  • 区分大小写,与Java一致
  • 变量弱类型:与Java不一样。JavaScript中的变量无特定的类型,定义变量时只用var 运算符,可以将它初始化为任意的类型。变量的类型取决于给变量赋值的内容
  • 每行结尾的分号可有可无:与Java不一样。如果一条语句的结尾没有分号表明结束的话,前提是这样没有破坏代码的语义。良好的编写代码习惯是加入分号
  • 注释:与Java一样。支持”//”、”/**/”这几种常见的注释方式
  • {}括号表明代码块:与Java一样

变量

  • 变量的定义:var 变量名字 = 变量的值;
  • Java中局部变量必须赋给初始化,但是在js中不是必须的
  • 变量定义时候不指定具体的数据类型,而是根据具体赋给的值来决定是什么类型(弱类型)

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <script type="text/javascript">
        var age = 10;
        var name = 'renliang';
        var isMarry = false;
        document.write(age + "数据类型是:"+(typeof age)+"<br>");
        document.write(name +  "数据类型是:"+(typeof name)+"<br>");
        document.write(isMarry +  "数据类型是:"+(typeof isMarry)+"<br>");
    </script>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
</body>
</html>

效果:

img

document.write 表示向页面写入内容

数据类型

  • 原始值:是存储在栈中的简单数据段,也就是说,它们的值直接存储在变量访问的地址
  • 引用值:是存储在栈中的对象,也就是说,存储在变量出的值是一个指针指向存储对象的内存处

这跟Jave是类似的。

原始值

五种原始类型,即UndefinedNullBooleanNumberString

Number类型:代表是数值类型,包括java中的6种数值类型,不管是整数还是小数都是使用number类型

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <script type="text/javascript">
        var price = 100.12;
        document.write("price:"+price+"   数据类型:"+(typeof price) +"<br>");

        //定义数值类型的包装类
        var age = new Number(20);
        document.write("age:"+age+"   数据类型:"+(typeof age)+"<br>");
        //包装类可以获取最大值和最小值
        document.write(" 数值类型的最大值:"+Number.MAX_VALUE);
        document.write(" 数值类型的最小值:"+Number.MIN_VALUE);
    </script>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
</body>
</html>

String类型:

字符串类型,在js中没有字符类型,字符串类型可以使用‘ ’也可以使用“ ”

js的字符串也封装了一些字符串常用的方法

<!DOCTYPE html>
<html lang="en">
<head>
    <script type="text/javascript">
        var name = 'www.java.cn';
        document.write("name:"+name+"   数据类型:"+(typeof name) +"<br>");

        var name1 = new String('java');
        document.write("name1:"+name1+"   数据类型:"+(typeof name1) +"<br>");

        var xindex = name.indexOf("x");
        document.write("   x的索引:"+xindex+"<br>");

        var strsub = name.substring(3, 8);
        document.write("   切割的字符串:"+strsub+"<br>");
        document.write("   字符串的长度:"+name.length+"<br>");
    </script>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
</body>
</html>

效果:

img

Boolean类型

一共两个值true和false和java一样的

Undefined类型

Undefined类型只有一个值,即undefined,当声明的变量未初始化时,该变量的默认值是undefined

当函数无明确返回值时,返回的也是值undefined

Null类型

Null类型也只有一个值null,即它的字面量。值undefined实际上是从值null派生来的,因此把它们定义为相等的

alert(null == undefined) //输出 true

尽管这两个值相等,但它们的含义不同,undefined是声明了变量但未对其初始化,null则用于表示尚未存在的对象,比如无法获得文档中的对象

引用值:

Math

Math对象不能用 new运算符创建,如果试图这样做则给出错误。在装载脚本引擎时由该引擎创建该对象。其所有方法和属性在脚本中总是可用

Date

//创建引用时间类型 
var birthday = new Date();
//日期设置
birthday.setDate(22);
//日期获取
document.write(birthday.getFullYear()+"年");
document.write((birthday.getMonth() + 1)+"月");
document.write(birthday.getDate()+"日");
document.write(birthday.getHours()+"时");
document.write(birthday.getMinutes()+"分");
document.write(birthday.getSeconds()+"秒");
document.write(birthday.getMilliseconds()+"毫秒");

数组

数组对象用来在单独的变量名中存储一系列的值

我们使用关键词 new 来创建数组对象。下面的代码定义了一个名为 myArray 的数组对象:

<!DOCTYPE html>
<html lang="en">
<head>
    <script type="text/javascript">
        var arr = new Array();
        arr[0] = 1;
        arr[1] = 23;
        arr[2] = 55;

        for(var i = 0; i < arr.length; i++){
            document.write(arr[i]+"<br>");
        }

        //在js中数组的长度不固定,动态扩展,和java中的集合arrayList一样
        var arr = new Array('a', 'hgh', 'ghh');
        arr[3] = 'ab';
        arr[4] = 'abc';
        for(var i = 0; i < arr.length; i++){
            document.write(arr[i]+"<br>");
        }

    </script>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
</body>
</html>

注意:数组的长度是不固定的,可以自动扩展,而且我们不需要指定数组的长度。

Global
该对象可用来做数据转换

**isNaN()😗判*断是否不是一个数字是一个能转成数字的类型则返回false如果是一个不能转换成数字的是true
parseInt():把数据变成整数
parseFloat():把数据变成小数

<!DOCTYPE html>
<html lang="en">
<head>
    <script type="text/javascript">
        var num = '60.2';

        alert(isNaN(num));
        //把字符串转换成数值
        var numb = new Number(num);
        alert(numb + 10);
        //使用global来做数值转换,如果是小数那么会自动取整
        numb = parseInt(num);
        alert(numb + 10);
        //把字符串类型的小数转换成数值类型的小数
        numb = parseFloat(num);
        alert(numb + 10);
    </script>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
</body>
</html>

JS方法/函数

语法: 
function  方法名(参数...){ 
return xxx;//可选 
} 
var 方法名 = function  (参数...){ 
return xxx;//可选 
}

示例

<!DOCTYPE html>
<html lang="en">
<head>
    <script type="text/javascript">
        /**
         * 方法的定义
         */
        function showInfo(){
            alert("www.java.cn");
        }

        function showInfo(){
            alert("JavaScript method");
        }


        /**
         * 变量的名字就是方法的名字
         */
        var showInfo1 = function(){
            alert("拓薪教育");
        }

        var showInfo1 = function(){
            alert("大家好");
        }
        alert(typeof showInfo1)
        //方法的调用
        showInfo();
    </script>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
</body>
</html>

注意:js中没有重载机制,如果方法名字相同,后面的方法会把前面的方法覆盖掉,我们在调用方法的时候,我们传递的参数可以少于形参,从左向右赋值,如果调用时实参多于形参,也是从左向右赋值,所多出来的实参就没有用

Object

JS中也有Object的说法,与Java的区别是,JS直接new即可,无需提前定义,new出来后根据赋值情况也会有属性概念。

创建对象的第一种方式:

<!DOCTYPE html>
<html lang="en">
<head>
    <script type="text/javascript">
        /**
         * 根据object来创建一个对象
         */
        function createPerson(username, password){
            var obj = new Object();
            //定义对象的属性
            obj.username = username;
            obj.password = password;
            //定义对象的方法
            obj.showInfo = function(){
                alert(this.username + "  "+ this.password);
            }
            return obj;
        }

        var person = createPerson("JunSir", "123");
        //alert(person.username + "   " + person.password);
        //调用对象的方法
        person.showInfo();
    </script>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
</body>
</html>

创建对象的第二种方式:

这是一种类似JSON对象形式的对象创建

<!DOCTYPE html>
<html lang="en">
<head>
    <script type="text/javascript">
        //创建以键值对的方式的对象,我们也管它叫json对象
        var person = {username : "JunSir", age:18, address:'深圳'};
        //alert(typeof person);
        alert(person.address +  "   "+person.username);
    </script>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
</body>
</html>

创建对象的第三种方式:

类似Java中的get方法

<!DOCTYPE html>
<html lang="en">
<head>
    <script type="text/javascript">

        function showInfo(){
            alert(this.username + "  "+ this.password);
        }
        /**
         * 根据object来创建一个对象
         */
        function createPerson(username, password){
            var obj = new Object();
            //定义对象的属性
            obj.username = username;
            obj.password = password;
            //引入外部的方法作为对象方法
            obj.showInfo = showInfo;
            //定义对象的方法

            return obj;
        }

        var person = createPerson("JunSIr", "123");
        //alert(person.username + "   " + person.password);
        //调用对象的方法
        person.showInfo();
    </script>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
</body>
</html>

创建对象的第四种方式:

类似Java的构造器,方法直接定义在对象中,直接调用对象的方法。

<!DOCTYPE html>
<html lang="en">
<head>
    <script type="text/javascript">

        function Person(username , password){
            //通过this来直接指定属性,不需要创建Object
            this.username = username;
            this.password = password;
            this.showInfo = function(){
                alert(this.username +  "  " + this.password);
            }
            //不需要return,默认隐含了return
        }

        var person = new Person("JunSIr", "123");
        person.showInfo()
    </script>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
</body>
</html>

创建对象的第五种方式

与上面的差异是调用方法比较花里胡哨了

<!DOCTYPE html>
<html lang="en">
<head>
    <script type="text/javascript">

        function Person(username, age){
            this.username = username;
            this.age = age;

        }

        //以原型方式来赋值方法
        Person.prototype.showInfo = function(){
            alert(this.username +  "   " + this.age);
        }

        var person = new Person("JunSIr", 123);
        person.showInfo();

    </script>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
</body>
</html>

统一效果:

img

DOM解析

当标记型文档(HTML/XML)被DOM解析器解析后,会按照标签的层次关系,产生一颗dom树结构

这个树的每个分支被称为一个节点。

我们就是研究如何获取每个节点,并对节点进行操作的

浏览器本身具备了DOM解析器,所以可以对标记型文本进行DOM解析

window对象:

Window 对象代表一个浏览器窗口,我们可以利用这个内置对象做很多事情,就比如获取DOM

操控地址栏

<script type="text/javascript">
//当前浏览器窗口的地址
var url = window.location.href;
function turn(){
	//修改浏览器的地址
	window.location.href = "http://www.tjava.cn";
}
</script>

常用window内置方法

  • alertalert(”警告“)弹出警告提示窗口,内容在括号内写,括号内格式为”警告内容“
  • confirmconfirm("是否删除")二次确认框,一般用于删除和重要的操作,它的返回值是true和false,点击确定返回true,点击取消返回false
  • open:window.open("testHtml.html") ; 当有事件触发此方法时弹出test.html网页窗口,该方法有多参数可设置,如下
window.open('page.html','_blank','height=100,width=400,top=0,left=0,toolbar=no,menubar=no,scrollbars=no,resizable=no,location=no,status=no') 
  参数解释: 
  window.open 弹出新窗口的命令; 
  'page.html' 弹出窗口的文件名; 
  _blank弹出新窗口; 
  height=100 窗口高度; 
  width=400 窗口宽度; 
  top=0 窗口距离屏幕上方的象素值; 
  left=0 窗口距离屏幕左侧的象素值; 
  toolbar=no 是否显示工具栏,yes为显示; 
  menubar,scrollbars 表示菜单栏和滚动栏。 
  Resizable=no 是否允许改变窗口大小,yes为允许; 
  location=no 是否显示地址栏,yes为允许; 
status=no 是否显示状态栏内的信息(通常是文件已经打开),yes为允许;

获取DOM:

文档对象的加载顺序是从上到下的,所以我们js想要获得dom对象,一定要等到文档对象加载完毕在获得

根据元素的id获得DOM对象

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    <script type="text/javascript">

        function myclick(){
            //根据文档对象的id来获得dom对象
            var obj = document.getElementById("username");

            alert(obj);
            //获得用户名的值
            var username = obj.value;
            alert(username);
            //给input设置值
            obj.value = "Java";
            //设置元素的样式
            obj.style.background = "yellow";
            //获得password的对象
            var obj1 = document.getElementById("password");
            alert(obj1.value);
        }
    </script>
</head>
<body>
用户名:<input id="username" type="text" name="username"  value="JunSIr"><br>
密码:<input id="password" type="password" name="password" value="123">
<input type="button" value="点击" onclick="myclick()">
</body>

</html>

根据元素的name来获得DOM对象

适用于多选框 name一致的情况,获取整个多选框。

相对来说,id是每个标签的唯一标识,而多选框显然使用id来获取DOM是不合适的

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    <script type="text/javascript">

        function myclick(){
            //根据元素的name来获得元素,返回的是数组
            var favors = document.getElementsByName("favor");
            for(var i = 0; i < favors.length; i++){
                //获得数组中的每一个元素
                var f = favors[i];
                //如果被选择,打印
                if(f.checked){
                    alert(f.value);
                }
            }
        }

        //多选框全选
        function chkAll(){
            var favors = document.getElementsByName("favor");
            for(var i = 0; i < favors.length; i++){
                //获得数组中的每一个元素
                var f = favors[i];
                f.checked = true;
            }
        }
        
        //多选框反选
        function reverChkAll(){
            var favors = document.getElementsByName("favor");
            for(var i = 0; i < favors.length; i++){
                //获得数组中的每一个元素
                var f = favors[i];
                if(f.checked){
                    f.checked = false;
                }else{
                    f.checked = true;
                }
            }
        }
    </script>
</head>
<body>
爱好:<input type="checkbox" name="favor" value="1">看电影
<input type="checkbox" name="favor" value="2">打台球
<input type="checkbox" name="favor" value="3">处对象
<input type="button" value="点击" onclick="myclick()">
<input type="button" value="全选" onclick="chkAll()">
<input type="button" value="反选" onclick="reverChkAll()">
</body>

</html>

根据元素标签名获得DOM对象

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
	
function myclick(){
	//根据元素的标签名获得dom对象,返回的是数组
	var objs = document.getElementsByTagName("input");
	for(var i = 0; i < objs.length; i++){
		alert(objs[i].value);
	}
}
</script>
</head>
<body>
用户名:<input id="username" type="text" name="username"  value="renliang"><br>
密码:<input id="password" type="password" name="password" value="123">
<input type="button" value="点击" onclick="myclick()">
</body>

</html>

DOM写入_innerText与innerHTML

对某个DOM对象内部写入文本内容或HTML代码以展示相关样式

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    <style type="text/css">
        .myclass{
            border: 1px solid black;
            width: 100px;
            height: 100px;
        }
    </style>
    <script type="text/javascript">
        function myclick(){
            //获取div1的dom
            document.getElementById("div1").innerText = "我是div1";
            //innerText是指的元素中的 非html标签的内容,如果有html不会被浏览器解析
            document.getElementById("div2").innerText = "<font color='red'>我是div1</font>";
            //如果有html会被浏览器解析
            document.getElementById("div3").innerHTML = "<font color='red'>我是div1</font>";


        }
    </script>
</head>
<body  id="mybody">

<!-- 定义一堆空的div,由上面方法被调用而被写入 -->
<div id="div0">
    <div id="div1" class="myclass"></div>
    <div id="div2"  class="myclass"></div>
    <div id="div3"  class="myclass"></div>
</div>
<input type="button" value="点击" onclick="myclick()">
</body>

</html>

效果:

img

innerText与innerHTML的获得:

示例:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
.myclass{
	border: 1px solid black;
	width: 100px;
	height: 100px;
}
</style>
<script type="text/javascript">
function myclick(){
	//innerText获取的时候只能拿到元素内的除了html元素外的文本内容
	var t1 = document.getElementById("div2").innerText;
	alert(t1);
	//获得到元素内的所有内容
	var t2 = document.getElementById("div3").innerHTML;
	alert(t2);
	
}
</script>
</head>
<body  id="mybody">

<div id="div0">
	<div id="div1" class="myclass"></div>
	<div id="div2"  class="myclass">aaa<font color='red'>我是div1</font></div>
	<div id="div3"  class="myclass">aaa<font color='red'>我是div2</font></div>
</div>
<input type="button" value="点击" onclick="myclick()">
</body>

</html>

效果:

img

DOM追加与删除

完成表单添加一行与删除一行的操作

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
 .mytable{
 	width: 300px;
 	border-collapse: collapse;
 }
 
 tr{
 	height: 25px;
 }
</style>
<script type="text/javascript">
function addrow(){
	//获得表体的dom对象
	var tbObj = document.getElementById("tb");
	//创建 tr行  dom对象
	var trObj = document.createElement("tr");
	//创建td列  dom对象
	var td0 = document.createElement("td");
	//创建一个input类型的多选
	var ck = document.createElement("input");
	//设置属性
	ck.setAttribute("type", "checkbox");
	//把ck的dom对象追加到td0内部
	td0.appendChild(ck);
	
    //创建三个列
	var td1 = document.createElement("td");
	var td2 = document.createElement("td");
	var td3 = document.createElement("td");
	//把3个td追加到tr里面
	trObj.appendChild(td0);
	trObj.appendChild(td1);
	trObj.appendChild(td2);
	trObj.appendChild(td3);
	//把tr对象追加到tb里面
	tbObj.appendChild(trObj);
	
}

function deleteRow(){
	//获得表体的dom对象
	var tbObj = document.getElementById("tb");
	//获得所有的表体的内部的input
	var is = tbObj.getElementsByTagName("input");
	for(var i = is.length-1; i > 0; i--){
		//获得被选中的多选
		if(is[i].checked){
			//删除被选中的元素,获得父元素
			var trObj = is[i].parentNode.parentNode;
			tbObj.removeChild(trObj);
		}
	}
	
	
}
</script>
</head>
<body  id="mybody">
<input type="button" value="添加一行" onclick="addrow()">
<input type="button" value="删除" onclick="deleteRow()">

<table  border="1" class="mytable">
	<thead>
		<tr>		
			<td></td>
			<td>姓名</td>
			<td>年龄</td>
			<td>性别</td>
		</tr>
	</thead>
	<tbody id="tb">
		<tr>
			<td><input type="checkbox"></td>
			<td>JunSir</td>
			<td>18</td>
			<td></td>
		</tr>
	</tbody>
</table>
</body>

</html>

效果:

img

DOM替换

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
.myclass{
	border: 1px solid black;
	width: 100px;
	height: 100px;
}
</style>
<script type="text/javascript">
function myclick(){
	
	var parentDom = document.getElementById("div0");
	
	//获得div3的dom
	var div1Dom = document.getElementById("div1");
	var div3Dom = document.getElementById("div3");
	
	parentDom.replaceChild(div3Dom, div1Dom);
}
</script>
</head>
<body  id="mybody">

<div id="div0">
	<div id="div1" class="myclass">div1</div>
	<div id="div2"  class="myclass">aaa<font color='red'>我是div2</font></div>
	<div id="div3"  class="myclass">aaa<font color='red'>我是div3</font></div>
</div>
<input type="button" value="替换" onclick="myclick()">
</body>

</html>

效果:

img

点击“替换”后

img

完成DOM的克隆

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    <style type="text/css">
        .myclass{
            border: 1px solid black;
            width: 100px;
            height: 100px;
        }
    </style>
    <script type="text/javascript">
        function myclick(){

            var parentDom = document.getElementById("div0");

            //获得div1的dom
            var div1Dom = document.getElementById("div1");
            //复制一个dom对象
            var cn = div1Dom.cloneNode(true);
            parentDom.appendChild(cn);
        }
    </script>
</head>
<body  id="mybody">

<div id="div0">
    <div id="div1" class="myclass">div1</div>
</div>
<input type="button" value="克隆" onclick="myclick()">
</body>

</html>

效果:

img

JavaScrip事件

**示例:**给DOM对象赋予点击事件

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
	
function myclick(){
	alert(0);
}


</script>
</head>
<body>

<input type="button" value="点击" onclick="myclick()">
<input id="b1" type="button" value="点击1">
</body>
<script type="text/javascript">
    //赋予点击事件
	document.getElementById("b1").onclick = function(){
		alert(1);
	}
</script>
</html>

JS常用事件:

1.onblur:(使用在表单元素中,当元素失去焦点的时候执行)
2.onchange:(使用在表单元素中,当某些东西改变是执行)
3.onclick:(鼠标点击一个元素时执行)
4.ondblclick:(鼠标双击一个元素时执行)
5.onfocus:(使用在表单元素中,当元素获得焦点时执行)
6.onkeydown: (按下某个按键时执行)
7.onkeyup:(释放某个按键时执行)
8.onload:(在body标签中使用,载入页面的时候执行)
9.onselect:(用在表单元素中,当元素被选择时执行)
10.onmousedown:(按下鼠标按键时执行)
11.onmousemove:(鼠标光标在元素上移动时执行)
12.onmouseout:(鼠标光标移开元素时执行)
13.onmouseover:(鼠标光标移到元素上时执行)
14.onmouseup:(当释放鼠标按键时执行)
17.onsubmit:(用在表单元素中,当表单提交时执行)

<script type="text/javascript">
function submitForm(){
	return false;
}
</script>
</head>
<body>
<form action="${pageContext.request.contextPath }/success.jsp" 
onsubmit="return submitForm();" method="post">
用户名:<input name="username" type="text">
 <input type="submit" value="登录">
</form>
</body>

onsubmit的函数前面的return代表如果方法返回true则程序继续向下走,如果返回false则阻止表单提交(action跳转)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值