LLWiki正在建设中,欢迎加入我们

“LLWiki:管理员技术手册”的版本间差异

跳转到导航 跳转到搜索
(使用页面/文本对比查看器快速编辑)
这里所涉及的JS页面包含[[mediawiki:common.js|common.js]]、[[mediawiki:mobile.js|mobile.js]]和各[[:category:JavaScript小工具|JS小工具]],有时由于功能的相似性也会涉及用户JS([[special:mypage/common.js|common.js]]、[[special:mypage/vector.js|vector.js]]和[[special:mypage/minerva.js|minerva.js]])。LLWiki暂时没有建立针对不同用户组的专门JS页面。
===ResourceLoader和JS模块===
[[mediawiki:common.js|common.js]]、[[mediawiki:mobile.js|mobile.js]]、[[special:mypage/common.js|用户JS]]和[[MediaWiki:Gadgets-definition]]页面定义的小工具等JS页面会作为ResourceLoader的模块加载,这些JS将在语法检查和压缩后由load.php打包下载,且可以作为mw.loader.getState()方法、mw.loader.using()方法的参数。
作为ResourceLoader的模块加载时,不可使用ES6语法。这里的语法指关键字、算符等,不包括对象原型方法,例如Object.fromEntries()方法仍可照常使用。下表列出一些常见的JS模块不可使用的语法及其替代。
 
作为ResourceLoader的模块加载时,不可使用ES6语法。这里的语法指关键字、算符等,不包括对象原型方法,例如<code lang="js">Object.fromEntries()</code>方法或<code lang="js">new Map()</code>构造器仍可照常使用。下表列出一些常见的JS模块不可使用的语法及其替代。
{| class="wikitable"
! ES6以上语法 !! 替代
|-
| <code>=> output</code> || <code lang="js">function() { return output; }</code>
|-
| <pre class="hljs javascript">class NewClass extends Parent {
| <code lang="js">let</code> || <code lang="js">var</code>
constructor(params) { super(params); }
}</pre> || <pre class="hljs javascript">function NewClass(params) { NewClass.super.call(this, params); }
OO.inheritClass(NewClass, Parent);</pre>
|-
| <code lang="js">function(param = default){key}</code> || <code lang="js"><nowiki>function() {key: param = param || default; key}</nowiki></code>
|-
| <pre class="hljs javascript">`firstline
| <code lang="js">{a} = {a: 0, b: 1};</code><ref name="jshint">该语法不被CodeEditor的[[#JSHint|JSHint]]支持,不利于代码除错,因此即使不作为ResourceLoader的模块也不推荐使用。</ref> || <code lang="js">obj = {a: 0, b: 1}; a = obj.a;</code>
secondline`</pre> || <pre class="hljs javascript">'firstline\n' + 'secondline'</pre>
|-
| <code>[...iterator, element]lang="js">`string${variable}`</code> || <code lang="js">iterator.concat('string' element+ )variable</code>
|-
| <code>[variable] lang="js">{...object, key: value}array;</code><ref name="jshint" /> || <code lang="js">$.extend(object, {key:variable = value})array[0];</code>
|-
| <code lang="js">{key: variable} = {key: value};</code> || <code lang="js">variable = {key: value}['key'];</code>
|-
| <code lang="js">function(params = defaults)</code> || <code lang="js"><nowiki>function() { params = params || defaults; }</nowiki></code>
|-
| <code>[...iterator]</code> || <code lang="js">Array.from( iterator )</code>
|-
| <code>array2 = [...array1];</code> || <code>array2 = array1.slice();</code>
|-
| <code>[...array1, ...array2]</code> || <code>array1.concat( array2 )</code>
|-
| <code>[element, ...rest] = array;</code> || <code lang="js">element = array[0], rest = array.slice(1);</code>
|-
| <code lang="js">let</code><ref><code lang="js">const</code>可用。</ref> || <code lang="js">var</code>
|-
| <code>2**3</code><ref name="jshint">ES7以上语法虽然在不作为ResourceLoader的模块时允许使用,但因为CodeEditor安装的[[#JSHint|JSHint]]版本不支持语法分析,可能会造成代码除错时的困难。</ref> || <code lang="js">Math.pow(2, 3)</code>
|-
| <code lang="js">async function()</code><ref name="jshint" /> || <code lang="js">function() { return new Promise(resolve, reject); }</code>
|-
| <code lang="js">try { variable = await func(); } catch {}</code><ref name="jshint" /> || <code lang="js">func().then(function(result) { variable = result; }, function() {});</code>
|-
| <code>obj1 = {...obj2};</code><ref name="jshint" /> || <code lang="js">obj1 = $.extend(true, {}, obj2);</code>
|-
| <code>{...object1, ...object2}</code><ref name="jshint" /> || <code lang="js">$.extend(object1, object2)</code>或<code lang="js">Object.assign(object1, object2)</code><ref>注意$.extend()方法与另两者并不完全一致,但更推荐使用$.extend()。</ref>
|}