Javascript面試寶典之ES6系列40道基礎題(含答案)

1.下面不屬於ECMAScript規範的範圍的是:( )

A、數據類型

B、語法

C、DOM事件

D、內置對象和函數的標準庫

答案:C

解析:DOM事件不屬於ECMAScript的部分;ECMAScript定義的內容:語法、類型、原型和繼承、內置對象和函數的標準庫。

考點: ECMAScript定義規範的理解

2.下面不屬於關鍵字let的特點的是:( )

A、只在 let 命令所在的代碼塊內有效

B、會產生變量提升現象

C、同一個作用域,不能重複聲明同一個變量

答案:B

解析:使用var關鍵字才會產生變量提升的現象。關鍵字let不會產生變量提升現象,所以必須先聲明定義後使用,否則程序拋出異常。

考點:關鍵字let的使用注意事項

3.關於關鍵字const,下列說法錯誤的是:()

B、不會發生變量提升現象

答案:D

解析:聲明後必須賦值,負責程序會拋出異常。

考點:關鍵字const的使用注意事項

4.在數組的解構賦值中,var [ a,b,c ] = [ 1,2 ]結果中,a、b、c的值分別是:()

A、1 2 null

B、1 2 undefined

C、1 2 2

D、拋出異常

答案:B

解析:在解構賦值過程中,賦值不成功,變量的值會變成undefined,不會拋出異常。

考點:數組的結構賦值使用注意事項

5.在對象的解構賦值中,var {a,b,c} = { “c”:10, ”b”:9, ”a”:8 } 結果中,a、b、c的值分別是:()

A、10 9 8

B、8 9 10

C、undefined 9 undefined

D、null 9 null

答案:B

解析:對象的解構賦值不會受到屬性的排列次序影響。

考點:對象解構賦值和數組解構賦值的區別

6.關於模板字符串,下列說法不正確的是:()

A、使用反引號標識

B、插入變量的時候使用${ }

C、所有的空格和縮進都會被保留在輸出中

D、${ }中的表達式不能是函數的調用

答案:D

解析:${ }中可以放任意的JavaScript表達式,包括運算表達式、對象屬性、函數調用等。

考點:模板字符串的特點

7.關於字符串擴展的新函數,下面描述錯誤的是:()

A、includes函數用於判斷字符串中是否含有指定的子字符串

B、repeat函數將目標字符串重複N次,目標字符串被修改

C、startsWidth函數判斷指定的子字符串是否出現在目標字符串頭部位置

D、endWidth函數判斷指定的子字符串是否出現在目標字符串尾部位置

答案:B

解析:repeat函數將目標字符串重複N次,會返回一個新的字符串,不影響目標字符串。

考點:String字符串的新特性repeat函數的使用

8.關於數值的擴展,window.isNaN(“abc”) 和Number.isNaN(“abc”)的結果分別是:()

A、true false

B、false true

C、true true

D、false false

答案:A

解析:window.isNaN函數會把非數值的參數轉化成數值再進行判斷,而Number. isNaN只對數值類型有效,非數值類型的參數一律返回false。

考點:isNaN函數從全局函數移植到Number對象後的區別

9.關於數值擴展的Number.isInteger函數,下面說法錯誤的是:()

A、用來判斷是否是整數,返回布爾值。

B、Number.isInteger(3);結果為:true

C、Number.isInteger(3.0);結果為:false

D、Number.isInteger(3.01);結果為:false

答案:C

解析:在JavaScript內部對整數和浮點數採用一樣的存儲方式,因此小數點後如果都是0的浮點數,都會被認為是整數。

考點:Number.isInteger函數使用的注意事項

10.數組擴展的fill( )函數,[1,2,3].fill(4)的結果是:()

A、[4]

B、[1,2,3,4]

C、[4,1,2,3]

D、[4,4,4]

答案:D

解析:fill函數的參數會把原數組的每個元素填充成指定的參數。

考點:對fill( )函數的瞭解和使用

11.數組的擴展中,不屬於用於數組遍歷的函數的是:()

A、keys( )

B、entries( )

C、values( )

D、find( )

答案:D

解析:find函數用於找出數組中符合條件的第一個元素,並不是用於遍歷數組。

考點:利用數組的新特性來實現數組的遍歷

