【学习笔记】JS 属性|函数|方法|事件|运算符参考手册(JavaScript - 直译式脚本语言)

JavaScript 对象

1、全局:可用于所有内建的JavaScript对象

• 全局属性

undefined:存放 JavaScript 中未定义的值
undefined
//一个未声明的变量,或已声明但没有赋值的变量,或一个并不存在的对象属性

• 全局方法

parseInt():解析一个字符串,并返回一个整数
parseInt(string,radix);

//*string:要被解析的字符串
*radix  要解析的数字的基数(介于2~36之间)

2、Array:在单个的变量中存储多个值

new Array();
new Array(size);
new Array(element0, element1, ..., elementn);

//*size:期望的数组元素个数
//*element:参数列表(新数组的元素)

• Array对象方法

concat():连接两个或多个数组
arrayObject.concat(array1,array2,……);

//*arrayX:该参数可以是具体的值,也可以是数组对象,可以是任意多个
filter():筛选指定数组中符合条件的所有元素,创建一个新的数组
arrayObject.filter(function(currentValue,index,arr), thisValue);

//function(currentValue,index,arr):数组中的每个元素都会执行这个函数
//*currentValue:当前元素的值
*index  当前元素的索引值
*arr  当前元素属于的数组对象
*thisValue  对象作为该执行回调时使用,传递给函数,用作 "this" 的值;如果省略了 thisValue ,"this" 的值为 "undefined"
join():把数组中的所有元素组合成一个字符串并返回
arrayObject.join(separator);
*separator  指定要使用的分隔符(默认使用逗号)
pop():删除并返回数组的最后一个元素
arrayObject.pop();
push():向数组的末尾添加一个或多个元素,并返回新的长度
arrayObject.push(newelement1, newelement2, ……);

//*newelement1:要添加到数组的第一个元素
*newelementX  可添加多个元素
reverse():颠倒数组中元素的顺序并返回
arrayObject.reverse();
shift():把数组的第一个元素从其中删除,并返回第一个元素的值
arrayObject.shift();
slice():从已有的数组中返回选定的元素
arrayObject.slice(start,end);

//*start:规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置
*end  规定从何处结束选取。该参数是数组片断结束处的数组下标;如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素;如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素
sort():对数组的元素进行排序
arrayObject.sort(sortby);
*sortby  规定排序顺序的函数
splice():向/从数组中添加/删除项目,然后返回被删除的项目
arrayObject.splice(index, howmany, item1, item2, ……);

//*index:整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置
//*howmany:要删除的项目数量,如果设置为 0,则不会删除项目
*itemX  向数组添加的新项目
unshift():向数组的开头添加一个或更多元素,并返回新的长度
arrayObject.unshift(newelement1, newelement2, ……);

//*newelement1:要添加到数组的第一个元素
*newelementX  可添加多个元素

3、Boolean:仅表示两个值true/false

new Boolean(value);    //构造函数
Boolean(value);    //转换函数

//*value:由对象存放的值或者要转换成布尔值的值

4、Date:处理日期和时间

new Date();    //当前日期和时间
new Date(milliseconds);    //返回从1970年1月1日至今的毫秒数
new Date(dateString);
new Date(year, month, day, hours, minutes, seconds, milliseconds);

• Date对象方法

getDay():返回表示星期的某一天的数字 (0~6)
dateObject.getDay();
getTime():返回距 1970 年 1 月 1 日之间的毫秒数
dateObject.getTime();

5、Math:执行数学任务

var x = Math.PI;    //返回PI
var y = Math.sqrt(16);    //返回16的平方根

• Math对象方法

floor():返回小于或等于参数的最大整数
Math.floor(x);

//*x:任意数值或表达式
round():把一个数字舍入为最接近的整数
Math.round(x);

//*x:数字

6、Number:原始数值的包装对象

var myNum=new Number(value);
var myNum=Number(value);

//*value:要创建的数值或要转换成数字的值

