close
文章出處

題目1

咋一看這題目,還以為答案選擇B呢,其實正確答案為D,知道原因嗎?接著往下看

map對數組的每個元素調用定義的回調函數并返回包含結果的數組,咋一看還以為它會像如下這樣執行:

function testFuc(a){
        return parseInt(a);
}
console.info(["1","2","3"].map(testFuc));

但事實上,map中回調函數的語法如下所示:function callbackfn(value, index, arr),可使用最多三個參數來聲明回調函數。第一參數value,數組元素的值;第二個參數index,數組元素的數組所以;arr,包含該元素的數組對象。

所以事實上題目執行的原理如下所示:

function testFuc(a,x){
        return parseInt(a,x);
}
console.info(["1","2","3"].map(testFuc));

也就是[parseInt(1,0),parseInt(2,1),parseInt(3,2)]  所以最終答案是[1, NaN, NaN]

 

題目2

這個題目相對來說比較簡單,答案為A

typeof用以獲取一個變量或者表達式的類型,typeof一般只能返回如下幾個結果:number,boolean,string,function(函數),object(NULL,數組,對象),undefined。

instanceof 表示某個變量是否是某個對象的實例,null是個特殊的Object類型的值 ,表示空引用的意思 。但null返回object這個其實是最初JavaScript的實現的一個錯誤 

題目3

其實這個題目前面一部分的執行原理如下所示(pow() 方法可返回 x 的 y 次冪的值):

function testFuc(x,y){
        console.info(x +" : "+y);
        return Math.pow(x,y);
}
console.info([3,2,1].reduce(testFuc));

但是要注意pow的參數都是必須的,[].reduce(Math.pow),等同于執行Math.pow();會導致錯誤

所以題目的答案為A

題目4

這個題目相信大家多會,題目會先執行字符串拼接,再執行三則運算,所以答案為A

題目5

相信大家看到湯姆大叔的JavaScript系列文章就知道js有變量提前聲明,但不會提前賦值

所以上述的答案是A

題目6

這個題目,我到現在也沒明白原因,但是書上解釋是說:

filter會接觸到沒有被賦值的元素,即在arr中,長度為10但實際數值元素列表為[0, 1, 2, 10],因此,最終返回一個空的數組[]

所以正確的答案為C

題目7

題目答案是C

大家都知道兩個浮點數相加或者相減,將會導致一定的正常的數據轉換造成的精度丟失問題eight-six = 0.20000000000000007。

JavaScript中的小數采用的是雙精度(64位)表示的,由三部分組成: 符 + 階碼 + 尾數,在十進制中的 1/10,在十進制中可以簡單寫為 0.1 ,但在二進制中,他得寫成:0.0001100110011001100110011001100110011001100110011001…..(后面全是 1001 循環)。因為浮點數只有52位有效數字,從第53位開始,就舍入了。這樣就造成了“浮點數精度損失”問題。 

更嚴謹的做法是(eight-six ).toFiexd(1)或者用用Math.round方法回歸整數運算。

判斷兩個浮點數是否相等,還是建議用逼近的比較,比如if((a-b) < 1E-10)

題目8

可能大家都認為答案是A,可偏偏答案是C,為什么呢,事實上你可以在函數內把value的值打印出來就知道傳進去的到底是一個什么

使用new String(),使用構造函數調用,將一個全新的對象作為this變量的值,并且隱式返回這個新對象作為調用的結果

題目9

相信如果弄懂上面一題,這題目根本就太容易了,答案是A

直接調用String("A")創建的變量和"A"無異。

題目10

看了這題目有點暈,但是事實上

function isSane(num){
  return isEven(num)||isOdd(num);
}

該函數判斷num是否為正整數,'13'被強制轉換為數值13,-9%2結果為-1,Infinity %2為NaN

所以答案為C

題目11

答案為D

 parseInt() 函數可解析一個字符串,并返回一個整數。當參數 radix 的值為 0,或沒有設置該參數時,parseInt() 會根據 string 來判斷數字的基數。

題目12

答案為A

在此特意說明一下,

Array.prototype為[],Array.isArray(a)是一個判斷a是否為數組的方法

判斷對象是否為數組的方法:

1)ES5函數isArray(),該函數測試對象的內部[[Class]]屬性是否為Array:
  Arrray.isArray(a);
2)判斷對象的構造函數是否為Array:
  a.constructor === Array
3)使用對象內部[[Class]]屬性創建結果字符串:
  Object.prototype.toString.call(a)
4)使用instanceof操作符測試對象是否繼承自Array:(但由于,一個頁面的iframe不會繼承自另外一個頁面的iframe,該方法不可靠)
  a instanceof Array

題目13

這個相對來說挺簡單的,你稍微仔細一點就會了,看看你做對了沒

在if條件判斷語句相對于==比較寬松中,只要if(n),n不為null,0,undefined數值,都會轉換為true。進入console.info(a == true);最終返回false

也就是說答案為B

題目14

這個答案為B,是因為數組在 Javascript 中是對象,對象使用 == 比較都是比較的引用。簡單的說,就是,如果是同一個對象,就相等,如果不是同一個對象,就不等。每次使用 [] 都是新建一個數組對象,所以 [] == [] 這個語句里建了兩個數據對象,它們不等。

題目15

這個相信你只要懂JavaScript中的+號運算肯定能做對答案,答案是A

執行'5'+3,加號具備拼接字符串功能,會將3強制轉換為字符串'3'和'5'拼接。

執行'5'-3,減號只具備數值運算的功能,因此會將'5'轉化為數值,進行5-3的數值運算

題目16

答案為D

區分賦值和聲明。雖然var arr = Array(3);但它只創建一個長度為3的數組,后面的那句話才只為第一個元素賦值,因此arr的實際長度為1,即最終參與map的只有一個元素,結果返回

題目17

最終結果為10+1+10

所以答案為D

題目18

答案為B,您猜對了嗎??

原因是javascript的精確整數最大為:Math.pow(2,53)-1 =9007199254740991.

var a = 111111111111111110000,
 max = 9007199254740992;

a的值大于javascript所能表示的最大整數精度,因此和任何數值相加將會導致失真。

題目19

大家在控制臺里面一測試就知道了

所以正確的調用方式應該是:x.call([])

答案不言而喻為C

題目20

在JavaScript中,Number.MIN_VALUE表示的最小值為5e-324,MIN_VALUE代表的并不是負最小,而是最接近0的一個數,因此Number.MIN_VALUE>0。

負最小值可以使用-Number.MAX_VALUE表示。

答案為A

題目21

這個不多說,答案為A

1<2,返回true,執行true<3,會強制將true轉換為1,1<3,最終返回true。

3<2,返回false,執行false<1,會強制將false轉換為0,0<1,最終返回true。

題目22

使用a==b判斷a和b對象是否相等,可以會將b對象強制轉換為a對象的類型,即執行2 == [[[2]]],會隱式調用parseInt([[[2]]])將[[[2]]]強制轉化為數字基本量,即2,2==2,最終返回true。

引用評論的一番話:

console.info([[2]]==2); //true
console.info([[2,2]]==2); //false
console.info(parseInt([[2,2]])); //2

可以說
如果數組中只有單個字符的話 隱式調用parseInt

答案為A

題目23

在立即調用函數內執行,var x1 =y1 =1;創建局部變量x1和全局變量y1。函數外部試圖訪問函數內部的變量,將會導致錯誤。

所以答案選擇C


不含病毒。www.avast.com
arrow
arrow
    全站熱搜

    AutoPoster 發表在 痞客邦 留言(0) 人氣()