12.關於對象的擴展,錯誤的是:()

A、ES6中對象的表示法更加簡潔

B、對象的屬性名可以是表達式

C、對象的方法名不可以是表達式

D、當屬性名為表達式的時候,需要使用[ ]標識

答案:C

解析:對象的方法名同樣可以是表達式,使用[ ]標識。

考點:對象的新特性的使用注意事項

13.關於對象的Object.is函數,錯誤的是:()

A、用於判斷兩個值是否嚴格相等

B、用於判斷兩個值是否抽象相等

C、Object.is(3,'3') 結果是:false

D、Object.is(3,3.0) 結果是:true

答案:B

解析:Object.is函數判斷兩個值是否嚴格相等,或者說全等,作用等同於全等符號:===

考點:Object.is函數的瞭解和使用注意事項

14.函數的擴展中,關於rest參數的描述,正確的是:()

A、獲取函數剩下部分的參數

B、rest參數不可以是函數的最後一個參數

C、獲取函數的第一個參數

D、一個名叫rest的參數

答案:A

解析:rest參數用於表示且必須是函數的最後一個函數,後面不可以再跟其他參數,故B選項是錯的。它的表示法表示法使用...(三個點)+ 自定義的參數名,故D選項是錯的

考點:rest參數的理解和使用

15.關於箭頭函數的描述,錯誤的是:()

A、使用箭頭符號=>定義

B、參數超過1個的話,需要用小括號()括起來

C、函數體語句超過1條的時候,需要用大括號{ }括起來,用return語句返回

D、函數體內的 this 對象,綁定使用時所在的對象

答案:D

解析:函數體內的 this 對象,綁定定義時所在的對象,而不是使用時所在的對象。這點很重要,連載第十節的時候還特意加了一節講這個內容。

考點:箭頭函數的使用注意事項

16.關於Symbol,錯誤的說法是:()

A、是ES6新增的一種數據類型

B、Symbol() === Symbol() 結果為false

C、Symbol('same') === Symbol('same') 結果為true

D、當symbol值作為對象的屬性名的時候,不能用點運算符獲取對應的值。

答案:C

解析:symbol是獨一無二的值,雖然它們的描述都是“'same'”,但是對應的值還是不一樣的,所以結果為:false。

解析:關於Symbol的使用注意事項

17.下面運算結果,結果為true的是:()

A、Symbol.for('name') == Symbol.for('name')

B、Symbol('name') == Symbol.for('name')

C、Symbol('name') == Symbol('name')

D、Symbol.for('name') == Symbol('name')

答案:A

解析:Symbol.for函數會根據參數名,去全局環境中搜索是否有以該參數為名的symbol值,有就返回它,沒有就以該參數名來創建一個新的symbol值,並登記在全局環境中,而Symbol每次都會創建一個獨一無二的值,不會登記在全局環境中。

解析:Symbol和Symbol.for創建變量的區別

18.關於Proxy代理,下面說法錯誤的是:()

A、可以理解成在目標對象之前,架設一層“攔截”

B、Proxy的get 方法用於攔截某個屬性的讀取操作。

C、Proxy的set方法用於攔截對對象的寫操作。

D、一旦對象設置Proxy代理後不可取消,所以要謹慎操作

答案:D

解析:可以用Proxy.revocable( )來取消代理,並不是不可以取消的。

考點:Proxy代理的設置和取消代理

19.關於for...of的簡述,說法錯誤的是:()

A、它可以遍歷所有具有iterator 接口的數據結構

B、不可以用break來終止循環

C、使用continue可以跳過當前循環

D、可以遍歷DOM list對象

答案:B

解析:for...of可以用break來終止循環,而傳統的forEach則不可以用break終止循環,這正是for...of相對forEach的優勢

考點:for...of遍歷相對於傳統便利方式的優勢

20.關於set結構,下面說法錯誤的是:()

A、創建一個實例需要用new關鍵字

B、結構成員都是唯一的,不允許重複

C、使用add方法添加已經存在的成員會報錯

D、初始化的時候接受數組作為參數

答案:C

解析:使用add方法添加已經存在的成員,會自動忽略相同的值,相同的值保留一個。

考點:set結構的特點

21.關於Set結構的實例方法,下面說法錯誤的是:()

