<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>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                [TOC] ## 實現 JS 對象的深拷貝 備注: 遞歸容易造成爆棧,尾部調用(需要了解一下)可以解決遞歸的這個問題,Chrome 的 V8 引擎做了尾部調用優化,我們在寫代碼的時候也要注意尾部調用寫法。遞歸的爆棧問題可以通過將遞歸改寫成枚舉的方式來解決,就是通過for或者while來代替遞歸。 ## 實現js方法對對url參數的解析 ,延伸url參數的拼接 ## 實現一個簡單的模版引擎 列:我叫a,年齡b,性別c; let data = { name: '小明', age: 18, } 沒有定義的返回undefined ## 如何快速讓字符串變成已千為精度的數字 ## 如何判斷當前的環境是node還是瀏覽器 通過判斷global 對象是否是window,window的話就是瀏覽器中.直接控制臺輸出查看window是有值的還是未定義的。 ## 對象相等判斷 簡單寫出一個方法判斷兩個對象相等,假設只具有一層屬性結構,且均為基本值。基本邏輯很簡單,判斷兩個對象的屬性數量相同,并且a具有的屬性另一個屬性也具有并且值相同即可。 ``` function isEqual(a, other){ var len = Object.keys(a); if(len !== Object.keys(b)) return false; while(len--){ key = keys[len] if (!(b.hasOwnProperty(key) && a[key] === b[key]))) return false; } return true } ``` 備注:如果你想了解更多,歡迎去看 - [eq寫法分析](https://github.com/mqyqingfeng/Blog/issues/41) - [lodash庫:baseIsEqualDeep](https://github.com/lodash/lodash/blob/master/.internal/baseIsEqualDeep.js) ## 閉包 - 優點 使用閉包主要是為了設計私有的方法和變量,可以避免全局變量的污染 - 缺點 閉包會常駐內存,會增大內存使用量,使用不當很容易造成內存泄露。在js中,函數即閉包,只有函數才會產生作用域的概念 - 閉包的特點 1.函數嵌套函數 2.函數內部可以引用外部的參數和變量 3.參數和變量不會被垃圾回收機制回收 ## 浮點數精度問題 ### 問題 - 計算不準確 - 超出表示范圍,大數危機 首先要搞清楚 JavaScript 如何存儲小數。和其它語言如 Java 和 Python 不同,JavaScript 中所有數字包括整數和小數都只有一種類型 — `Number`。它的實現遵循 [IEEE 754](http://grouper.ieee.org/groups/754/) 標準,使用 64 位固定長度來表示,也就是標準的 double 雙精度浮點數(相關的還有float 32位單精度)。 這樣的存儲結構優點是可以歸一化處理整數和小數,節省存儲空間。 解決方案: ### **1 數據展示類** 當你拿到 `1.4000000000000001` 這樣的數據要展示時,建議使用 `toPrecision` 湊整并 `parseFloat` 轉成數字后再顯示,如下: ``` parseFloat(1.4000000000000001.toPrecision(12)) === 1.4 // True ``` 封裝成方法就是: ```js function strip(num, precision = 12) { return +parseFloat(num.toPrecision(precision)); } ``` 為什么選擇 `12` 做為默認精度?這是一個經驗的選擇,一般選12就能解決掉大部分0001和0009問題,而且大部分情況下也夠用了,如果你需要更精確可以調高。 ### **2 數據運算類** 對于運算類操作,如 `+-*/`,就不能使用 `toPrecision` 了。正確的做法是把小數轉成整數后再運算。以加法為例: ```js /** * 精確加法 */ function add(num1, num2) { const num1Digits = (num1.toString().split('.')[1] || '').length; const num2Digits = (num2.toString().split('.')[1] || '').length; const baseNum = Math.pow(10, Math.max(num1Digits, num2Digits)); return (num1 * baseNum + num2 * baseNum) / baseNum; } ``` 以上方法能適用于大部分場景。遇到科學計數法如 `2.3e+1`(當數字精度大于21時,數字會強制轉為科學計數法形式顯示)時還需要特別處理一下。 能讀到這里,說明你非常有耐心,那我就放個福利吧。遇到浮點數誤差問題時可以直接使用 https://github.com/dt-fe/number-precision 完美支持浮點數的加減乘除、四舍五入等運算。非常小只有1K,遠小于絕大多數同類庫(如Math.js、BigDecimal.js),100%測試全覆蓋,代碼可讀性強,不妨在你的應用里用起來! ### **3 參考推薦文章**: - [浮點數精度](https://github.com/camsong/blog/issues/9) ## null與undefined的區別 null是一個表示"無"的對象,轉為數值時為0;undefined是一個表示"無"的原始值,轉為數值時為NaN。 當聲明的變量還未被初始化時,變量的默認值為undefined。 null用來表示尚未存在的對象,常用來表示函數企圖返回一個不存在的對象。 * undefined表示"缺少值",就是此處應該有一個值,但是還沒有定義。典型用法是: (1)變量被聲明了,但沒有賦值時,就等于undefined。 (2) 調用函數時,應該提供的參數沒有提供,該參數等于undefined。 (3)對象沒有賦值的屬性,該屬性的值為undefined。 (4)函數沒有返回值時,默認返回undefined。 * null表示"沒有對象",即該處不應該有值。典型用法是: (1) 作為函數的參數,表示該函數的參數不是對象。 (2) 作為對象原型鏈的終點。
                  <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>

                              哎呀哎呀视频在线观看