1. 程式人生 > >牛客網筆試題錯題總結

牛客網筆試題錯題總結

1、關於history物件的屬性和方法的描述

  • length      返回瀏覽器歷史列表中的URL數量
  • back()      載入 history 列表中的前一個URL
  • forward() 載入 history 列表中的下一個URL
  • go()         載入history列表中的某個具體頁面。

2、H5新增的表單元素

 

datalist 元素規定輸入域的選項列表。 keygen 元素的作用是提供一種驗證使用者的可靠方法。 output 元素用於不同型別的輸出

3、

以下元素都是短語元素。雖然這些標籤定義的文字大多會呈現出特殊的樣式,但實際上,這些標籤都擁有確切的語義。

我們並不反對使用它們,但是如果您只是為了達到某種視覺效果而使用這些標籤的話,我們建議您使用樣式表,那麼做會達到更加豐富的效果。

<em> 把文字定義為強調的內容。
把文字定義為語氣更強的強調的內容。
<dfn> 定義一個定義專案。
定義計算機程式碼文字。
<kbd> 定義鍵盤文字。它表示文字是從鍵盤上鍵入的。它經常用在與計算機相關的文件或手冊中。
<var> 定義變數。您可以將此標籤與 <pre> 及 <code> 標籤配合使用。
定義引用。可使用該標籤對參考文獻的引用進行定義,比如書籍或雜誌的標題。

4、看下面程式的顯示結果是什麼?

var x = new Boolean(false);
if (x) {
  alert('hi');
}
var y = Boolean(0);
if (y) {
  alert('hello'); 
}
A、hi      B、hi hello      C、hello   D、不顯示

正確答案:A

解析:此題考查的是 JS 的型別轉換:

if(x) 這裡期望 x 是一個布林型別的原始值,而 x 是一個物件,任何物件轉為布林值,都為得到 true(切記!在 JS 中,只有 0,-0,NaN,"",null,undefined 這六個值轉布林值時,結果為 false)。 題目的第二部分,一定要注意 y = Boolean(0),而不是 y = new Boolean(0)。這兩個有很大區別,用 new 呼叫建構函式會新建一個布林物件,此處沒有加 new,進行的是顯示型別轉換,正如上述第一條所說,0 轉換布林,結果為 false,所以此時 y 的值就是 false。如果加了 new,那麼 y 就是一個 Boolean 型別的物件,執行 if(y) 時,物件轉布林,始終是 true,所以結果會與不加 new 的時候相反。

5、下面關於塊內宣告函式的做法哪些是正確的?

正確答案: B 

if (x) {  function foo() {}}
if (x) {  var foo = function() {}}
if (x) {  foo = function() {}}
ECMAScript明確的規範了塊內函式,javascript實現了這個規範

解析:

不要在塊內宣告一個函式(嚴格模式會報語法錯誤)。如果確實需要在塊中定義函式,可以使用函式表示式來宣告函式。

6、如下程式碼輸出的結果是什麼:

console.log(1+ "2"+"2");

console.log(1+ +"2"+"2");

console.log("A"- "B"+"2");

console.log("A"- "B"+2);
 
A、122 122 NaN NaN
B、122 32 NaN NaN2
C、122 32 NaN2 NaN
D、122 32 NaN2 NaN2

正確答案:C

 解析:

1、console.log(1+ "2"+"2");

做加法時要注意雙引號,當使用雙引號時,JavaScript認為是字串,字串相加等於字串合併。 因此,這裡相當於字串的合併,即為122.

2、console.log(1+ +"2"+"2");

"A"-"B"的運算中,需要先把"A"和"B"用Number函式轉換為數值,其結果為NaN,在剪髮操作中,如果有一個是NaN,則結果是NaN,因此"A"-"B"結果為NaN。第一個+"2"中的加號是一元加操作符,+"2"會變成數值2,因此1+ +"2"相當於1+2=3. 然後和後面的字串“2”相合並,變成了字串"32".

3、console.log("A"- "B"+"2");

然後和"2"進行字串合併,變成了NaN2.

4、console.log("A"- "B"+2);

根據上題所述,"A"-"B"結果為NaN,然後和數值2進行加法操作,在加法操作中,如果有一個運算元是NaN,則結果為NaN。