A、set方法用於添加成員

B、clear方法用於清除所有成員。

C、entries方法返回成員的位置索引和值的遍歷器

D、values方法返回成員值的便利器

答案:C

解析:返回的是鍵名和鍵值的遍歷器;特別注意的是:set結構的鍵名和鍵值是同一個值。

考點:set結構鍵名和鍵值的特點

22.關於WeakSet結構,說法錯誤的是:()

A、與Set結構一樣,成員值都是唯一

B、成員值必須是對象

C、WeakSet 中的對象都是弱引用

D、可以forEach( )方法實現遍歷

答案:D

解析:WeakSet結構是不可遍歷的,所以它不存在forEach方法,以及keys()、values()、entries()方法,這是它和Set結構不同處之一。

考點:Set和WeakSet的不同點

23.關於Map結構的介紹,下面說法錯誤的是:()

A、是鍵值對的集合

B、創建實例需要使用new關鍵字

C、Map結構的鍵名必須是引用類型

D、Map結構是可遍歷的

答案:C

解析:鍵名可以是任何數據類型,這是Map結構的最大特性,也是Map結構和傳統對象Object最大的區別。

考點:Map結構的鍵名特點

24.下列Map結構的鍵名數據類型,描述錯誤的是:()

A、鍵名可以是數組類型的值

B、鍵名可以是Symbol類型的值

C、鍵名值可以是null

D、鍵名值不可以為undefined

答案:D

解析:undefined也可以做為Map結構的鍵名。

考點:Map結構鍵名的值類型

25.關於WeakMap結構,下列說法錯誤的是:()

A、創建實例需要使用new關鍵字

B、鍵名可以是任何類型的值

C、WeakMap結構不支持clear方法

D、WeakMap結構不可遍歷

答案:B

解析:WeakMap結構的鍵名必須是引用類型的值,也是它和Map最大不同之處。

考點:Map和WeakMap的不同點

26.ES6的新特性Promise對象的設計初衷是:()

A、 更好地實現遍歷具有iterator接口的數據結構

B、 為對象的操作增加了一層“攔截”

C、 獨一無二的值,用於對象屬性,避免屬性名衝突

D、 讓開發者更合理、更規範地用於處理異步操作

答案:D

解析:遍歷具有iterator接口的數據結構是for...of的作用;為對象的操作增加了一層“攔截”是Proxy代理的設計初衷;獨一無二的值,避免屬性名衝突是Symbol的設計初衷。而D選項,是Promise對象的設計初衷。

考點:Promise對象的作用

27.關於Promise對象的狀態,下列說法錯誤的是:()

A、 三種狀態分別是:pending初始狀態、fulfilled成功、rejected失敗

B、 pending初始狀態可以狀變成fulfilled成功

C、 rejected失敗不可以狀變成pending初始狀態

D、 rejected失敗可以狀變成fulfilled成功

答案:D

解析:A、B、C的說法都是正確的,rejected失敗和fulfilled成功之間不能相互轉換,故D選項是錯誤的。

考點:Promise對象三種狀態的轉換關係

28.下面關於類class的描述,錯誤的是:()

A、 JavaScript的類class本質上是基於原型prototype的實現方式做了進一步的封裝

B、 constructor構造方法是必須的

C、 如果類的constructor構造方法有多個,後者會覆蓋前者

D、 類的靜態方法可以通過類名調用,不需要實例化

答案:C

解析:同一個類的constructor構造方法只能有一個,否則程序會報錯。

29.JavaScript中類的繼承使用的關鍵字是:()

A、 extends

B、 inherit

C、 extend

D、 base

答案:A

解析:extends才是JavaScript中類的繼承關鍵字,其他的選項都不是。

考點:類的繼承知識

30.在類的繼承中,關於super的說法錯誤的是:()

A、 在子類的構造函數,必須先調用super( )

B、 super相當於子類的引用

C、 先調用super( ),才可以使用this

D、 super( )相當於父類構造函數的調用

答案:B

解析:super是父類的引用,我們可以通過super來調用父類的方法和屬性。

考點:類的繼承

31.下列數據結構中,不能被for...of遍歷的是:()

A、 Array數組

B、 Object對象

C、 String字符串

D、 Set結構

答案:B

