整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          3個編寫JavaScript高質量代碼的技巧,讓你不

          3個編寫JavaScript高質量代碼的技巧,讓你不再996

          文首發自「慕課網」,想了解更多IT干貨內容,程序員圈內熱聞,歡迎關注!

          前段時間有一個叫做“人類高質量男性”的視頻火了,相信很多同學都刷到過。所以今天給大家分享下,什么叫做“人類高質量代碼”,哈哈,開個玩笑。

          其實分享的都是一些自己平時總結的小技巧,算是拋磚引玉吧,希望能給大家帶來一些啟發和幫助。

          如何編寫出高質量的 JavaScript 代碼?我個人認為,如果要編寫出高質量的 JavaScript 代碼,可以從以下三個方面去考慮。

          分別是:易閱讀的代碼、高性能的代碼、健壯性的代碼。下面我將分別對這三個方面進行闡述。

          易閱讀的代碼

          首先說一下,代碼是寫給自己或團隊成員看的,良好的閱讀方式是編寫高質量代碼的前提條件。這里總結了四點具體操作方式分享給大家。

          第一點:統一代碼格式

          不要一會這樣寫,一會那樣寫,盡量統一寫法,下面舉例。

          // bad
          function foo(x,y) {
            return {
              sum : x + y
            };
          }
          function bar(m, n){
            let ret=m*n
            return ret;
          }
          // good
          function foo(x, y) {    //  適當的空格隔開,一般符號前不添加空格,符號后添加空格
            return {
              sum: x + y,         //  拖尾逗號是合法的,簡化了對象和數組添加或刪除元素
            }                     //  省略結束分號,當然需要知道如何規避風險
          }
          function bar(m, n) {
            let ret=m * n
            return ret
          }
          
          

          人為去約定代碼格式,是很不方便的,所以可以借助一些工具進行自動格式轉換。

          第二點:去除魔術數字

          魔術數字(magic number)是程式設計中所謂的直接寫在程式碼里的具體數值(如“10”“123”等以數字直接寫出的值)。雖然程式作者寫的時候自己能了解數值的意義,但對其他程式員而言,甚至作者本人經過一段時間后,都會很難理解這個數值的用途。

          // bad
          setTimeout(blastOff, 86400000)
          document.onkeydown=function (ev) {
            if (ev.keyCode===13) {
              // todos
            }
          }
          // good
          const MILLISECONDS_IN_A_DAY=86400000
          const ENTER_KEY=13
          setTimeout(blastOff, MILLISECONDS_IN_A_DAY)
          document.onkeydown=function (ev) {
            if (ev.keyCode===ENTER_KEY) {
              // todos
            }
          }

          當然還有魔術字符串也是像上面一樣去處理,上面代碼中的常量命名推薦采用下劃線命名的方式,其他如變量、函數等推薦用駝峰進行命名。

          其實減少this的使用頻率也是一樣的道理,當代碼中充斥著大量this的時候,我們往往很難知道它是誰,需要花費很多時間進行閱讀。

          // bad
          class Foo {
              foo() {
                  this.number=100
                  this.el.onclick=function () {
                      this.className="active"
                  }
              }
          }
          // good
          class Foo {
              foo() {
                  let context=this
                  context.number=100
                  context.el.onclick=function () {
                      let el=this
                      el.className="active"
                  }
              }
          }

          第三點:單一功能原則

          無論是編寫模塊、類、還是函數都應該讓他們各自都只有單一的功能,不要讓他們做過多的事情,這樣閱讀起來會非常簡單,擴展起來也會非常靈活。

          // bad
          function copy(obj, deep) {
            if (deep) {
              // 深拷貝
            } else {
              // 淺拷貝
            }
          }
          // good
          function copy(obj) {
            // 淺拷貝
          }
          function deepCopy(obj) {
            // 深拷貝
          }

          第四點:減少嵌套層級

          多層級的嵌套,如:條件嵌套、循環嵌套、回調嵌套等,對于代碼閱讀是非常不利的,所以應盡量減少嵌套的層級。

          像解決條件嵌套的問題,一般可采用衛語句(guard clause)的方式提前返回,從而減少嵌套。

          // bad
          function foo() {
            let result
            if (isDead) {
              result=deadAmount()
            } else {
              if (isRet) {
                result=retAmount()
              } else {
                result=normalAmount()
              }
            }
            return result
          }
          // good
          function foo() {
            if (isDead) {
              return deadAmount()
            }
            if (isRet) {
              return retAmount()
            }
            return normalAmount()
          }

          除了衛語句外,通過還可以采用短路運算、條件運算符等進行條件語句的改寫。

          // bad
          function foo() {
              if (isOk) {
                  todo()
              }
              let grade
              if (isAdmin) {
                  grade=1
              } else {
                  grade=0
              }
          }
          // good
          function foo() {
              isOk && todo()                   // 短路運算
              let grade=isAdmin ? 1 : 0      // 條件運算符
          }

          像解決回調嵌套的問題,一般可采用“async/await”方式進行改寫。

          // bad
          let fs=require("fs")
          function init() {
            fs.mkdir(root, (err)=> {
              fs.mkdir(path.join(root, "public", "stylesheets"), (err)=> {
                fs.writeFile(
                  path.join(root, "public", "stylesheets", "style.css"),
                  "",
                  function (err) {}
                )
              })
            })
          }
          init()
          // good
          let fs=require("fs").promises
          async function init() {
            await fs.mkdir(root)
            await fs.mkdir(path.join(root, "public", "stylesheets"))
            await fs.writeFile(path.join(root, "public", "stylesheets", "style.css"), "")
          }
          init()

          除了以上介紹的四點建議外,還有很多可以改善閱讀體驗的點,如:有效的注釋、避免不同類型的比較、避免生澀的語法等等。

          高性能的代碼

          在軟件開發中,代碼的性能高低會直接影響到產品的用戶體驗,所以高質量的代碼必然是高性能的。這里總結了四點具體操作方式分享給大家。

          提示:測試JavaScript平均耗時,可使用console.time()方法、JSBench.Me工具、performance工具等。

          第一點:優化算法

          遞歸是一種常見的算法,下面是用遞歸實現的“求階乘”的操作。

          // bad
          function foo(n) {
            if (n===1) {
              return 1
            }
            return n * foo(n - 1)
          }
          foo(100)   // 平均耗時:0.47ms
          // good
          function foo(n, result=1) {
            if (n===1) {
              return result
            }
            return foo(n - 1, n * result)    // 這里尾調用優化
          }
          foo(100)   // 平均耗時:0.09ms

          “尾調用”是一種可以重用棧幀的內存管理優化機制,即外部函數的返回值是一個內部函數的返回值。

          第二點:使用內置方法

          很多功能都可以采用JavaScript內置方法來解決,往往內置方法的底層實現是最優的,并且內置方法可在解釋器中提前執行,所以執行效率非常高。

          下面舉例為:獲取對象屬性和值的復合數組形式。

          // bad
          let data={
            username: "leo",
            age: 20,
            gender: "male",
          }
          let result=[]
          for (let attr in data) {
            result.push([attr, data[attr]])
          }
          console.log(result)
          // good
          let data={
            username: "leo",
            age: 20,
            gender: "male",
          }
          let result=Object.entries(data)
          console.log(result)

          第三點:減少作用域鏈查找

          作用域鏈是作用域規則的實現,通過作用域鏈的實現,變量在它的作用域內可被訪問,函數在它的作用域內可被調用。作用域鏈是一個只能單向訪問的鏈表,這個鏈表上的每個節點就是執行上下文的變量對象(代碼執行時就是活動對象),單向鏈表的頭部(可被第一個訪問的節點)始終都是當前正在被調用執行的函數的變量對象(活動對象),尾部始終是全局活動對象。

          概念太復雜的話, 看下面這樣一張圖。

          作用域鏈這個鏈表就是 3(頭部:bar) -> 2(foo) -> 1(尾部:全局),所以查找變量的時候,應盡量在頭部完成獲取,這樣就可以節省性能,具體對比如下。

          // bad
          function foo() {
            $("li").click(function () {     // 全局查找一次
              $("li").hide()                // 再次全局查找一次
              $(this).show()
            })
          }
          // good
          function foo() {
            let $li=$("li")               // 減少下面$li的作用域查找層級      
            $li.click(function () {      
              $li.hide()               
              $(this).show()
            })
          }

          除了減少作用域鏈查找外,減少對象屬性的查找也是一樣的道理。

          // bad
          function isNull(arg) {
            return Object.prototype.toString.call(arg)==="[object Null]"
          }
          function isFunction(arg) {
            return Object.prototype.toString.call(arg)==="[object Function]"
          }
          // good
          let toString=Object.prototype.toString
          function isNull(arg) {
            return toString.call(arg)==="[object Null]"
          }
          function isFunction(arg) {
            return toString.call(arg)==="[object Function]"
          }

          第四點:避免做重復的代碼

          有時候編寫程序時,會出現很多重復執行的代碼,最好要避免做重復操作。先舉一個簡單的例子,通過循環找到第一個滿足條件元素的索引位置。

          // bad
          let index=0
          for (let i=0, len=li.length; i < len; i++) {
              if (li[i].dataset.switch==="on") {
                  index=i
              }
          }
          // good
          let index=0
          for (let i=0, len=li.length; i < len; i++) {
              if (li[i].dataset.switch==="on") {
                  index=i
                  break        // 后面的循環沒有意義,屬于執行不必要的代碼
              }
          }

          再來看一個計算“斐波那契數列”的案例。

          // bad
          function foo(n) {
            if (n < 3) {
              return 1
            }
            return foo(n - 1) + foo(n - 2)
          }
          foo(40)     // 平均耗時:1043ms
          // good
          let cache={}
          function foo(n) {
            if (n < 3) {
              return 1
            }
            if (!cache[n]) {
              cache[n]=foo(n - 1) + foo(n - 2)
            }
            return cache[n]
          }
          foo(40)    // 平均耗時:0.16ms

          這里把遞歸執行過的結果緩存到數組中,這樣接下來重復的代碼就可以直接讀取緩存中的數據了,從而大幅度提升性能。

          畫叉號的部分就會走緩存,而不會重復執行計算。

          除了以上介紹的四點建議外,還有很多可以改善代碼性能的點,如:減少DOM操作、節流處理、事件委托等等。

          健壯性的代碼

          所謂健壯性的代碼,就是編寫出來的代碼,是可擴展、可維護、可測試的代碼。這里總結了四點具體操作方式分享給大家。

          第一點:使用新語法

          很多新語法可彌補之前語法的BUG,讓代碼更加健壯,應對未來。

          // bad
          var a=1
          isNaN(NaN)              // true
          isNaN(undefined)        // true
          // good
          let a=1
          Number.isNaN(NaN)       // true
          Number.isNaN(undefined) // false
          新語法還可以簡化之前的操作,讓代碼結構更加清晰。
          // bad
          let user={ name: "james", age: 36 }
          function foo() {
            let arg=arguments
            let name=user.name
            let age=user.age
          }
          // good
          let user={ name: "james", age: 36 }
          function foo(...arg) {          // 剩余參數
            let { name, age }=user      // 解構賦值
          }

          第二點:隨時可擴展

          由于產品需求總是會有新的變更,對軟件的可擴展能力提出了很高要求,所以健壯的代碼都是可以隨時做出調整的代碼。

          // bad
          function foo(animal) {
            if (animal==="dog" || animal==="cat") {
              // todos
            }
          }
          function bar(name, age) {}
          bar("james", 36)
          // good
          function foo(animal) {
            const animals=["dog", "cat", "hamster", "turtle"]   // 可擴展匹配值
            if (animals.includes(animal)) {
              // todos
            }
          }
          function bar(options) {}    // 可擴展任意參數
          bar({
            gender: "male",
            name: "james",
            age: 36,
          })

          第三點:避免副作用

          當函數產生了除了“接收一個值并返回一個結果”之外的行為時,就產生了副作用。副作用不是說一定是有害的,但是如果在項目中沒有節制的引起副作用,代碼出錯的可能性會非常大。

          建議盡量不要去修改全局變量或可變對象,通過參數和return完成需求。讓函數成為一種純函數,這樣也可使代碼更容易被測試。

          // bad
          let fruits="Apple Banana"
          function splitFruits() {
            fruits=fruits.split(" ")
          }
          function addItemToCart(cart, item) {
            cart.push({ item, data: Date.now() })
          }
          // good
          let fruits="Apple Banana"
          function splitFruits(fruits) {    
            return fruits.split(" ")
          }
          function addItemToCart(cart, item) {
            return [...cart, { item, data: Date.now() }]
          }

          第四點:整合邏輯關注點

          當項目過于復雜的時候,經常會把各種邏輯混在一起,對后續擴展非常不利,而且還影響對代碼的理解。所以盡量把相關的邏輯抽離到一起,進行集中式的管理。像React中的hooks,Vue3中的Composition API都是采用這樣的思想。

          // bad
          export default {
            name: 'App',
            data(){
              return {
                searchHot: [],
                searchSuggest: [],
                searchHistory: [],
              },
              mounted() {
                // todo hot
                
                // todo history
              },
              methods: {
                handleSearchSuggest(){
                  // todo suggest
                },
                handleSearchHistory(){
                  // todo history
                }
              }
            }
          }
          // good
          export default {
            name: "App",
            setup() {
              let { searchHot }=useSearchHot()
              let { searchSuggest, handleSearchSuggest }=useSearchSuggest()
              let { searchHistory, handleSearchHistory }=useSearchHistory()
              return {
                searchHot,
                searchSuggest,
                searchHistory,
                handleSearchSuggest,
                handleSearchHistory,
              }
            }
          }
          function useSearchHot() {
            // todo hot
          }
          function useSearchSuggest() {
            // todo suggest
          }
          function useSearchHistory() {
            // todo history
          }

          除了以上介紹的四點建議外,還有很多可以改善代碼健壯性的點,如:異常處理、單元測試、使用TS替換JS等等。

          最后總結一下,如何編寫高質量JavaScript代碼:

          歡迎關注「慕課網」,發現更多IT圈優質內容,分享干貨知識,幫助你成為更好的程序員!

          者| 慕課網精英講師 西門老舅

          本文首發自「慕課網」,想了解更多IT干貨內容,程序員圈內熱聞,歡迎關注!

          前段時間有一個叫做“人類高質量男性”的視頻火了,相信很多同學都刷到過。所以今天給大家分享下,什么叫做“人類高質量代碼”,哈哈,開個玩笑。

          其實分享的都是一些自己平時總結的小技巧,算是拋磚引玉吧,希望能給大家帶來一些啟發和幫助。

          如何編寫出高質量的 JavaScript 代碼?我個人認為,如果要編寫出高質量的 JavaScript 代碼,可以從以下三個方面去考慮。

          分別是:易閱讀的代碼高性能的代碼健壯性的代碼。下面我將分別對這三個方面進行闡述。

          易閱讀的代碼

          首先說一下,代碼是寫給自己或團隊成員看的,良好的閱讀方式是編寫高質量代碼的前提條件。這里總結了四點具體操作方式分享給大家。

          第一點:統一代碼格式

          不要一會這樣寫,一會那樣寫,盡量統一寫法,下面舉例。

          // bad function foo(x,y) { return {     sum : x + y   }; } function bar(m, n){ let ret=m*n   return ret; } // good function foo(x, y) { //  適當的空格隔開,一般符號前不添加空格,符號后添加空格 return {     sum: x + y, //  拖尾逗號是合法的,簡化了對象和數組添加或刪除元素 } //  省略結束分號,當然需要知道如何規避風險 } function bar(m, n) { let ret=m * n   return ret }

          人為去約定代碼格式,是很不方便的,所以可以借助一些工具進行自動格式轉換,如:prettier 插件(https://prettier.io/)。

          第二點:去除魔術數字

          魔術數字(magic number)是程式設計中所謂的直接寫在程式碼里的具體數值(如“10”“123”等以數字直接寫出的值)。雖然程式作者寫的時候自己能了解數值的意義,但對其他程式員而言,甚至作者本人經過一段時間后,都會很難理解這個數值的用途。

          // bad setTimeout(blastOff, 86400000) document.onkeydown=function (ev) { if (ev.keyCode===13) { // todos } } // good const MILLISECONDS_IN_A_DAY=86400000 const ENTER_KEY=13 setTimeout(blastOff, MILLISECONDS_IN_A_DAY) document.onkeydown=function (ev) { if (ev.keyCode===ENTER_KEY) { // todos } }

          當然還有魔術字符串也是像上面一樣去處理,上面代碼中的常量命名推薦采用下劃線命名的方式,其他如變量、函數等推薦用駝峰進行命名。

          其實減少this的使用頻率也是一樣的道理,當代碼中充斥著大量this的時候,我們往往很難知道它是誰,需要花費很多時間進行閱讀。

          // bad class Foo { foo() { this.number=100 this.el.onclick=function () { this.className="active" } } } // good class Foo { foo() { let context=this         context.number=100         context.el.onclick=function () { let el=this             el.className="active" } } }

          第三點:單一功能原則

          無論是編寫模塊、類、還是函數都應該讓他們各自都只有單一的功能,不要讓他們做過多的事情,這樣閱讀起來會非常簡單,擴展起來也會非常靈活。

          // bad function copy(obj, deep) { if (deep) { // 深拷貝 } else { // 淺拷貝 } } // good function copy(obj) { // 淺拷貝 } function deepCopy(obj) { // 深拷貝 }

          第四點:減少嵌套層級

          多層級的嵌套,如:條件嵌套、循環嵌套、回調嵌套等,對于代碼閱讀是非常不利的,所以應盡量減少嵌套的層級。

          像解決條件嵌套的問題,一般可采用衛語句(guard clause)的方式提前返回,從而減少嵌套。

          // bad function foo() { let result   if (isDead) {     result=deadAmount() } else { if (isRet) {       result=retAmount() } else {       result=normalAmount() } } return result } // good function foo() { if (isDead) { return deadAmount() } if (isRet) { return retAmount() } return normalAmount() }

          除了衛語句外,通過還可以采用短路運算、條件運算符等進行條件語句的改寫。

          // bad function foo() { if (isOk) { todo() } let grade     if (isAdmin) {         grade=1 } else {         grade=0 } } // good function foo() {     isOk && todo() // 短路運算 let grade=isAdmin ? 1 : 0 // 條件運算符 }

          像解決回調嵌套的問題,一般可采用“async/await”方式進行改寫。

          // bad let fs=require("fs") function init() {   fs.mkdir(root, (err)=> {     fs.mkdir(path.join(root, "public", "stylesheets"), (err)=> {       fs.writeFile(         path.join(root, "public", "stylesheets", "style.css"), "", function (err) {} ) }) }) } init() // good let fs=require("fs").promises async function init() { await fs.mkdir(root) await fs.mkdir(path.join(root, "public", "stylesheets")) await fs.writeFile(path.join(root, "public", "stylesheets", "style.css"), "") } init()

          除了以上介紹的四點建議外,還有很多可以改善閱讀體驗的點,如:有效的注釋、避免不同類型的比較、避免生澀的語法等等。

          高性能的代碼

          在軟件開發中,代碼的性能高低會直接影響到產品的用戶體驗,所以高質量的代碼必然是高性能的。這里總結了四點具體操作方式分享給大家。

          提示:測試JavaScript平均耗時,可使用console.time()方法、http://JSBench.Me工具、performance工具等。

          第一點:優化算法

          遞歸是一種常見的算法,下面是用遞歸實現的“求階乘”的操作。

          // bad function foo(n) { if (n===1) { return 1 } return n * foo(n - 1) } foo(100) // 平均耗時:0.47ms // good function foo(n, result=1) { if (n===1) { return result   } return foo(n - 1, n * result) // 這里尾調用優化 } foo(100) // 平均耗時:0.09ms

          “尾調用”是一種可以重用棧幀的內存管理優化機制,即外部函數的返回值是一個內部函數的返回值。

          第二點:使用內置方法

          很多功能都可以采用JavaScript內置方法來解決,往往內置方法的底層實現是最優的,并且內置方法可在解釋器中提前執行,所以執行效率非常高。

          下面舉例為:獲取對象屬性和值的復合數組形式。

          // bad let data={   username: "leo",   age: 20,   gender: "male", } let result=[] for (let attr in data) {   result.push([attr, data[attr]]) } console.log(result) // good let data={   username: "leo",   age: 20,   gender: "male", } let result=Object.entries(data) console.log(result)

          第三點:減少作用域鏈查找

          作用域鏈是作用域規則的實現,通過作用域鏈的實現,變量在它的作用域內可被訪問,函數在它的作用域內可被調用。作用域鏈是一個只能單向訪問的鏈表,這個鏈表上的每個節點就是執行上下文的變量對象(代碼執行時就是活動對象),單向鏈表的頭部(可被第一個訪問的節點)始終都是當前正在被調用執行的函數的變量對象(活動對象),尾部始終是全局活動對象。

          概念太復雜的話, 看下面這樣一張圖。

          作用域鏈這個鏈表就是 3(頭部:bar) -> 2(foo) -> 1(尾部:全局),所以查找變量的時候,應盡量在頭部完成獲取,這樣就可以節省性能,具體對比如下。

          // bad function foo() { $("li").click(function () { // 全局查找一次 $("li").hide() // 再次全局查找一次 $(this).show() }) } // good function foo() { let $li=$("li") // 減少下面$li的作用域查找層級         $li.click(function () {           $li.hide() $(this).show() }) }

          除了減少作用域鏈查找外,減少對象屬性的查找也是一樣的道理。

          // bad function isNull(arg) { return Object.prototype.toString.call(arg)==="[object Null]" } function isFunction(arg) { return Object.prototype.toString.call(arg)==="[object Function]" } // good let toString=Object.prototype.toString function isNull(arg) { return toString.call(arg)==="[object Null]" } function isFunction(arg) { return toString.call(arg)==="[object Function]" }

          第四點:避免做重復的代碼

          有時候編寫程序時,會出現很多重復執行的代碼,最好要避免做重復操作。先舉一個簡單的例子,通過循環找到第一個滿足條件元素的索引位置。

          // bad let index=0 for (let i=0, len=li.length; i < len; i++) { if (li[i].dataset.switch==="on") {         index=i     } } // good let index=0 for (let i=0, len=li.length; i < len; i++) { if (li[i].dataset.switch==="on") {         index=i         break // 后面的循環沒有意義,屬于執行不必要的代碼 } }

          再來看一個計算“斐波那契數列”的案例。

          // bad function foo(n) { if (n < 3) { return 1 } return foo(n - 1) + foo(n - 2) } foo(40) // 平均耗時:1043ms // good let cache={} function foo(n) { if (n < 3) { return 1 } if (!cache[n]) {     cache[n]=foo(n - 1) + foo(n - 2) } return cache[n] } foo(40) // 平均耗時:0.16ms

          這里把遞歸執行過的結果緩存到數組中,這樣接下來重復的代碼就可以直接讀取緩存中的數據了,從而大幅度提升性能。


          畫叉號的部分就會走緩存,而不會重復執行計算。

          除了以上介紹的四點建議外,還有很多可以改善代碼性能的點,如:減少DOM操作、節流處理、事件委托等等。

          健壯性的代碼

          所謂健壯性的代碼,就是編寫出來的代碼,是可擴展、可維護、可測試的代碼。這里總結了四點具體操作方式分享給大家。

          第一點:使用新語法

          很多新語法可彌補之前語法的BUG,讓代碼更加健壯,應對未來。

          // bad var a=1 isNaN(NaN) // true isNaN(undefined) // true // good let a=1 Number.isNaN(NaN) // true Number.isNaN(undefined) // false

          新語法還可以簡化之前的操作,讓代碼結構更加清晰。

          // bad let user={ name: "james", age: 36 } function foo() { let arg=arguments   let name=user.name   let age=user.age } // good let user={ name: "james", age: 36 } function foo(...arg) { // 剩余參數 let { name, age }=user      // 解構賦值 }

          第二點:隨時可擴展

          由于產品需求總是會有新的變更,對軟件的可擴展能力提出了很高要求,所以健壯的代碼都是可以隨時做出調整的代碼。

          // bad function foo(animal) { if (animal==="dog" || animal==="cat") { // todos } } function bar(name, age) {} bar("james", 36) // good function foo(animal) { const animals=["dog", "cat", "hamster", "turtle"] // 可擴展匹配值 if (animals.includes(animal)) { // todos } } function bar(options) {} // 可擴展任意參數 bar({   gender: "male",   name: "james",   age: 36, })

          第三點:避免副作用

          當函數產生了除了“接收一個值并返回一個結果”之外的行為時,就產生了副作用。副作用不是說一定是有害的,但是如果在項目中沒有節制的引起副作用,代碼出錯的可能性會非常大。

          建議盡量不要去修改全局變量或可變對象,通過參數和return完成需求。讓函數成為一種純函數,這樣也可使代碼更容易被測試。

          // bad let fruits="Apple Banana" function splitFruits() {   fruits=fruits.split(" ") } function addItemToCart(cart, item) {   cart.push({ item, data: Date.now() }) } // good let fruits="Apple Banana" function splitFruits(fruits) { return fruits.split(" ") } function addItemToCart(cart, item) { return [...cart, { item, data: Date.now() }] }

          第四點:整合邏輯關注點

          當項目過于復雜的時候,經常會把各種邏輯混在一起,對后續擴展非常不利,而且還影響對代碼的理解。所以盡量把相關的邏輯抽離到一起,進行集中式的管理。像React中的hooks,Vue3中的Composition API都是采用這樣的思想。

          // bad export default {   name: 'App', data(){ return {       searchHot: [],       searchSuggest: [],       searchHistory: [], }, mounted() { // todo hot // todo history },     methods: { handleSearchSuggest(){ // todo suggest }, handleSearchHistory(){ // todo history } } } } // good export default {   name: "App", setup() { let { searchHot }=useSearchHot() let { searchSuggest, handleSearchSuggest }=useSearchSuggest() let { searchHistory, handleSearchHistory }=useSearchHistory() return {       searchHot,       searchSuggest,       searchHistory,       handleSearchSuggest,       handleSearchHistory, } } } function useSearchHot() { // todo hot } function useSearchSuggest() { // todo suggest } function useSearchHistory() { // todo history }

          除了以上介紹的四點建議外,還有很多可以改善代碼健壯性的點,如:異常處理、單元測試、使用TS替換JS等等。

          最后總結一下,如何編寫高質量JavaScript代碼:

          神秘彩蛋

          根據上面介紹的原則,用JavaScrpt語言,編寫了一個簡單版本的“俄羅斯方塊”小游戲,作為神秘彩蛋送給大家。哪里寫的不好的地方,還希望大家提出指正。

          歡迎關注「慕課網」,發現更多IT圈優質內容,分享干貨知識,幫助你成為更好的程序員!

          目 錄

          1.賬號注冊

          2.案時常見問題

          3.交費時常見問題

          4.系統功能介紹


          1.賬號注冊


          1.1律師注冊不通過的原因

          1.2當事人注冊方式有哪些

          1.3其他賬號問題


          1.1律師注冊不通過的原因

          如果是山東省內律師且執業時間比較早,可以嘗試一下使用執業證號作為用戶名,身份證號后8位作為密碼,直接登陸山東法院電子訴訟服務平臺。

          如果能登陸成功,系統右上角【設置】或者【個人中心】里更新一下個人資料尤其是聯系電話,案件推送短信才能發到您現在的手機上。

          如果確實沒有訴訟服務平臺律師賬號,請點擊登陸頁面【律師注冊】按鈕去注冊一個律師賬號。

          如果注冊律師賬號收到短信:審核沒有通過。請按照如下提示操作:

          第一步 :讓律所管理員登錄“最高院人民法院律師服務平臺http://lsfw.court.gov.cn/lsxxgl/,將您的律師資料維護到最高律師服務平臺中。其中【律師姓名】、【性別】、【民族】、【身份證號】、【執業證號】、【執業證取得日期】、【資格證號】、【資格證取得日期】、【執業開始日期】、【手機號碼】、【所屬律所名稱】這幾個關鍵信息必須填寫,并上傳相關律師資料。

          第二步 :最高院律師信息維護完畢之后的12-24小時之后,回到山東法院電子訴訟服務平臺律師注冊頁面https://sd12368.gov.cn/dzssfw/tLsfwLsxxDjOut/add,請同時打開最高院律師服務平臺您的個人資料頁面,山東法院電子訴訟服務平臺律師注冊頁面。山東注冊所有需要填寫的信息不要手動錄入,直接從最高院里復制出來,粘貼到山東這邊,然后提交,即可審核通過。

          備注:如果律所管理員對于如何登陸最高院律師服務平臺存在疑問,或者沒有律所管理員賬號密碼、密碼不正確,請律師事務所負責人聯系 010-67553422, 提供【事務所名稱】、【事務所執業許可證號】、【律所負責人姓名】、【律師負責人手機號碼】、 【律所負責人執業證號】、【省份】等信息統一進行添加。

          1.2當事人注冊方式有哪些

          方式一:訴訟服務平臺電腦端注冊

          點擊“當事人注冊”,進入當事人用戶注冊頁面。其中*字段是必填信息。

          身份證號即為當事人的登錄賬號。提交注冊信息后,電子訴訟服務平臺通過身份證號、姓名去最高公民庫里校驗當事人身份。校驗通過則發送短信告知注冊信息通過審核,可以登錄系統;校驗失敗則短信通知注冊失敗,需要核對資料后重新注冊。

          方式二:山東移動微法院小程序注冊

          手機微信搜索【山東移動微法院】小程序,在手機端實名認證,人臉識別認證(手機比較老的話采用唇語識別)。

          如果您之前從來沒使用過山東法院電子訴訟服務平臺和山東移動微法院,那么會自動生成賬號,并給您發送短信——【您的注冊信息通過審核,請用身份證作為用戶名進行登錄(密碼是身份證后8位),祝您生活愉快!】,該賬號還可以用來登陸山東法院電子訴訟服務平臺。

          如果您之前在山東法院電子訴訟服務平臺已經有賬號,只是第一次使用山東移動微法院,那么微法院認證通過之后,會自動綁定您的訴訟服務平臺賬號,不會額外再生成賬號,并給您發送短信——【您已注冊過當事人信息,不要重復注冊!祝您生活愉快!身份證號碼為370XXXXX】。

          當事人注冊不通過的原因

          如果當事人在訴訟服務平臺注冊未通過原因:1.身份證件已注銷,2.信息變更3.人員特殊身份(涉密)4.注冊時名字或身份證號填寫錯誤

          解決辦法:一般是當事人自己把注冊信息填錯了,尤其是姓名。核對身份證號和姓名后重新注冊一次。

          如果當事人在山東移動微法院上實名認證不通過:

          解決辦法:長按或者拖動微信最上面山東移動微法院小程序,刪除小程序,然后關閉掉微信進程。重新打開微信并搜索山東移動微法院,重新認證一次。如果還是不行,那只能在訴訟服務平臺上注冊了。有些手機、微信就是不支持人臉識別。

          微法院人臉認證不通過

          微信最上面長按或者拖動山東移動微法院小程序,刪除小程序,然后關閉掉微信進程。重新打開微信并搜索山東移動微法院,重新認證一次。如果還是不行,那只能去電腦端注冊了。有些手機微信就是不支持(比如一直人臉識別失敗或者提示光線太亮),因為人臉識別使用騰訊生物識別高級,進入人臉識別場景后,代碼方面就沒辦法控制了,因為沒有修改權限。

          1.3其他賬號問題

          1.法律工作者和實習律師目前只能點擊【當事人注冊】按鈕,使用本人身份信息和手機號注冊一個賬號,然后在該賬號下代理不同當事人的案件。

          2.山東法院電子訴訟服務平臺如果立保全類的案子,被告的電話一定不要填寫!

          注冊時為什么提示手機號碼已存在

          出現這種情況,是您的手機號碼借給別人注冊過。如果確定沒有借給別人使用過,那基本說明您在訴訟服務平臺已有賬號。

          可以嘗試使用執業證號或者身份證號直接登陸訴訟服務平臺。如果提示您“密碼錯誤”,點擊登陸頁面“立即登錄”按鈕上方的“忘記密碼”,重置一個新的登陸密碼即可。

          手機號借給別人使用過如何解綁

          如果別人注冊賬號時使用過您的手機號,那么您自己再次注冊時就會提示“手機號碼已經注冊”,常見于法律工作者和律師用自己手機號給當事人注冊賬號。

          解決辦法是:登陸使用您手機號的那個人的賬號,系統右上角【個人中心】里把手機號更改為那個人自己的手機號,您自己的手機號就釋放出來了,就可以注冊賬號了。

          實習律師如何注冊

          實習律師目前只能點擊【當事人注冊】按鈕,使用本人身份信息和手機號注冊一個賬號,然后在該賬號下代理不同當事人的案件。

          注冊步驟見:訴訟服務平臺電腦端注冊

          法律工作者如何注冊

          法律工作者目前只能點擊【當事人注冊】按鈕,使用本人身份信息和手機號注冊一個賬號,然后在該賬號下代理不同當事人的案件。

          訴訟服務平臺會定期從司法局獲取法律工作者信息,更新法律工作者的賬號,更新完畢給賬號綁定的手機號發送如下短信進行說明:

          你好,您在電子訴訟服務平臺注冊的賬號已經由當事人角色更改為法律工作者角色,賬號由身份證號改成法律工作者執業證號,密碼不變。

          注冊步驟見:訴訟服務平臺電腦端注冊

          原告是公司該如何注冊賬號

          公司肯定委托了某個人來進行立案,比如律師或者公司員工。如果是律師,那么直接使用律師賬號去立案,如果委托了某個公司員工,用此人自己的個人信息注冊一個當事人角色的賬號,然后立案的時候原告錄入公司信息,上傳案件材料的時候需要提交委托代理手續,證明您與公司之間的關系,比如勞動合同、公司授權委托書等。

          注冊步驟見:訴訟服務平臺電腦端注冊

          案件相關通知短信發給誰

          訴訟服務平臺案件相關通知短信尤其催費短信是發送給該案件立案賬號綁定的手機號上。

          如果案件是用當事人自己的賬號立的,賬號綁定的手機號是當事人自己的,那么通知短信就發送給當事人,如果這個案件是律師賬號幫當事人立的。律師賬號綁定的是律師自己的手機號,那么短信是發到律師手機上。如果立案賬號未綁定任何手機號,則案件推送短信不會發送給任何人。

          所以當您更換手機號后,請及時在系統右上角“個人信息”里把手機號更改為您在用的手機號。

          如何重置登陸密碼

          點擊登陸頁面的“忘記密碼”,進入密碼重置頁面:

          輸入頁面信息點擊“確定”即可完成密碼找回。

          如果長時間收不到驗證碼,那么基本上證明您之前在訴訟服務平臺注冊的手機號不是您目前在用的手機號,或者從律協、司法廳那邊同步過來的律師、法律工作者資料里電話是空的或者是固話。只能提供您的執業證、身份證、本人手持身份證照片,訴訟服務平臺后后臺給您重置密碼。


          2、立案時常見問題



          2.1立案短信系統發送成功但是立案人收不到

          2.2新版老版訴訟服務平臺都可以使用嗎

          2.3哪些案件能網上立案

          2.4案件登記號如何獲取

          2.5民事、行政上訴時為什么原審案件查不到

          2.6民事、行政上訴時為什么原審案件前面小圓圈是灰色條,無法選擇

          2.7民事、行政上訴時為什么當事人是灰色的,無法選擇

          2.8訴中保全時為什么選不到案件

          2.9網上閱卷如何使用

          2.10繳費人退費人信息為什么下拉列表是空的

          2.11手機端和電腦端案件為什么不同步

          2.12材料格式都支持哪些

          2.13沒有中國大陸身份證號如何立案

          2.1立案短信系統發送成功但是立案人收不到

          對于回執成功但是短信未收到的情況,運營商的提供的解釋如下:

          如出現回執成功,但是用戶反饋接收不到,基本屬于手機終端問題,我們建議:

          1.建議用戶查看下手機目前接收狀態是不是正常(如信號差、不穩定等) 2.長時間不關機,需要關機重啟(手機處理程序較多,長期不關機可能會干擾信息處理) 3.雙卡雙待的手機,將雙卡互換嘗試一下 4.檢查收件箱是否已滿,刪除一些短信 5.檢查手機是否有攔截軟件

          2.2新版老版訴訟服務平臺都可以使用嗎

          新版訴訟服務平臺(https://sd12368.gov.cn/)老版訴訟服務平臺(http://lsfwpt.sdcourt.gov.cn:7865/dzssfwl/lawyer/login.jspx)并行使用,都可以進行立案等操作。

          2.3哪些案件能網上立案

          現在山東法院電子訴訟服務平臺能立的案件是:

          道交案件。

          民事:民商事一審, 民事上訴(民商事一審上訴、民撤上訴), 民事申請再審審查(內網出民申案號), 民事特殊程序(特別程序監督內網對應民特監案字,其余13種特殊程序內網對應民特案字), 管轄異議, 管轄異議上訴。

          行政:行政一審, 行政上訴(行政一審上訴、行賠初上訴), 行政申請再審審查(內網出行申案號)。

          刑事:刑事自訴。

          保全:訴前保全(內網出財保案號)、訴中保全。

          執行:首次執行、執行異議、執行復議(首次執行和執復,先進分調裁再到通達海)。

          注:外網的申請再審立案,內網審批出民申、行申字號;民再、行再案號的網上立案以及上訴暫時只能線下立案;民撤、行賠初目前只能網上上訴,但不能網上立案。

          國家賠償等賠字號案件、民催、民督暫時不能網上立案。

          2.4案件登記號如何獲取

          訴訟服務平臺的案件登記號在原告受理通知書、被告應訴通知書的右上角。

          法官可以在云平臺相應案件-送達信息-打印文書里找找。?沒有登記號找東軟工程師查找(在審判系統立案過的就可以查詢的到)。

          2.5民事、行政上訴時為什么原審案件查不到

          管轄異議上訴的所有案件信息都需手動錄入。民事和行政上訴,根據案號和登記號可以自動回填原審案件信息,無需手動錄入原審信息。

          民事、行政上訴時的原審案件是東軟公司傳給訴訟服務平臺的,只推送結案日期在近兩年的案件,包括線上立的案件和線下立的案件。

          使用當事人信息查詢不到案件的時候,再使用案號和登記號查詢一下,推薦使用案號和登記號查詢。

          如果案號、登記號錄入無誤還是查不到案件,請聯系法院核查一下案件在辦案系統里是否報結,填寫的結案時間是否在近兩年內(當前時間往前推兩年)。如果結案時間在兩年內,但是訴訟服務平臺還是查不到案件請聯系東軟公司處理,訴訟服務平臺10分鐘后就可以上訴了。

          2.6民事、行政上訴時為什么原審案件前面小圓圈是灰色條,無法選擇

          說明該案件您之前在上訴的過程中退出了立案頁面。請到我的案件中找到該案件,點擊“編輯”按鈕繼續您的上訴流程。或者將該案件點擊“刪除”,然后重新去系統首頁“上訴立案申請”下面的具體上訴通道里從頭開始您的上訴流程。

          2.7民事、行政上訴時為什么當事人是灰色的,無法選擇

          上訴人是灰色的,說明他已經上訴過該案件,不能重復上訴。案件狀態可能是“保存”, 也可能是“已提交”。

          上訴人是灰色的,說明他已經上訴過該案件,不能重復上訴。案件狀態可能是“保存”, 也可能是“已提交”。

          如果案件已經提交了,除非法官審核意見是“審核不通過”,否則您是無法對同一個案件再次上訴的。

          2.8訴中保全時為什么選不到案件

          立訴中保全案件時,提供了兩種查詢待保全案件的方式:

          1、點擊“案件選擇”按鈕彈出案號查詢頁面,彈出的案件是當前登陸賬號之前在電子訴訟服務平臺、一體機、山東移動微法院等線上立的已出案號且已經到交費階段及交費成功的案件,暫時不包含線下立的案件。

          2、鑒于第一種查詢方式存在制約:即無法跨賬號保全,也不能對線下立的案件進行保全,因為查不到案件。所以提供第二種查詢方式:錄入案號和登記號進行保全,就突破了賬號限制,也可以對線下立的案件進行保全。

          2.9網上閱卷如何使用

          訴訟服務平臺的【網上閱卷(當事人)】掛的是東軟的閱卷鏈接,點擊網上閱卷有提示說明、右上角也有幫助文檔。

          1、“我的相關案件”模塊:該模塊數據是由系統自動推送的民事一審未結案件的隨案卷宗。

          2、“卷宗借閱”模塊:案件結案后若需查詢電子檔案的正卷,在此模塊進行申請。

          3、“卷宗查看”模塊:卷宗借閱申請法官審批后在此模塊進行電子檔案的瀏覽。

          4、詳細操作請查看系統右上角的“使用幫助”。

          微法院網上閱卷查看的是結案案件的歸檔卷宗。

          2.10繳費人退費人信息為什么下拉列表是空的

          可能是您沒有錄入原告。交費人退費人下拉列表展示的是您填寫的原告。如果您已經錄入了原告,點擊原告當事人后面的“修改”,重新保存一遍您的原告,那么交費人退費人下拉列表就可以選擇了。

          2.11手機端和電腦端案件為什么不同步

          手機端和電腦端案件是同步的。如果不同步,很大可能是立案人賬號有兩個。A賬號立的案子在B賬號上查看肯定是查不到的,造成案件不同步的假象。

          2.12材料格式都支持哪些

          為預防新版勒索病毒,應省院要求,山東法院電子訴訟服務平臺上傳的案件材料格式,暫時支持圖片或者pdf。

          2.13沒有中國大陸身份證號如何立案

          原告是無名氏沒有身份證號碼、港澳臺或者外國人,則無法通過山東法院電子訴訟服務平臺的用戶注冊,因為沒法通過中國大陸公民認證。


          3、交費時常見問題


          3.1案件審核同意了為什么沒有交費通道

          3.2交費時為什么提示交費人不是原告

          3.3審判系統在哪兒查看訴訟費交納情況



          3.1案件審核同意了為什么沒有交費通道

          案件審核同意之后,立案人賬號綁定的手機號會收到短信提醒,告知您提交的立案申請已經通過審核。但此時并不代表著立即交費。只有等法官生成了案號和受理費、上訴費或者申請費之后,您才能在網上交費,到時會收到短信提醒。

          如果案件還沒有案號和交費通道,,案件狀態是“審核通過”,需要等待法官在內網生成案號和交費信息。請耐心等待,或者直接與受理法院直接聯系。

          3.2交費時為什么提示交費人不是原告

          出現這種問題的原因一般是內網法官選擇交費人時選成了被告,或者內網更改過原告名字。

          3.3審判系統在哪兒查看訴訟費交納情況

          圖中紅色方框內是查看網上立案交費結果查詢按鈕,點擊即可查詢。


          4、系統功能介紹



          4.1民事一審

          4.2行政上訴

          4.3執行復議

          4.4網上交費

          4.5材料遞交


          4.1民事一審

          點擊【民事一審】進入信息填寫頁面:紅色星號字段是必填項。按照頁面提示從上到下依次錄入:受理法院、案由、標的金額、申請人身份;添加原告、被告、第三人;繳費人退費人信息;送達地址確認書;訴訟請求、事實理由;上傳案件材料。

          * 選擇法院:點擊進入選擇法院頁面,支持根據法院名稱模糊查詢,快速鎖定法院;

          * 選擇申請人身份:下拉列表選擇

          * 標的金額:只能錄入整數或者小數,不能有其他特殊字符

          案由:點擊之后,進行查詢

          添加當事人

          *原告(申請人):必填添加,且跟訴狀保持一致

          *被告(被申請人):必填添加,且跟訴狀保持一致

          第三人:如果涉及第三人,請添加第三人信息,且跟訴狀保持一致 原告、被告、第三人,可以點擊后面的,可以添加“自然人”、“法人”、“非法人其他組織”。

          4.2行政上訴

          操作流程跟民事上訴幾乎一致,根據頁面提示操作即可,不再贅述。

          4.3執行復議

          操作同執行異議差不多,按照頁面提示進行填寫即可。

          執行依據

          *申請受理法院:為執行法院的上級法院

          *執行法院:請根據原執行案號選擇, 如案號(2020)魯0102執19號執行法院為歷下法院,申請受理法院為濟南中院

          *原執異案號:錄入原先的執異或執字案號

          *復議事項:從下拉框里選擇

          *執行依據文號:錄入執行依據文號

          其他操作步驟同執行異議差不多,按照頁面提示進行填寫即可。

          4.4網上交費

          案件提交之后,等待法官進行審批,如果案件進入待交費階段,立案人賬號綁定的手機收到交費短信。

          4.4.1非青島轄區法院交費

          點擊系統首頁——“網上繳費”,進入待繳費案件列表頁面,您所有的待交費案件都會顯示在下圖列表中。包含法院、訂單號、案號、總金額、交費人姓名等信息,也可以根據上方的查詢條件快速定位待交費案件。

          點擊“去繳費”,進入訴訟費預收票據頁面。網上交費目前支持微信、支付寶、對公網銀、銀聯支付這4種支付方式(如果您的交費金額>20萬,還會額外出現個人網銀共5種支付方式)

          選擇任意一種支付方式,倒計時30秒結束后,點擊“去支付”即可。

          個人網銀

          選擇“個人網銀”,倒計時結束后,點擊“去支付”,進入選擇銀行頁面。如果您無法出現下圖選擇銀行的頁面,就是該頁面被攔截了。點擊瀏覽器右上角的紅色叉號或者紅色1,允許頁面彈出即可。下面是360瀏覽器和谷歌瀏覽器網頁攔截示例。

          目前個人網銀只支持四大行、招商、郵政、中信這7家銀行。如果7家銀行里有些銀行前面的小圓圈按鈕是灰色的,那您是無法使用該銀行的,這是因為咱們當地財政沒有在該家銀行開通賬戶,您只能選擇那些不是灰色按鈕的銀行進行支付。

          以建設銀行為例,點擊“確認付款”按鈕,進入建行支付頁面,支付方式可以掃描二維碼在手機端支付,也可以登錄網銀或者登錄賬號后交費,如下:

          這里是在手機建行APP上掃描二維碼支付的,支付后進入銀行扣款成功頁面,如下:

          點擊“已完成支付”按鈕,進入支付成功頁面,如下:

          關閉支付成功頁面后,回到我的案件列表頁面,案件狀態由“待交費”變成了“已交費(待入國庫)”。“已交費(待入國庫)”是一種正常狀態,代表著您已經交費成功了,但是這筆賬還沒跟省財政進行對賬操作(一般來說個人網銀方式支付的,第二個工作日才與省財政對賬)。

          微信

          1.選擇支付方式為“微信”,倒計時結束后,點擊“去支付”。

          如果您遇到下圖字樣的提示:交款書已過期,說明您沒有在規定時間內交納訴訟費,省財政提供的交款碼過期了,無法網上交費,請聯系法院。

          2.進入非稅代收確認交費信息頁面,頁面倒計時10秒,確認交費前請認真核對交款信息。倒計時結束后,點擊“確認交費”。

          3.進入選擇選擇支付方式頁面,目前非稅統平臺集成了26家銀行及微信、支付寶、銀聯支付第三方支付交款渠道,交款人可根據實際情況選擇具體的支付方式。交款人選擇“個人賬戶付款”——“微信”,點擊“去支付”。

          4.彈出微信二維碼頁面,使用手機微信首頁“掃一掃”,掃描該二維碼,手機上會出現確認支付頁面。

          5.手機微信上支付完畢之后,二維碼頁面自動刷新,進入“確認支付狀態”頁面,提示您“你已成功完成交費”。點擊“查看詳情”,進入支付憑證查看頁面,并可以下載憑證。

          支付寶

          1.選擇支付方式為“支付寶”。倒計時結束后,點擊“去支付”。

          2.進入確認交費信息頁面,頁面倒計時10秒,確認交費前請認真核對交款信息。倒計時結束后,點擊“確認交費”。

          3.進入選擇選擇支付方式頁面,目前非稅統平臺集成了26家銀行及微信、支付寶、銀聯支付第三方支付交款渠道,交款人可根據實際情況選擇具體的支付方式。交款人選擇“個人賬戶付款”——“支付寶”,點擊“去支付”。

          4.彈出支付寶二維碼頁面,使用手機支付寶APP首頁“掃一掃”,掃描該二維碼,手機上會出現確認支付頁面。

          5.手機支付寶上點擊“確認并支付”。

          6.手機支付寶上支付完畢之后,二維碼頁面自動刷新,進入“確認支付狀態”頁面,提示您“你已成功完成交費”。

          7.點擊“查看詳情”,進入支付憑證查看頁面,并可以下載憑證。

          對公網銀

          1.選擇支付方式為“對公網銀”,倒計時結束后,點擊“去支付”。進入確認交款信息頁面,頁面倒計時10秒,確認交費前請認真核對交款信息。倒計時結束后,點擊“確認交費”。

          2.進入選擇選擇支付方式頁面,目前非稅統平臺集成了26家銀行及微信、支付寶、銀聯支付第三方支付交款渠道,交款人可根據實際情況選擇具體的支付方式。交款人選擇選擇“公司賬戶付款”,插入對公網銀UK,并勾選“確認您已插入對公網銀UsbKey”,然后點擊“去支付”。

          3.銀行對公網銀支付流程。因為每家銀行的支付方式都不同,此處以光大銀行B2B(個人支付)付款為例進行說明。選擇光大銀行圖標,交款人(對公支付的經辦人)點擊“去支付”按鈕,跳轉至光大銀行網銀頁面。輸入正確的信息后,點擊“登錄”,進入到光大銀行網銀頁面,如下圖:

          4.在光大銀行網銀頁面選擇“全部功能-電子支付”選擇需要錄入的訂單,點擊“支付”,如下圖:

          5.確認訂單信息,再次點擊“確定”,完成訂單錄入。

          6.交易已提交,點擊“確定”,如下圖:

          7.交款人(對公支付的復核人),登錄到光大銀行官網,進入公司網銀。選擇“交易審核-轉賬類交易審核-本人審核”,選擇需要復核的訂單,點擊“同意”,如下圖:

          8.顯示交易成功,完成訂單復核,如下圖:

          9.步驟四:查看支付結果

          銀聯支付

          1.選擇支付方式為“銀聯支付”。倒計時結束后,點擊“去支付”。

          2.進入非稅代收確認交費信息頁面,頁面倒計時10秒,確認交費前請認真核對交款信息。倒計時結束后,點擊“確認交費”。

          3.進入選擇選擇支付方式頁面,目前非稅統平臺集成了26家銀行及微信、支付寶、銀聯支付第三方支付交款渠道,交款人可根據實際情況選擇具體的支付方式。交款人選擇“個人賬戶付款”——“銀聯支付”,點擊“去支付”。

          4.進入在線支付頁面,“直接付款”只是信用卡和儲蓄卡和中銀通卡,“登陸付款”可以使用登陸用戶名、密碼的方式付款。頁面對兩種付款方式提供了新手操作演示,還有在線客服和幫助中心。

          5.支付完畢之后,進入“確認支付狀態”頁面,提示您“你已成功完成交費”。點擊“查看詳情”,進入支付憑證查看頁面,并可以下載憑證。

          幫助中心

          在微信、支付寶、對公網銀、銀聯支付過程中遇到問題,請點擊以下非稅系統幫助鏈接。https://yaoyao.cebbank.com/LifePaymentSocket/webPc/sdFeiShui/index.html?canal=sdszwpt&code=637934244

          點擊上面幫助鏈接或者點擊非稅代收頁面上的“幫助中心”或“聯系我們”。

          4.4.2青島轄區法院交費

          海事和青島鐵路交費方式按照上面介紹的非青島轄區法院交費流程,青島中院及下轄基層院適用下述交費流程!

          點擊系統首頁——“網上繳費”,進入待繳費案件列表頁面

          點擊,進入訴訟費預收票據頁面

          倒計時結束后,點擊創建訂單成功,出現下圖交費方式選擇項。

          倒計時結束后,點擊創建訂單成功,出現下圖交費方式選擇項。

          支付寶

          選中支付寶,點擊“確認支付”,出現支付寶掃碼頁面,掃碼即可完成支付。

          微信

          選中微信,點擊“確認支付”,出現微信掃碼頁面,掃碼即可完成支付。

          中國工商銀行

          選中中國工商銀行,點擊“確認支付”,按照頁面提示完成支付。

          交通銀行

          選中交通銀行,點擊“確認支付”,按照頁面提示完成支付。

          中國建設銀行

          選中中國建設銀行,點擊“確認支付”,按照頁面提示完成支付。

          中國農業銀行

          選中中國農業銀行,點擊“確認支付”,按照頁面提示完成支付。

          中國銀行

          選中中國銀行,點擊“確認支付”,按照頁面提示完成支付。

          4.5材料遞交

          材料遞交是當事人端主動發起的,可以再次提交案件材料。

          點擊系統首頁——“材料補交”,進入案件列表頁面。可以通過頁面上方的法院等信息進行快速查詢和定位案件。

          點擊“材料遞交新增”,進入新增頁面,*為必填項。

          在申請頁面,點擊“選擇案件”,彈出該賬號下的案件列表。點擊案件前方的小圓圈,再點擊“確定”按鈕,選中該案件,即可自動回填所屬法院和案號。

          然后上傳申請材料。

          信息填寫完畢之后,點擊即可將材料推送到內網法院系統等待法官審核,并回到案件列表頁面,點擊可以查看詳情。


          主站蜘蛛池模板: 色噜噜狠狠一区二区三区果冻 | 国产在线无码一区二区三区视频| 日韩精品一区二区三区中文版| 精品久久国产一区二区三区香蕉| 怡红院一区二区三区| 污污内射在线观看一区二区少妇| 一区二区三区视频免费观看| 国产精品亚洲一区二区三区| 亚洲一区二区三区高清视频| 中文字幕乱码一区二区免费| 国产高清在线精品一区二区| 日本人真淫视频一区二区三区 | 性色AV 一区二区三区| 天天综合色一区二区三区| 一区二区传媒有限公司| 中文字幕一区二区三区久久网站 | 色婷婷香蕉在线一区二区| 夜精品a一区二区三区| 精品人妻AV一区二区三区 | 天海翼一区二区三区高清视频| 亚洲图片一区二区| 国产成人一区二区三区视频免费| 国产午夜毛片一区二区三区| 男人的天堂亚洲一区二区三区| 韩国精品一区视频在线播放| 亚洲AV无一区二区三区久久| 久久无码一区二区三区少妇 | 国产精品乱码一区二区三| 亚洲综合一区二区三区四区五区| 极品尤物一区二区三区| 尤物精品视频一区二区三区| 秋霞日韩一区二区三区在线观看| 国产成人av一区二区三区在线| 免费高清在线影片一区| 无码精品蜜桃一区二区三区WW | 99久久精品国产一区二区成人| 日韩一区二区视频| 美女视频一区二区三区| 国产午夜毛片一区二区三区 | 亚州AV综合色区无码一区| 韩国精品一区二区三区无码视频|