1. 程式人生 > 實用技巧 >8.29做JS的題目

8.29做JS的題目

1.以下程式碼執行後,console的輸出是?
functionFoo(){
console.log(this.location);
}
Foo();

A.當前視窗的 Location 物件

B.undefined

C.null

D.TypeError

'use strict'條件下,會報TypeError 無'use strict'下,this指向window

2.在 es6 中,下面程式執行結果輸出,選項結果正確的是

i not defined,TypeError,3,12,[2,3,4]

1.let 與var不同,存在塊級作用域,在for迴圈中宣告,迴圈之外銷燬 所以i not defined

2.const 宣告一個常量無法更改,所以TypeError

3.const 宣告的是一個常量所以是無法更改的

const a={x:1};
console.log(a.x);
a.x=5;
console.log(a);//Object {x: 5}

3.

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

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

122

32

NaN2

NaN

1做加法時要注意雙引號,當使用雙引號時,JavaScript認為是字串,字串相加等於字串合併。

因此,這裡相當於字串的合併,即為122.

2.第一個+"2"中的加號是一元加操作符,+"2"會變成數值2,因此1+ +"2"相當於1+2=3.然後和後面的字串“2”相合並,變成了字串"32".

3"A"-"B"的運算中,需要先把"A"和"B"用Number函式轉換為數值,其結果為NaN,在剪髮操作中,如果有一個是NaN,則結果是NaN,因此"A"-"B"結果為NaN。然後和"2"進行字串合併,變成了NaN2.

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

4.下面有關JavaScript中call和apply的描述,錯誤的是?C

A.apply傳入的是一個引數陣列,也就是將多個引數組合成為一個數組傳入

B.call與apply都屬於Function.prototype的一個方法,所以每個function例項都有call、apply屬性

C.兩者傳遞的引數不同,call函式第一個引數都是要傳入給當前物件的物件,apply不是

D.call傳入的則是直接的引數列表。call 方法可將一個函式的物件上下文從初始的上下文改變為由 thisObj 指定的新物件。

call和apply的作用都是改變this作用域,都是在特定作用域中呼叫函式。當一個物件沒有某個方法,而其他物件有,我們就可以使用call或apply實現某個方法的複用.

5.

var a = [1,4,5,2,9];
下面求a中最大值正確的是

Math.max(a)

Array.max(a)

Math.max.call(null,a)

Math.max.apply(null,a)

以上均不是

1.Math.max不能接受一個數組作排除A 2.array沒有max()方法排除B 3.call第二個引數不能為陣列排除C

6.在javascript中,()變數在函式外宣告,並可從指令碼的任意位置訪問 B

A.區域性

B.全域性

C.typeOf

D.New

7.語句var arr=[a,b,c,d];執行後,陣列arr中每項都是一個整數,下面得到其中最大整數語句正確的是哪幾項?

A.Math.max(arr)

B.Math.max(arr[0], arr[1], arr[2], arr[3])

C.Math.max.call(Math, arr[0], arr[1], arr[2], arr[3])

D.Math.max.apply(Math,arr)

Math.max(args...)傳入引數是任意數量的值 A 傳入陣列,所以錯誤 B 可以 C Function.call()可以傳入任意多個引數,C正確 D Function.apply()第二個引數以陣列形式傳遞,D正確

8.在大資料量場景下,以下哪種js中字串連線方式較為高效()

a+=b

a=a+b

Array.join()

Array.push()

+的處理機制是:新建一個臨時字串,將新字串賦值為a+b,然後返回這個臨新字串並同時銷燬原始字串,所以字串連線效率較低。所以用Array.join()不會新建臨時字串效率更高。 (當然以上效率問題僅存在於低版本瀏覽器ie7-及以下,現在的新瀏覽器基本上都解決了這個問題,效率差不多) 所以在面試時遇到這種題時告訴面試官分兩種情況: 舊瀏覽器(ie7-)下用join()會高效,而新版本瀏覽器下除了做變數快取外不需要做別的優化。這樣可以側面表達對劉拉你相容有所瞭解。 C

9.解釋型語言的特性有什麼?

非獨立:JavaScript語言依賴執行環境,對於客戶端來說是瀏覽器,對於服務端來說是node。 效率低:執行前不需要編譯,執行時才編譯,因此效率低。 解釋性語言和編譯性語言的定義:

計算機不能直接理解高階語言,只能直接理解機器語言,所以必須要把高階語言翻譯成機器語言,計算機才能執行高階語言編寫的程式。
翻譯的方式有兩種,一個是編譯,一個是解釋。兩種方式只是翻譯的時間不同。

解釋性語言的定義:
解釋性語言的程式不需要編譯,在執行程式的時候才翻譯,每個語句都是執行的時候才翻譯。這樣解釋性語言每執行一次就需要逐行翻譯一次,效率比較低。
現代解釋性語言通常把源程式編譯成中間程式碼,然後用直譯器把中間程式碼一條條翻譯成目標機器程式碼,一條條執行。

編譯性語言的定義:
編譯性語言寫的程式在被執行之前,需要一個專門的編譯過程,把程式編譯成為機器語言的檔案,比如exe檔案,以後要執行的話就不用重新翻譯了,直接使用編譯的結果就行了(exe檔案),因為翻譯只做了一次,執行時不需要翻譯,所以編譯型語言的程式執行效率高。

10.以下哪些語句觸發了隱式的型別轉換?

parseInt(12.34, 10)
0 ? 1 : 2
2e1 * 0xaa
1 + '1'
  1. parseInt() 函式可解析一個字串,並返回一個整數。
    所以說,number型別的12.34發生隱式轉換為string。
  2. 三元運算子,會判斷?前的表示式為true或者false。所以number型別的0發生了隱式轉換為boolean。
  3. +運算髮生了字串的隱式轉化。原本number型別的1,和string型別的'1'進行了+運算,連線了字串。返回'11'。
    • C選項:
      e是js裡面指數的一種表示形式。也就是10的多少次方。
      2e1 等價於 2 *(10^1) = 20
      2e2 等價於 2 *(10^2)= 200
      0xaa是16進位制的表示方法。相當於十進位制的170。
      這裡都是number型別,發生了數字的乘法運算:20*170,沒有發生型別轉換。