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

                [TOC] # 面試真題 ## 1\. 說說`js`中有哪些數據類型 ## 2\. js有哪些原始/值/基本,數據類型 ## 3\. 如何判斷空對象 ## 4\. BigInt解決了什么問題 ## 5\. 基本類型和引用類型的區別 ## 6\. null和undefined有什么區別 ## 7\. 如何準確區分所有數據類型 # 幫助理解 `JavaScript` 是一種弱類型說動態語言。這意味著你不用提前聲明變量的類型,在程序運行過程中,類型會被自動確定。這也意味著你可以使用同一個變量保存不同類型的數據,因此`JavaScript`的數據類型相對而言比較少。 ~~~javascript m = 7; console.log(typeof m) // number m = "最編程"; console.log(typeof m) // string m = true; console.log(typeof m) // boolean ~~~ 從運行結果可以看出來`m`變量的數據類型是由它的值來決定的 ## 基本數據類型 ES5中有5種簡單數據類型(也稱為基本數據類型):`undefined`、`Null`、`Boolean`、`Number`、`String` ES6中新增了:`symbol` ES10中新增了:`biginit` 所以最新的基本數據類型現在一共是<span class="vip">7</span>個 ### undefined `undefined`類型只有一個值,即特殊的`undefined`也就是它自身。在使用`var`聲明變量但未對其加以初始化時,這個變量的值就是`undefined` ~~~javascript var m; console.log(m === undefined) // true ~~~ ### Null `null`類型是第二個只有一個值的數據類型,這個特殊的值是`null`也就是它自身。從邏輯角度來看,`null` 值表示一個空對象指針,而這也正是使用`typeof`操作符檢測`null`值時會返回`object`的原因。 ~~~javascript var m = null; console.log(typeof m) // object ~~~ ### Boolean 布爾類型,該類型有兩個值:`true`和`false`。布爾值 `true` 代表“真”,`false` 代表“假”。 下面6種值轉化為布爾值時為`false`,其他轉化都為`true` 1. `undefined`(未定義,找不到值時出現) ~~~javascript let m = undefined; if (m) console.log('最編程') // 不會執行,因為m的值為false ~~~ 2. `null`(代表空值) ~~~javascript let m = null; if (m) console.log('最編程') // 不會執行,因為m的值為false ~~~ 3. `false`(布爾值的`false`,字符串"`false`"布爾值為`true`) ~~~javascript let m = 'false'; if (m) console.log('最編程') // 最編程 ~~~ 4. `0`(數字0,字符串"0"布爾值為`true`) ~~~javascript let m = 0; if (m) console.log('最編程') // 不會執行,因為m的值為false // 字符串"0"布爾值為 true let m = '0'; if (m) console.log('最編程') // 最編程 ~~~ 5. `NaN`(無法計算結果時出現,表示"非數值";但是`typeof NaN==="number"`) ~~~javascript let m = NaN; if (m) console.log('最編程') // 不會執行,因為m的值為false // NaN數據類型為number console.log(typeof NaN) // number ~~~ 6. `""`(雙引號)或`''`(單引號) (空字符串,中間有空格時也是`true`) ~~~javascript let m = ''; if (m) console.log('最編程') // 不會執行,因為m的值為false // 空字符串,中間有空格時也是true let m = ' '; if (m) console.log('最編程') // 最編程 ~~~ ### Number `JavaScript`中只有一種數字類型:基于 IEEE 754 格式來表示整數和浮點數值,所有數字在`JavaScript`中均用浮點數值表示,無法精確表示的非常大的整數將自動四舍五入。確切地說,`JS`中的`Number`類型只能安全地表示`2^53 = 9007199254740992之間的整數`(2的53次方- 1,9007199254740992-1,16位),任何超出此范圍的整數值都可能失去精度,所以在進行數字運算的時候要特別注意精度缺失問題。 ~~~javascript console.log(9999999999999999); // 10000000000000000 ~~~ 該整數大于`JS Number` 類型所能表示的最大整數,因此,它被四舍五入了。意外四舍五入會損害程序的可靠性和安全性 ### String 字符串類型用于表示文本數據,字符串可以是單引號也可以是雙引號,它們是完全相同的 ~~~javascript var m1 = '最編程' var m2 = "創未來" ~~~ ### symbol `ES6` 引入了一種新的原始(基本)數據類型 `Symbol` ,表示獨一無二的值,最大的用法是用來定義對象的唯一屬性名 ~~~javascript let sy = Symbol("key1"); // 寫法1 let syObject = {}; syObject[sy] = "mm"; console.log(syObject); // {Symbol(key1): "mm"} // 寫法2 let syObject = { [sy]: "mm" }; console.log(syObject); // {Symbol(key1): "mm"} ~~~ ### bigint `BigInt`類型是 `JavaScript`中的一個基礎的數值類型,可以用任意精度表示整數。使用 `BigInt`,您可以安全地存儲和操作大整數,甚至可以超過數字的安全整數限制。BigInt數據類型的目的是比Number數據類型支持的范圍更大的整數值,使用`BigInt`,整數溢出將不再是問題。此外,可以安全地使用更加準確時間戳,大整數`ID`等,而無需使用變通方法。`BigInt` 是通過在整數末尾附加`n` 或調用構造函數來創建的。 ~~~javascript // 創建BigInt的方法,第一種:只需在整數的末尾追加n即可 let m1 = 7n; // 第二種:BigInt()構造函數 let m2 = BigInt(7); // 這倆貨是相等的 console.log(m1 === m2); // true ~~~ 使用 `typeof` 測試時, `BigInt` 返回 `"bigint"` : ~~~javascript let m1 = 7n; console.log(typeof m1) // bigint let m2 = BigInt(7); console.log(typeof m2) // bigint ~~~ 它在某些方面類似于`Number` ,但是也有幾個關鍵的不同點:不能用于 `Math `對象中的方法: ~~~javascript let m = 7n console.log(Math.round(m)) // Cannot convert a BigInt value to a number(無法將BigInt值轉換為數字) ~~~ 不能和任何 `Number `實例混合運算,兩者必須轉換成同一種類型 ~~~javascript let m = 7n let n = 7 console.log(m + n) // Cannot mix BigInt and other types, use explicit conversions(無法混合BigInt和其他類型,請使用顯式轉換 ~~~ 在兩種類型來回轉換時要小心,因為 `BigInt `變量在轉換成 `Number `變量時可能會丟失精度。 **bigint和number對比:** ~~~javascript // bigint數據類型 console.log(9007199254740995n) // 9007199254740995n // number數據類型(把后面的n去掉) console.log(9007199254740995) // 9007199254740996 ~~~ `BigInt` 和 `Number`不是嚴格相等的,但是寬松相等的 ~~~javascript let m = 7n let n = 7 console.log(m === n) // false console.log(m == n) // true ~~~ `Number `和 `BigInt `可以進行比較 ~~~javascript console.log(1n < 2) // true console.log(2n > 1) // true console.log(2 > 2) // false console.log( 2n > 2) // false console.log(2n >= 2) // true ~~~ 兩者也可以混在一個數組內并排序 ~~~javascript const arr = [3n, 4, 2, 1n, 0, -1n]; console.log(arr.sort()); // (6)[-1n, 0, 1n, 2, 3n, 4] ~~~ ## 引用數據類型 ### Object `Object`類型,我們也稱為一個對象。是`JavaScript`中的引用數據類型。它是一種復合值,它將很多值聚合到一起,可以通過名字訪問這些值 ~~~javascript // 創建對象 let obj = {} // 添加屬性 obj.age = 20 // 添加方法 obj.fn = function() { alert(obj.age) } // 調用對象內的方法 obj.fn() ~~~ 對象除了可以創建自有屬性,還可以通過從一個名為原型的對象那里繼承屬性。 除了`String`、`Number`、`Boolean`、`null`和`undefined`之外,`JS`中的值都是對象 在此類型下面還有子類型:`Array`、`Function`、`Date`、`RegExp` # 真題解答 ## 1\. 說一說`JS`中有哪些數據類型? 首先,我來介紹一下基本數據類型,在`ES5`中有`5`種基本數據類型,分別是:`undefined`、`Null`、`Boolean`、`Number`、`String`。在`ES6`中新增了:`symbol`表示獨一無二的值,通過 `Symbol`函數調用生成,由于生成的`symbol`值為原始類型,所以 `Symbol` 函數不能使用`new`調用。在`ES10`中新增了:`biginit`可以用任意精度表示整數。所以最新的基本數據類型現在一共是<span class="vip">`7`</span>個。 其次,就是`object`,它是`JavaScript`中的引用數據類型。是一種復合值,它將很多值聚合到一起,可以通過名字訪問這些值,此類型下面還有子類型:`Array`、`Function`、`Date`、`RegExp`。 ## 2\. js有哪些原始/值/基本,數據類型 在`ES5`中有`5`種基本數據類型,分別是:`undefined`、`Null`、`Boolean`、`Number`、`String`。在`ES6`中新增了:`symbol`表示獨一無二的值,通過 `Symbol` 函數調用生成,由于生成的 `symbol` 值為原始類型,所以 `Symbol` 函數不能使用 `new`調用。在`ES10`中新增了:`biginit`可以用任意精度表示整數。所以最新的基本數據類型現在一共是<span class="vip">`7`</span>個。 ## 3\. 如果判斷空對象 第一種方法:使用`JSON.stringify()`轉為對象字符串判斷是否全等于`"{}"` ~~~javascript let obj = {}; console.log(JSON.stringify(obj) === '{}') // true ~~~ 第二種方法:因為`for in`只能枚舉對象自身的屬性,不能枚舉原型屬性,因此可以用來判斷是否為空對象 ~~~javascript function isEmptyObject(obj) { for (var key in obj) { return false; } return true; } console.log((isEmptyObject({}))) // true ~~~ 第三種方法:`Object.keys`也是只能獲取自身屬性,不能獲取原型屬性 ~~~javascript function isEmptyObject(obj) { return Object.keys(obj).length === 0; } console.log(isEmptyObject({})) // true ~~~ ## 4\. `BigInt` 解決了什么問題? `JavaScript`中能表示的最?安全數字,轉換成`10`進制是`9007199254740991`,即在這個數范圍內不會出現精度丟失(?數除外)。但是?旦超過這個范圍,`js`就會出現計算不準確的情況,這在?數計算的時候不得不依靠?些第三?庫進?解決,因此官?提出了`BigInt`來解決此問題。 ## 5\. 基本類型和引用的區別 稍后更新... ## 6\. null和undefined有什么區別? 稍后更新... ## 7\. 如何準確區分所有數據類型? 稍后更新...
                  <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>

                              哎呀哎呀视频在线观看