解析:只有該數據結構實現了Iterator遍歷器接口才可以被for...of遍歷,而數組,字符串,Set和Map結構正式這樣的可遍歷對象。而普通的Object對象並沒有實現Iterator遍歷器接口。

考點:具有Iterator接口可遍歷對象

32.關於Iterator遍歷器的說法,錯誤的是:()

A、next( )方法是Iterator遍歷器的核心

B、當next( )返回對象的done屬性為fasle,遍歷結束

C、具有Iterator接口的對象視為可遍歷對象

D、可以自定義一個可遍歷對象和其遍歷行為

答案:B

解析:當next( )返回對象的done屬性為fasle,表示遍歷未結束,done屬性為true時,表示遍歷結束。

考點:Iterator遍歷器的原理

33.關於新特性Generator函數的描述,錯誤的是:()

A、Generator函數,又稱生成器函數

B、聲明Generator函數的關鍵字是:function*

C、Generator函數執行後得到的一個生成器

D、使用return語句使Generator函數暫停執行,直到next方法的調用

答案:D

解析:使函數暫停執行的關鍵字是yield,不是return;return語句是使函數停止執行並退出。

考點:Generator函數的特點

34.Generator函數的yield關鍵字的作用是:()

A、停止執行

B、退出函數

C、暫停執行,等待next( )方法調用

D、停止執行,可自行恢復執行

答案:C

解析:Generator函數可以有很多個yield。而return代表的是終止執行,yield代表的是暫停執行,後續通過調用生成器的next( )方法,可以恢復執行。

考點:yield關鍵字的關鍵字

35.在Generator函數中,yield*語句的作用是:()

A、調用另外的Generator函數

B、暫停執行,待next( )方法調用後恢復

C、停止執行,退出函數

D、調用任意的其他函數

答案:A

解析:關鍵字yield*來實現調用另外的Generator函數。如果一個Generator函數A執行過程中,進入(調用)了另一個Generator函數B,那麼會一直等到Generator函數B全部執行完畢後,才會返回Generator函數A繼續執行。

考點:關鍵字yield*的作用

36.關於ES6的module模塊,下列說法錯誤的是:()

A、可以有效解決大型系統文件複雜的依賴問題

B、使用export語句可以選擇性地向外部暴露自己的屬性或者方法

C、使用import語句導入其他模塊的屬性或者方法

D、目前大部分主流瀏覽器都支持module模塊

答案:D

解析:目前(2016年上半年)還沒有瀏覽器支持module模塊的開發,需要藉助轉碼工具才可以使用。A選項是ES6的設計初衷之一,B選項是export語句的正確描述,C選項是import語句的正確描述。

考點:module模塊的使用和實現

37.module模塊中,對下列語句的描述,錯誤的是:()

A、export 導出

B、import 導入

C、export default 默認導出

D、import * as 重命名

答案:D

解析:import * as:星號符*實現的是整體導入。而重命名的實現方式是:import { name as myname }。

考點:module模塊的關鍵字語句含義

38.module模塊中的注意事項,下列說法錯誤的:()

A、除了對象類型以外,導出的屬性對外都是隻讀的

B、導入不存在的變量,值為undefined

C、導入不存在的變量,程序會拋出異常

D、可以為導入的屬性和方法取任意名字

答案:C

解析:導入不存在的變量,程序不會拋出異常,只是值為undefined。

考點:module模塊的注意事項

39.想要獲取Map實例對象的成員數,利用的屬性是:()

A、size

B、length

C、sum

D、members

答案:A

解析:屬性就是size:獲取實例的成員數,其他選項都不是,很多初學者誤以為是length。

考點:Map結構的知識點

40.關於定義常量的關鍵字const,定義一個Object對象{“name”:”Jack”},再對屬性name 的值進行修改,如:obj.name = “John”。下列說法正確的:()

A、修改常量,程序跑出異常

B、程序不拋出異常,修改無效

C、修改成功,name的值為John

D、程序不拋出異常,name的值為undefined

答案:C

解析:用const來聲明一個對象類型的常量,就是傳址賦值。而不可修改的是對象在內存中的地址,而不是對象本身。所以修改name並不是修改對象的內存地址,所以可以成功修改。

考點:const定義一個對象時候的注意事項


分享到:


相關文章: