主頁 > 企業開發 > 記錄--7 個沙雕又帶有陷阱的 JS 面試題

記錄--7 個沙雕又帶有陷阱的 JS 面試題

2023-06-09 08:04:33 企業開發

這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助

為了保證的可讀性,本文采用意譯而非直譯,

在 JS 面試中,經常會看到一些簡單而又沙雕的題目,這些題目包含一些陷阱,但這些在我們規范的編碼下或者業務中基本不會出現, 有些面試官就是這樣,不專注于制定代碼的標準和規范上,卻用不規范的代碼去檢驗別人是否細心,

這魔幻的世界就是一個攀比優越感的,我能考你,我就是比你優越,真實,

來看看這 7 個沙雕題目是哪些,

1. 偶然創建的全域變數

面試官問

在下面的代碼中 typeof atypeof b 結果各自是什么?(沙雕)

function foo() {
  let a = b = 0;
  a++;
  return a;
}

foo();
typeof a; // => ???
typeof b; // => ???

答案

這個代碼的重點在第二行:let a = b = 0,這個陳述句宣告了一個區域變數 a,但是它也宣告了一個全域變數b

foo() 作用域或全域作用域中都沒有宣告變數 b,因此 JS 引薦將b = 0 運算式解釋為 window.b = 0

如下圖所示,函式 foo 中的 i 都是一個偶然創建的全域變數:

 同樣,在咱們的問題中,b 是一個偶然創建的全域變數,在瀏覽器中,上面的代碼相當于如下:

function foo() {
  let a;
  window.b = 0;
  a = window.b;
  a++;
  return a;
}

foo();
typeof a;        // => 'undefined'
typeof window.b; // => 'number'

typeof a'undefined',變數 a 僅在 foo() 作用域中宣告,在外部作用域內不可用,

typeof b 結果是 'number'b 是一個值為 0 的全域變數

2. 陣列的 length 屬性

面試官問

clothes[0] 的值是什么?(沙雕)

const clothes = ['jacket', 't-shirt'];
clothes.length = 0;

clothes[0]; // => ???

答案

陣列物件的 length 屬性具有一些特殊的行為:

減少 length 屬性的值的副作用是洗掉 自己的 陣列元素,這些元素的陣列索引位于新舊長度值之間,

由于 length 屬性行為,當 JS 執行 clothes.length = 0 時,洗掉所有的 clothes 項, 所以 clothes[0] 的值為 undefined,因為 clothes 陣列已被清空,

3.考驗眼力的魔幻題

面試官問

下面代碼中 numbers 陣列的內容是什么? 注意 for() 后加了一個分號(;),真是沙雕

const length = 4;
const numbers = [];
for (var i = 0; i < length; i++);{
  numbers.push(i + 1);
}

numbers; // => ???

答案

上面代碼中 for() 后加了一個分號(;) ,加上分號,JS 會認為該陳述句結束,所以 for 回圈執行了4次空陳述句,當退出回圈的時候,此時的 i 值為 4,

然后執行 { numbers.push(i + 1); },所以最終 numbers 內容只有一個數字 5

上面的代碼相當于下面的代碼

const length = 4;
const numbers = [];
var i;
for (i = 0; i < length; i++) {
  // does nothing
}
{ 
  // a simple block
  numbers.push(i + 1);
}

numbers; // => [5]    
    

用不規范的代碼去檢驗別人是否細心,我覺得很沙雕,

4.自動分號插入

面試官問

arrayFromValue() 回傳什么值?(沙雕)

function arrayFromValue(items) {
  return
    [items];
}

arrayFromValue(10); // => ???

答案

這里需要注意的 return 和 [items] 之間已經換行了,JS 會在換行之間自動插入分號,所以上面等價下面的代碼:

function arrayFromValue(items) {
  return;
  [items];
}

arrayFromValue(10); // => undefined

return;在函式內部使該函式回傳 undefined,所以 arrayFromValue(10) 的值為 undefined

5. 被考爛的一個經典閉包問題

面試官問

下面的代碼執行結果是什么?(能不能換個題)

let i;
for (i = 0; i < 3; i++) {
  const log = () => {
    console.log(i);
  }
  setTimeout(log, 100);
}

答案

當你對 JS 基礎不是很了解的時候,很容易給出 0, 1, 2 的答案,我第一次在學校遇到這個題目也是這個答案,

執行這段代碼的程序有兩個階段,

階段1

  1. for() 迭代 3 次,在每次迭代時,都會創建一個新函式 log(),該函式將捕獲變數 i,然后,setTimout() 調度 log() 的執行,

  2. for() 回圈完成時,變數 i 的值為 3

log() 是一個捕獲變數 i 的閉包,該變數在 for() 回圈的外部作用域中定義,重要的是要了解閉包在詞法上捕獲了變數 i

階段 2

第二階段發生在 100 毫秒之后

setTimeout()呼叫 3log() 回呼,log() 讀取變數 i 的當前值,即 3

這就是為什么控制臺輸出為 333 的原因

6. 浮點運算

面試官問

下面的代碼輸出是什么? (能不能換個題)

0.1 + 0.2 === 0.3 // => ???

答案

首先,來看一下 0.1 + 0.2 的值

0.1 + 0.2; // => 0.30000000000000004

0.10.2 的和不等于 0.3,但略高于 0.3

由于以二進制方式對浮點數進行編碼,因此像浮點數相加之類的操作會產生舍入誤差,

因此, 0.1 + 0.2 === 0.3false

7. 變數的提升

面試官問

如果在宣告之前訪問 myVarmyConst 會發生什么?(能不能換個題)

myVar;   // => ???
myConst; // => ???

var myVar = 'value';
const myConst = 3.14;    

答案

提升和時間死區是影響 JS 變數生命周期的兩個重要概念,

在宣告之前訪問 myVar 的結果是 undefined,因為使用 var 宣告的變數會被提升且值為 undefined

但是,在宣告行之前訪問 myConst 會引發 ReferenceError,在代碼行 const myConst = 3.14 之前,const 變數處于臨時死區,

本文轉載于:

https://juejin.cn/post/6844903974374473736

如果對您有所幫助,歡迎您點個關注,我會定時更新技術檔案,大家一起討論學習,一起進步,

 

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/554710.html

標籤:JavaScript

上一篇:原生AJAX的學習

下一篇:返回列表

標籤雲
其他(160648) Python(38218) JavaScript(25487) Java(18210) C(15237) 區塊鏈(8270) C#(7972) AI(7469) 爪哇(7425) MySQL(7238) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5873) 数组(5741) R(5409) Linux(5347) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4588) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2435) ASP.NET(2404) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1984) 功能(1967) HtmlCss(1956) Web開發(1951) C++(1933) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1880) .NETCore(1863) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • 記錄--7 個沙雕又帶有陷阱的 JS 面試題

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 為了保證的可讀性,本文采用意譯而非直譯。 在 JS 面試中,經常會看到一些簡單而又沙雕的題目,這些題目包含一些陷阱,但這些在我們規范的編碼下或者業務中基本不會出現。 有些面試官就是這樣,不專注于制定代碼的標準和規范上,卻用不規范的代碼去檢 ......

    uj5u.com 2023-06-09 08:04:33 more
  • 原生AJAX的學習

    基礎知識 知識點梳理見圖: 自己動手實踐案例 案例1: 訪問本地檔案 <!DOCTYPE html> <html> <body> <div id="demo"> <h1>XMLHttpRequest 物件</h1> <button type="button" onclick="loadDoc()"> ......

    uj5u.com 2023-06-09 08:04:19 more
  • 50道常見高頻大廠面試題

    > https://www.bilibili.com/video/BV1os4y1E7YT/?p=15&share_source=copy_web&vd_source=a867c73df17cfff8d16caf9e5b58a1aa ## 給你一個站點目標以后如何滲透? 1. **資訊收集**:收集 ......

    uj5u.com 2023-06-09 08:03:35 more
  • 50道常見高頻大廠面試題

    > https://www.bilibili.com/video/BV1os4y1E7YT/?p=15&share_source=copy_web&vd_source=a867c73df17cfff8d16caf9e5b58a1aa ## 給你一個站點目標以后如何滲透? 1. **資訊收集**:收集 ......

    uj5u.com 2023-06-09 08:02:41 more
  • 原生AJAX案例瀏覽器報錯:Cross origin requests are only support

    報錯資訊如下: 代碼如下: <!DOCTYPE html> <html> <body> <div id="demo"> <h1>XMLHttpRequest 物件</h1> <button type="button" onclick="loadDoc()">更改內容</button> </div> ......

    uj5u.com 2023-06-08 13:41:14 more
  • 文字效果 用背景漸變實作 波浪背景文字

    1. 實作波浪背景 div{ width: 400px; height: 200px; outline: 2px dashed gray; --c: #2196F3; --w1: radial-gradient(100% 57% at top ,#0000 100%,var(--c) 100.5%) ......

    uj5u.com 2023-06-08 13:40:28 more
  • 主動發現系統穩定性缺陷:混沌工程

    這是一篇較為詳細的混沌工程調研報告,包含了背景,現狀,京東混沌工程實踐,希望幫助大家更好的了解到混沌工程技術,通過混沌工程實驗,更好的為系統保駕護航。 ......

    uj5u.com 2023-06-08 13:40:08 more
  • 技術賦能-混流編排功能,助力京東618直播重保

    每每到618、雙11這樣的大型活動的時候,每天都有幾個重要的大v或者品牌直播需要保障。 #### 以往的重點場次監播方式是這么造的: 對每路直播的源流、各檔轉碼流分別起一個ffplay播放視窗,再手動調整尺寸在顯示幕桌面進行布局,排到一屏里來監播。 這樣做的缺點: - 操作復雜,手動調整畫面不美觀 ......

    uj5u.com 2023-06-08 13:40:04 more
  • 主動發現系統穩定性缺陷:混沌工程

    這是一篇較為詳細的混沌工程調研報告,包含了背景,現狀,京東混沌工程實踐,希望幫助大家更好的了解到混沌工程技術,通過混沌工程實驗,更好的為系統保駕護航。 ......

    uj5u.com 2023-06-08 13:37:36 more
  • 使用THREEJS實作一個可調節檔位、可搖頭的電風扇

    夏天到了,用Three.js實作一個可以搖頭和調節檔位的電風扇。主要使用到Blender處理3D模型,用Vite+Typescript搭建專案框架。 ......

    uj5u.com 2023-06-08 09:31:28 more