<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                1: 把數字轉換成中文 完成將 toChineseNum, 可以將數字轉換成中文大寫的表示,處理到萬級別,例如 toChineseNum(12345),返回 一萬二千三百四十五。 JavaScript ~~~ const toChineseNum = (num) => { // TODO } ~~~ 答案: ~~~ const toChineseNum = (num) => { const number = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'] // 定義中文數字 const unit = ['', '十', '百', '千', '萬'] // 定義中文基 const resultStr = [] let len = 0 // 數字長 let lastNumNotZero = false while(num){ let n = num % 10 let u = len >= unit.length ? len % 5 + 1 : len % 5 // 添加基 if( n // 當前位存在 || // 或者 ( u == unit.length - 1 && // u 和 長度均為 最后一位unit len == unit.length - 1 ) ) resultStr.unshift(unit[u]) // 處理數 if( n || lastNumNotZero // 當前位和前一位不都為零則處理 && u !== unit.length - 1 // 且當前位不為最后一位基 ) resultStr.unshift(number[n]) lastNumNotZero = !!n len++ num = Math.floor(num / 10) } return resultStr.join('') } ~~~ 二: safeGet 有時候我們需要訪問一個對象較深的層次,但是如果這個對象某個屬性不存在的話就會報錯,例如: var data = { a: { b: { c: 'ScriptOJ' } } } data.a.b.c // => scriptoj data.a.b.c.d // => 報錯,代碼停止執行 console.log('ScriptOJ') // => 不會被執行 請你完成一個 safeGet 函數,可以安全的獲取無限多層次的數據,一旦數據不存在不會報錯,會返回 undefined,例如: var data = { a: { b: { c: 'ScriptOJ' } } } safeGet(data, 'a.b.c') // => scriptoj safeGet(data, 'a.b.c.d') // => 返回 undefined safeGet(data, 'a.b.c.d.e.f.g') // => 返回 undefined console.log('ScriptOJ') // => 打印 ScriptOJ JavaScript ~~~ const safeGet = (data, path) => { /* TODO */ } ~~~ 答案: ~~~ const safeGet = (o, path) => { try { return path.split('.').reduce((o, k) => o[k], o) } catch (e) { return void 666 } } ~~~ 三: 簡單的模版引擎 模版引擎是在前端是非常常用的一種工具。請你完成一個簡單的模版引擎的 render 函數,它可以接受模版字符串和一個數據對象作為參數。函數執行返回渲染以后的模版字符串,例如: const templateStr = ` <ul class="users"> <% users.forEach((user) => { %> <li class="user-item"> <%= 'My name is ' + user.name %> </li> <% }) %> </ul> ` const data = { users: [ { name: 'Jerry', age: 12 }, { name: 'Lucy', age: 13 }, { name: 'Tomy', age: 14 } ] } render(templateStr, data) /*返回結果: <ul class="users"> <li class="user-item"> My name is Jerry </li> <li class="user-item"> My name is Lucy </li> <li class="user-item"> My name is Tomy </li> </ul> */ <% 和 %> 之間可以放置任意的 JavaScript 代碼,而 <%= 和 %> 之間執行任意的 JavaScript 表達式并且輸出在模版上;傳入的 data 可以作為模版引擎執行的上下文進行數據的引用,請你完成 render 函數。 (提示:你可以結合 執行任意表達式 來實現) 答案: ~~~ function render(template, data){ const evalExpr = /<%=(.+?)%>/g const expr = /<%([\s\S]+?)%>/g template = template .replace(evalExpr, '`); \n __echo( $1 ); \n __echo(`') .replace(expr, '`); \n $1 \n __echo(`') template = '__echo(`' + template + '`);' const script =` let output = "" const __echo = (html) => output += html ${template} return output ` return new Function(...Object.keys(data), script)(...Object.values(data)) } ~~~ 四: Don't Touch Me Tomy 非常敏感,不喜歡別人碰他的東西。一旦有人碰他就會大喊 Don't Touch Me.。 完成 tomy 這個對象,禁止對 tomy 的內容進行修改(增加、修改、刪除)。一旦有人對 tomy 進行任何的修改,都用 console.log 打印 Don't Touch Me.。 答案: ~~~ const tomy = new Proxy({}, { set () { console.log(`Don't Touch Me.`) }, deleteProperty () { console.log(`Don't Touch Me.`) } }) ~~~ 五: 實現 js 數據類型的判斷 最新的 Javascript 標準規定了六種基本數據類型(number, null, undefined, string, boolean, symbol) 和基于 Object 衍生的其它原生數據類型,寫出 type 函數,它傳入一個參數,返回它的數據類型(用小寫字母),比如: type(new Date),返回 date。 答案: `const type = (obj) => (({}).toString.call(obj).match(/\[object\ (\w+)\]/)[1]).toLowerCase()`
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看