7、String:处理文本(字符串)

new String(s);
String(s);

//*s:要存储在对象中或要转换成原始字符串的值

• String对象方法

match():在字符串内检索指定的值,或找到正则表达式的匹配
stringObject.match(searchvalue);
stringObject.match(regexp);

//*searchvalue:规定要检索的字符串值
//*regexp:规定要匹配的模式的 RegExp 对象(如果该参数不是 RegExp 对象,则需要首先把它传递给 RegExp 构造函数,将其转换为 RegExp 对象)
replace():在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串
stringObject.replace(regexp/substr, replacement);
stringObject.replace(/……/, "……");    //替换第一个匹配的子串
stringObject.replace(/……/g, "……");    //全局,替换所有匹配的子串

//*regexp/*substr:规定子字符串或要替换的模式的 RegExp 对象
//*replacement:一个字符串值,规定了替换文本或生成替换文本的函数
$1$2……$99  与 regexp 中的第 1 到第 99 个子表达式相匹配的文本
$&  与 regexp 相匹配的子串
$`  位于匹配子串左侧的文本
$'  位于匹配子串右侧的文本
$$  直接量符号
split():把一个字符串分割成字符串数组并返回
stringObject.split(separator,limit);
stringObject.split("");    //分割每个字符
stringObject.split("c");    //将某个字符转换为分隔符,
*separator  字符串或正则表达式,从指定的地方分割字符串(string)
*limit  限定返回的数组的最大长度(number)

8、RegExp:正则表达式,匹配字符串的执行模式

/pattern/attributes
new RegExp(pattern, attributes);

//*pattern:一个字符串,指定正则表达式的模式或其他正则表达式
*attributes  一个可选的字符串,包含属性 "g"、"i" 和 "m",分别用于指定全局匹配、区分大小写的匹配和多行匹配(如果 pattern 是正则表达式,而不是字符串,则必须省略该参数)

• RegExp对象方法

test():检测一个字符串是否匹配某个模式,并返回 true 或 false
RegExpObject.test(string);

//*string:要检测的字符串
★ 常用正则表达式:
// YYYY-MM-DD(简单位数验证)
/^\d{4}-\d{2}-\d{2}$/

// YYYY-MM-DD(考虑闰年)
/^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/

// YYYY-/.MM-/.DD(考虑闰年)
/^(?:(?!0000)[0-9]{4}([-/.])(?:(?:0[1-9]|1[0-2])([-/.])(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])([-/.])(?:29|30)|(?:0[13578]|1[02])([-/.])31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)([-/.])02([-/.])29)$/

// YYYY-/.M(M)-/.D(D)(考虑闰年)
/^(?:(?!0000)[0-9]{4}([-/.])(?:(?:0?[1-9]|1[0-2])\1(?:0?[1-9]|1[0-9]|2[0-8])|(?:0?[13-9]|1[0-2])\1(?:29|30)|(?:0?[13578]|1[02])\1(?:31))|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)([-/.])0?2\2(?:29))$/

// DD/MM/YYYY(考虑闰年)
/^(((0[1-9]|[12][0-9]|3[01])/((0[13578]|1[02]))|((0[1-9]|[12][0-9]|30)/(0[469]|11))|(0[1-9]|[1][0-9]|2[0-8])/(02))/([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3}))|(29/02/(([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00)))$/

// D(D)-/.M(M)-/.YYYY(考虑闰年)
/^(?:(?:(?:0?[1-9]|1[0-9]|2[0-8])([-/.])(?:0?[1-9]|1[0-2])|(?:29|30)([-/.])(?:0?[13-9]|1[0-2])|31([-/.])(?:0?[13578]|1[02]))([-/.])(?!0000)[0-9]{4}|29([-/.])0?2([-/.])(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00))$/

// hh:mm:ss(24小时制)
/^([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/

Browser 对象

1、history:包含用户(在浏览器窗口中)访问过的 URL

• history对象方法

back():加载history列表中的前一个URL
history.back();
forward():加载history列表中的下一个URL
history.forward();
go():加载history列表中的某个具体页面
history.go(number|URL);

//*number:要访问的URL在列表中的相对位置
//*URL:要访问的URL或子串

2、location:包含有关当前 URL 的信息

• location对象方法

assign():加载一个新的文档
location.assign(URL);
*URL  要导航到的页面的URL
reload():重新加载当前文档
location.reload(force);
*force   true:始终从服务器重新加载  false|空:可以从浏览器缓存重新加载
replace():用一个新文档取代当前文档
location.replace(newURL);
*newURL  要导航到的页面的URL

3、window:表示浏览器中打开的窗口

• window对象方法

alert():显示带有一条指定消息和一个OK按钮的警告框
alert(message);

//*message:要显示的纯文本(非HTML文本)
clearInterval():取消由 setInterval() 函数设定的定时执行操作
clearInterval(id_of_setinterval);

//*id_of_setinterval:调用 setInterval() 函数时所获得的返回值,使用该返回标识符作为参数,可以取消该 setInterval() 所设定的定时执行操作
close():关闭浏览器窗口
window.close();
open():打开一个新的浏览器窗口或查找一个已命名的窗口
window.open(URL,name,features,replace);
*URL  声明要在新窗口中显示的文档的URL(url)
*name 声明新窗口的名称(name)
*features  声明新窗口要显示的标准浏览器的特征(features)
*replace  (true - URL:替换浏览历史中的当前条目 false - URL:在浏览历史中创建新的条目)
setTimeout():在指定的毫秒数后调用函数或计算表达式
setTimeout(code, milliseconds, param1, param2, ……);
setTimeout(function, milliseconds, param1, param2, ……);

//*code|*function:要调用一个代码串,也可以是一个函数
*milliseconds  执行代码串或调用函数需要等待的时间,以毫秒计(默认值:0)
*param  传给执行函数的其他参数(IE9 及其更早版本不支持该参数)
setInterval():按照指定的周期(以毫秒计)来调用函数或计算表达式
setInterval(code, milliseconds);
setInterval(function, milliseconds, param1, param2, ...)

//*code|*function:要调用一个代码串,也可以是一个函数
//*milliseconds:周期性执行或调用 code/function 之间的时间间隔,以毫秒计
*param  传给执行函数的其他参数(IE9 及其更早版本不支持该参数)

DOM 对象

1、console:提供访问浏览器调试模式的信息到控制台

• console对象方法

log():在控制台输出信息(该方法对于开发过程进行测试很有帮助)
console.log(message);
//在浏览器中按下 F12 或 Ctrl+Shift+i 打开控制台,可利用此方法对当前页面的源代码进行JS调试

2、document:从脚本中对HTML页面的所有元素进行访问

• document对象方法

getElementById():返回对拥有指定ID的第一个对象的引用
document.getElementById(id);

//*id:元素ID属性值
getElementsByName():返回带有指定名称的对象的集合
document.getElementsByName(name);

//*name:元素的名称
write():向文档写入HTML表达式或JavaScript代码
document.write(exp1,exp2,exp3,……);
*exp  要写入的输出流,多个参数可以列出,他们将按出现的顺序被追加到文档中

3、Element:代表着一个 HTML 元素

• Element对象属性

innerHTML:设置或返回表格行的开始和结束标签之间的 HTML
elementObject.innerHTML=text;

//*text:返回到elementObject中的HTML文本
★ 返回/写入对比:
操作效果
return xxx返回值,存储在参数中,不写入HTML
$(xxx).text()返回文本内容,会删除HTML标记 ;设置文本内容,写入原HTML,会覆盖
xxx.innerHTML = xxx返回或设置HTML内容,写入原HTML,会覆盖
$(xxx).html()返回或设置HTML内容,写入原HTML,会覆盖
document.write(xxx)返回或设置HTML/JavaScript,写入原HTML,会覆盖

• Element对象方法

getAttribute():返回指定属性名的属性值
elementObject.getAttribute(attributename)

//*attributename:需要获得属性值的属性名称

4、Event:代表事件的状态,通常与函数结合使用

eventObject.eventHandler=function(){……};

• 鼠标事件

eventHandler事件描述
onclick当对象被点击时发生
oncontextmenu当对象被右击时触发并打开上下文菜单
ondblclick当对象被双击时发生
onmousedown/onmouseup当在对象上按下/松开鼠标按键时发生
onmouseenter/onmouseleave当鼠标指针移到/移出对象时发生(不冒泡)
onmouseover/onmouseout当鼠标指针移到/移出对象时发生
onmousemove当鼠标指针在对象内移动时发生
★ 鼠标事件触发顺序:
click事件focus事件
mousedown → mouseup → clickmousedown → focus → mouseup → click

• 键盘事件

eventHandler事件描述
onkeydown当键盘按键被按下时发生(不区分大小写)
onkeypress当键盘按键被按下并松开时发生(仅识别数字/字母键)
onkeyup当已按下的键盘按键被松开时发生

• 框架事件

eventHandler事件描述
onabort当图像的加载被中断时触发
onbeforeunload当将要离开当前页面时触发
onerror当加载外部文件发生错误时触发
onhashchange当当前 URL 的锚 "#……" 发生改变时触发
onload当页面或图像首次加载完成后触发(读取缓存不触发)
onunload当离开当前页面时触发(无法缓存页面)
onpageshow当页面或图像每次加载完成后触发
onpagehide当离开当前页面时触发
onresize当窗口或框架被调整大小时发生
onscroll当文档被滚动时触发

• 表单事件

eventHandler事件描述
onchange当表单元素的内容改变时发生
onfocus当对象获得焦点时发生
onblur当对象失去焦点时发生
onfocusin当元素即将获得焦点时触发(不冒泡)
onfocusout当元素即将失去焦点时触发(不冒泡)
oninput当用户输入时触发
onreset当表单被重置后触发
onsearch当向搜索域输入文本时触发
onselect当文本框中的文本被选中时发生
onsubmit当表单被提交时触发

• 剪贴板事件

eventHandler事件描述
oncopy当用户拷贝元素的内容时触发
oncut当用户剪切元素的内容时触发
onpaste当用户粘贴元素的内容时触发

• 打印事件

eventHandler事件描述
onafterprint当页面已经开始打印时,或打印窗口已经关闭时触发
onbeforeprint当页面即将开始打印时触发

• 拖动事件

eventHandler事件描述
ondragstart当元素或者选取的文本开始拖动时触发(作用于拖动目标)
ondrag当元素或者选取的文本正在拖动时触发(作用于拖动目标)
ondragend当用户完成拖动时触发(作用于拖动目标)
ondragenter当拖动对象进入有效的放置目标时触发(作用于放置目标)
ondragleave当拖动对象离开放置目标时触发(作用于放置目标)
ondragover当拖动对象在放置目标内拖动时触发(作用于放置目标)
ondrop当拖动对象完成放置时触发(作用于放置目标)

• 多媒体事件

eventHandler事件描述
onabort当视频/音频终止加载时触发
onloadstart当浏览器开始寻找指定视频/音频触发
ondurationchange当视频/音频的时长发生变化时触发
onloadedmetadata当指定视频/音频的元数据加载后触发
onloadeddata当浏览器加载视频/音频当前帧时触发
onprogress当浏览器下载指定的视频/音频时触发
oncanplay当用户可以开始播放视频/音频时触发
oncanplaythrough当视频/音频可以正常播放且无需停顿和缓冲时触发
onended当视频/音频播放结束时触发
onerror当视频/音频数据加载期间发生错误时触发
onpause当视频/音频暂停时触发
onplay当视频/音频开始播放时触发
onplaying当视频/音频暂停或者在缓冲后准备重新开始播放时触发
onratechange当视频/音频的播放速度发生改变时触发
onseeking当用户开始重新定位视频/音频时触发
onseeked当用户重新定位视频/音频的播放位置后触发
onstalled当浏览器获取媒体数据但媒体数据不可用时触发
onsuspend当浏览器读取媒体数据中止时触发
ontimeupdate当视频/音频当前的播放位置发送改变时触发
onvolumechange当视频/音频的音量发生改变时触发
onwaiting当视频由于要播放下一帧而需要缓冲时触发

HTML 对象

1、style:一个单独的样式声明

document.getElementById("id").style.property="value";

//*property:CSS属性(需转换为camelCase命名)
//*value:设置对应的属性值

JavaScript 语句

1、条件语句:基于不同的条件来执行不同的动作

if:只有当指定条件为true时,使用该语句来执行代码
if (条件) {
	只有当条件为 true 时执行的代码块
}
if……else:在条件为true时执行代码,在条件为false时执行其他代码
if (条件) {
	当条件为 true 时执行的代码块
}
else {
	当条件为 false 时执行的代码块
}
if……else if……else:选择多个代码块之一来执行
if (条件1) {
    当条件1true 时执行的代码块
}
else if (条件2) {
    当条件2true 时执行的代码块
}
else {
    当条件1和条件2都为 false 时执行的代码块
}
switch:选择要执行的多个代码块之一
switch (变量) {
    case1:
    若变量等于值1则执行的代码块
    break;
    case2:
    若变量等于值2则执行的代码块
    break;
    ……
    default:
    当匹配不存在时执行的代码块
}
Created with Raphaël 2.3.0 开始 获取变量的值 等于第一个case的值 执行该case的代码块 执行 `break;` 停止匹配 结束 等于下一个case的值 所有case均不匹配 执行default的代码块 yes no yes no
语句适用场合
if布尔值;动态/区间的值;复杂的逻辑关系;选项数量小于5个
switch整数/字符串;固定/有限的值;选项数量(含default)大于5个

2、循环语句:将代码块执行指定的次数

for:循环代码块一定的次数
for (变量; 条件; 增值) {
    被执行的代码块
}
*变量:在循环开始前执行(可选,可初始化任意或多个值)
*条件:定义运行循环的条件(可选,若省略则需提供break)
*增值:在循环已被执行之后执行(可选)
Created with Raphaël 2.3.0 开始 获取变量的值 当条件为 `true` 执行代码块 变量增值 跳出循环(必须步骤) 结束 yes no
for……in:循环遍历数组或者对象的属性
for (变量 in 对象) {
    在此执行代码
}

//*变量:指定的变量,可以是数组元素或对象的属性
while:当指定的条件为true时循环指定的代码块
while (条件) {
    需要执行的代码
}
do……while:先执行一次代码块,当条件为true时再重复这个循环
do {
    需要执行的代码
}
while (条件);
★ 遍历方法性能比较:
方法语法短循环等级长循环等级
forfor (var i = 0, len = arr.length; i < len; i++) {……}11
forfor (var i = 0; i < arr.length; i++) {……}22
forfor (var i = 0; arr[i] != null; i++) {……}33
forEachArray.prototype.forEach.call(arr,function(el){……});47
forEacharr.forEach(function(e){……});56
maparr.map(function(n){……});6-
for offor (x of arr) {……}74
for offor (let x of arr) {……}85
for infor (x in arr) {……}9-
检测数组元素作用返回参数
every()使用指定函数检测数组中的所有元素true/falsefunction(currentValue,index,arr), thisValue
filter()检测数组中符合条件的所有元素新数组function(currentValue,index,arr), thisValue
some()使用指定函数检测数组中的每个元素true/falsefunction(currentValue,index,arr), thisValue
遍历执行函数作用返回参数
find()为数组中的每个元素依次执行函数元素值/undefinedfunction(currentValue,index,arr), thisValue
findIndex()为数组中的每个元素依次执行函数索引/-1function(currentValue,index,arr), thisValue
forEach()调用数组的每个元素传递给回调函数函数执行结果function(currentValue,index,arr), thisValue
map()按照原始数组元素顺序依次处理元素函数执行结果function(currentValue,index,arr), thisValue
判断包含元素作用返回参数
includes()判断一个数组是否包含指定的值true/falsesearchElement, fromIndex
indexOf()从头到尾地检索数组是否含有某个元素索引/-1item, start
lastIndexOf()从尾到头地检索数组是否含有某个元素索引/-1item, start
转换为字符串作用返回参数
join()把数组转换为一个字符串,指定分隔符字符串separator
toString()把数组转换为一个字符串,逗号分隔字符串/
valueOf()返回数组的原始值,逗号分隔字符串/

JavaScript 运算符

建议在运算符前后都空一格

1、算术运算

符号含义示例(x=5)结果优先级
++后置递增 ...++(先赋值后自增)y=x++y=5
x=6
1
前置递增 ++...(先自增后赋值)y=++xx=6
y=6
2
--后置递减 ...--(先赋值后自减)y=x--y=5
x=4
1
前置递减 --...(先自减后赋值)y=--xx=4
y=4
2
**y=x**2y=253
*y=x*3y=154
/y=x/2y=2.54
%求余(保留整数)y=x%3y=24
+y=x+3y=85
连接"5"+"5"55
-y=x-3y=25

2、二进制位运算

符号含义示例转换优先级
~二进制位非(占位数值取反)~9=69→00001001
6←00000110
2
<<二进制数左移n位9<<3=72
(左移3位)
9→00001001
72←01001000
6
>>二进制数带符号右移n位21>>3=2
(带符号右移3位)
21→00010101
2←00000010
6
>>>二进制数无符号右移n位21>>>3=2
(无符号右移3位)
21→00010101
2←00000010
6
&二进制位与(仅当对应位均为1时,结果位才为1)9&21=19→00001001
21→00010101
1←00000001
9
^二进制位异或(对应位相异结果位为1,相同为0)9^21=289→00001001
21→00010101
28←00011100
10
|二进制位或(当对应位有1时,结果位即为1)9|21=299→00001001
21→00010101
29←00011101
11

3、逻辑运算

符号含义示例结果优先级
!逻辑非(取反)!truefalse2
&&逻辑与(仅当都为truthy时,结果才为truthy)true&&true
true&&false
true
false
12
||逻辑或(当有truthy时,结果即为truthy)true||false
false||false
true
false
13

4、比较运算

符号含义示例(x=5)结果优先级
>大于x>8false7
<小于x<8true7
>=大于或等于x>=8false7
<=小于或等于x<=8true7

5、相等运算

符号含义示例(x=5)结果优先级
==等于x==8false8
===全等(值和类型)x===5
x==="5"
true
false
8
!=不等于x!=8true8
!==不全等(值和类型)x!==3
x!=="5"
true
true
8

6、条件运算

符号含义优先级
condition ? value1 : value2条件为ture时赋值1,否则赋值214
condition ? expr1 : expr2条件为ture时运行1,否则运行214

7、赋值运算

符号含义示例等价于优先级
=赋值x=5x=515
+=赋值和x+=yx=x+y15
-=赋值差x-=yx=x-y15
*=赋值积x*=yx=x*y15
/=赋值商x/=yx=x/y15
%=赋值余(保留整数)x%=yx=x%y15
<<=赋值左移x<<=yx=x<<y15
>>=赋值带符号右移x>>=yx=x>>y15
>>>=赋值无符号右移x>>=yx=x>>y15
&=赋值与x&=yx=x&y15
|=赋值或x|=yx=x|y15
^=赋值异或x^=yx=x^y15
[]=[]
{}={}
解构赋值(给数组或对象中的元素赋值)[a, b] = [1, 2]
{a, b} = {a:1, b:2}
a=1
b=2
15
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值