牛客網筆試題錯題總結
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。