91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

好程序員Java教程分享JavaScript常見面試題二

發布時間:2020-08-05 14:43:23 來源:網絡 閱讀:210 作者:wx5da18b5c4b01e 欄目:編程語言

  好程序員Java教程分享JavaScript常見面試題二:1.JavaScript源文件的開頭包含?use strict?有什么意義和好處?

  對于這個問題,既簡要又最重要的答案是,use strict?是一種在JavaScript代碼運行時自動實行更嚴格解析和錯誤處理的方法。那些被忽略或默默失敗了的代碼錯誤,會產生錯誤或拋出異常。通常而言,這是一個很好的做法。

  嚴格模式的一些主要優點包括:

  使調試更加容易。那些被忽略或默默失敗了的代碼錯誤,會產生錯誤或拋出異常,因此盡早提醒你代碼中的問題,你才能更快地指引到它們的源代碼。

  防止意外的全局變量。如果沒有嚴格模式,將值分配給一個未聲明的變量會自動創建該名稱的全局變量。這是JavaScript中最常見的錯誤之一。在嚴格模式下,這樣做的話會拋出錯誤。

  消除?this?強制。如果沒有嚴格模式,引用null或未定義的值到?this?值會自動強制到全局變量。這可能會導致許多令人頭痛的問題和讓人恨不得拔自己頭發的bug。在嚴格模式下,引用?null或未定義的?this?值會拋出錯誤。

  不允許重復的屬性名稱或參數值。當檢測到對象(例如,var object = {foo: "bar", foo: "baz"};)中重復命名的屬性,或檢測到函數中(例如,function foo(val1, val2, val1){})重復命名的參數時,嚴格模式會拋出錯誤,因此捕捉幾乎可以肯定是代碼中的bug可以避免浪費大量的跟蹤時間。

  使eval()?更安全。在嚴格模式和非嚴格模式下,eval()?的行為方式有所不同。最顯而易見的是,在嚴格模式下,變量和聲明在?eval()?語句內部的函數不會在包含范圍內創建(它們會在非嚴格模式下的包含范圍中被創建,這也是一個常見的問題源)

  ?delete使用無效時拋出錯誤。delete操作符(用于從對象中刪除屬性)不能用在對象不可配置的屬性上。當試圖刪除一個不可配置的屬性時,非嚴格代碼將默默地失敗,而嚴格模式將在這樣的情況下拋出異常。

  

  2.考慮以下兩個函數。它們會返回相同的東西嗎??為什么相同或為什么不相同?

  function foo1(){ return {

  bar: "hello"

  };

  }function foo2(){ return

  {

  bar: "hello"

  };

  }

  出人意料的是,這兩個函數返回的內容并不相同。更確切地說是:

  console.log("foo1 returns:");console.log(foo1());console.log("foo2 returns:");console.log(foo2());

  將產生:

  foo1 returns:Object {bar: "hello"}foo2 returns:undefined

  這不僅是令人驚訝,而且特別讓人困惑的是,?foo2()返回undefined卻沒有任何錯誤拋出。

  原因與這樣一個事實有關,即分號在JavaScript中是一個可選項(盡管省略它們通常是非常糟糕的形式)。其結果就是,當碰到?foo2()中包含?return語句的代碼行(代碼行上沒有其他任何代碼),分號會立即自動插入到返回語句之后。

  也不會拋出錯誤,因為代碼的其余部分是完全有效的,即使它沒有得到調用或做任何事情(相當于它就是是一個未使用的代碼塊,定義了等同于字符串?"hello"的屬性?bar)

  這種行為也支持放置左括號于JavaScript代碼行的末尾,而不是新代碼行開頭的約定。正如這里所示,這不僅僅只是JavaScript中的一個風格偏好。

  

  3. NaN?是什么?它的類型是什么?你如何可靠地測試一個值是否等于?NaN ?

  NaN?屬性代表一個“不是數字”的值。這個特殊的值是因為運算不能執行而導致的,不能執行的原因要么是因為其中的運算對象之一非數字(例如,?"abc" / 4),要么是因為運算的結果非數字(例如,除數為零)

  雖然這看上去很簡單,但?NaN?有一些令人驚訝的特點,如果你不知道它們的話,可能會導致令人頭痛的bug

  首先,雖然?NaN?意味著“不是數字”,但是它的類型,不管你信不信,是?Number

  console.log(typeof NaN === "number"); // logs "true"

  此外,?NaN?和任何東西比較——甚至是它自己本身!——結果是false

  console.log(NaN === NaN); // logs "false"

  一種半可靠的方法來測試一個數字是否等于?NaN,是使用內置函數?isNaN(),但即使使用?isNaN()?依然并非是一個完美的解決方案。

  一個更好的解決辦法是使用?value !== value,如果值等于NaN,只會產生true。另外,ES6提供了一個新的?Number.isNaN()?函數,這是一個不同的函數,并且比老的全局?isNaN()?函數更可靠。

  

  4.下列代碼將輸出什么?并解釋原因。

  console.log(0.1 + 0.2);console.log(0.1 + 0.2 == 0.3);

  一個稍微有點編程基礎的回答是:“你不能確定。可能會輸出“0.3”和“true”,也可能不會。JavaScript中的數字和浮點精度的處理相同,因此,可能不會總是產生預期的結果。“

  以上所提供的例子就是一個演示了這個問題的典型例子。但出人意料的是,它會輸出:

  0.30000000000000004false

  

  5.討論寫函數?isInteger(x)?的可能方法,用于確定x是否是整數。

  這可能聽起來是小菜一碟,但事實上,這很瑣碎,因為ECMAScript 6引入了一個新的正以此為目的?Number.isInteger()?函數。然而,之前的ECMAScript 6,會更復雜一點,因為沒有提供類似的?Number.isInteger()?方法。

  問題是,在ECMAScript規格說明中,整數只概念上存在:即,數字值總是存儲為浮點值。

  考慮到這一點,最簡單又最干凈的ECMAScript6之前的解決方法(同時也非常穩健地返回?false?,即使一個非數字的值,如字符串或?null?,被傳遞給函數)如下:

  function isInteger(x) { return (x^0) === x; }

  下面的解決方法也是可行的,雖然不如上面那個方法優雅:

  function isInteger(x) { return Math.round(x) === x; }

  請注意?Math.ceil()?和?Math.floor()?在上面的實現中等同于?Math.round()

  或:

  function isInteger(x) { return (typeof x === 'number') && (x % 1 === 0);

  相當普遍的一個不正確的解決方案是:

  function isInteger(x) { return parseInt(x, 10) === x; }

  雖然這個以?parseInt函數為基礎的方法在?x?取許多值時都能工作良好,但一旦?x?取值相當大的時候,就會無法正常工作。問題在于?parseInt()?在解析數字之前強制其第一個參數到字符串。因此,一旦數目變得足夠大,它的字符串就會表達為指數形式(例如,?1e+21)。因此,parseInt()?函數就會去解析?1e+21,但當到達?e字符串的時候,就會停止解析,因此只會返回值?1。注意:

> String(1000000000000000000000)'1e+21'> parseInt(1000000000000000000000, 10)1> parseInt(1000000000000000000000, 10) === 1000000000000000000000false

?


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

柞水县| 南昌市| 确山县| 青川县| 白玉县| 郁南县| 明水县| 泽普县| 成武县| 务川| 文山县| 黄冈市| 阜平县| 怀集县| 刚察县| 长白| 苏州市| 黄石市| 万山特区| 寿阳县| 云和县| 灯塔市| 哈尔滨市| 盐城市| 郎溪县| 香河县| 乌鲁木齐县| 德阳市| 文昌市| 兴化市| 陵川县| 江川县| 南宁市| 庆元县| 黔西| 湖口县| 英超| 那坡县| 娄烦县| 广东省| 山阳县|