摘要:最近做了個(gè)上的的測(cè)試題目地址,錯(cuò)了一大堆,感覺(jué)的概念還有很多不是很清晰,這里記錄一下個(gè)人博客文章地址第一題解答這里考的是的用法。如果出現(xiàn)的數(shù)字不符合后面輸入的進(jìn)制,則為,所以第二個(gè)值為。
最近做了個(gè)heroku上的JavaScript的測(cè)試(題目地址),錯(cuò)了一大堆,感覺(jué)js的概念還有很多不是很清晰,這里記錄一下
個(gè)人博客文章地址
第一題What is the result of this expression? (or multiple ones)
["1", "2", "3"].map(parseInt)
A:["1", "2", "3"]
B:[1, 2, 3]
C:[0, 1, 2]
D:other
解答:這里考的是map、parseInt的用法。map會(huì)傳遞三個(gè)參數(shù)給其作為參數(shù)的函數(shù),為(element, index, array),分別為當(dāng)前的元素、當(dāng)前元素在數(shù)組中的位置、整個(gè)數(shù)組:
> ["1", "2", "3"].map(function(){console.log(arguments)}) ["1", 0, Array[3]] ["2", 1, Array[3]] ["3", 2, Array[3]]
而parseInt只接收兩個(gè)參數(shù),為(element, radix),element代表需要被轉(zhuǎn)換為int的字符串,radix代表當(dāng)前字符串里數(shù)字的進(jìn)制數(shù)
所以相當(dāng)于說(shuō),結(jié)果數(shù)組的元素實(shí)際分別為為:
parseInt("1", 0) parseInt("2", 1) parseInt("3", 2)
parseInt("1", 0)的值為1,MDN上可以看到parseInt函數(shù)的radix為0時(shí)的行為
If radix is undefined or 0 (or absent), JavaScript assumes the following:
If the input string begins with "0x" or "0X", radix is 16 (hexadecimal) and the remainder of the string is parsed.
If the input string begins with "0", radix is eight (octal) or 10 (decimal). Exactly which radix is chosen is implementation-dependent. ECMAScript 5 specifies that 10 (decimal) is used, but not all browsers support this yet. For this reason always specify a radix when using parseInt.
If the input string begins with any other value, the radix is 10 (decimal).
所以這里radix值實(shí)際為10,所以結(jié)果為1
而parseInt("2", 1)和parseInt("3", 2)則確實(shí)無(wú)法解析,會(huì)生成NaN
所以答案為[1,NaN,NaN],為D
第二題和第五題What is the result of this expression? (or multiple ones)
[typeof null, null instanceof Object]
A: ["object", false]
B: [null, false]
C: ["object", true]
D: other
考察typeof運(yùn)算符和instanceof運(yùn)算符,上MDN上看一下typeof運(yùn)算符,一些基礎(chǔ)類(lèi)型的結(jié)果為:
Undefined "undefined"
Null "object"
Boolean "boolean"
Number "number"
String "string"
Any other object "object"
Array "object"
自從javascript創(chuàng)造出來(lái),typeof null的值就是object了
而null instanceof 任何類(lèi)型 都是false
所以答案為["object", false], 選A
第三題What is the result of this expression? (or multiple ones)
[ [3,2,1].reduce(Math.pow), [].reduce(Math.pow)] ]
A: an error
B: [9, 0]
C: [9, NaN]
D: [9, undefined]
這題考的Math.pow和Array.prototype.reduce
Math.pow(base, exponent)接受兩個(gè)參數(shù):基數(shù)、需要計(jì)算的次方
reduce傳遞給其作為參數(shù)的函數(shù)幾個(gè)值:
* previousValue:上一次計(jì)算的結(jié)果
* currentValue:當(dāng)前元素的值
* index: 當(dāng)前元素在數(shù)組中的位置
* array:整個(gè)數(shù)組
reduce本身接受兩個(gè)參數(shù),callback和initialValue,分別是reduce的回調(diào)函數(shù)和計(jì)算初始值--也就是第一次reduce的callback被調(diào)用時(shí)的previousValue的值,默認(rèn)為0
reduce在數(shù)組為空且沒(méi)有定義initialValue時(shí),會(huì)拋出錯(cuò)誤,如chrome下:TypeError: Reduce of empty array with no initial value
所以選A
第四題What is the result of this expression? (or multiple ones)
var val = "smtg"; console.log("Value is " + (val === "smtg") ? "Something" : "Nothing");
A: Value is Something
B: Value is Nothing
C: NaN
D: other
這題考的javascript中的運(yùn)算符優(yōu)先級(jí),MDN傳送門(mén),這里"+"運(yùn)算符的優(yōu)先級(jí)要高于"?"所以運(yùn)算符,實(shí)際上是 "Value is true"?"Something" : "Nothing",當(dāng)字符串不為空時(shí),轉(zhuǎn)換為bool為true,所以結(jié)果為"Something",選D
第六題What is the result of this expression? (or multiple ones)
var name = "World!"; (function () { if (typeof name === "undefined") { var name = "Jack"; console.log("Goodbye " + name); } else { console.log("Hello " + name); } })();
A: Goodbye Jack
B: Hello Jack
C: Hello undefined
D: Hello World
這題考的是javascript作用域中的變量提升,javascript的作用于中使用var定義的變量都會(huì)被提升到所有代碼的最前面,于是乎這段代碼就成了:
var name = "World!"; (function () { var name;//現(xiàn)在還是undefined if (typeof name === "undefined") { name = "Jack"; console.log("Goodbye " + name); } else { console.log("Hello " + name); } })();
這樣就很好理解了,typeof name === "undefined"的結(jié)果為true,所以最后會(huì)輸出"Goodbye Jack",選A
第七題What is the result of this expression? (or multiple ones)
var END = Math.pow(2, 53); var START = END - 100; var count = 0; for (var i = START; i <= END; i++) { count++; } console.log(count);
A: 0
B: 100
C: 101
D: other
這題考查javascript中的數(shù)字的概念:首先明確一點(diǎn),javascript和其他語(yǔ)言不同,僅有一種數(shù)字,IEEE 754標(biāo)準(zhǔn)的64位浮點(diǎn)數(shù),能夠表示的整數(shù)范圍是-2^53~2^53(包含邊界值),所以Math.pow(2, 53)即為javascript中所能表示的最大整數(shù),在最大整數(shù)在繼續(xù)增大就會(huì)出現(xiàn)精度丟失的情況,END + 1 的值其實(shí)是等于END的,這也就造成了死循環(huán),所以選D
第八題What is the result of this expression? (or multiple ones)
var ary = [0,1,2]; ary[10] = 10; ary.filter(function(x) { return x === undefined;});
A: [undefined × 7]
B: [0, 1, 2, 10]
C: []
D: [undefined]
考查Array.prototype.filter方法的使用,MDN上有這么一句it is not invoked for indexes which have been deleted or which have never been assigned values,所以結(jié)果為空數(shù)組,選C
第九題What is the result of this expression? (or multiple ones)
var two = 0.2 var one = 0.1 var eight = 0.8 var six = 0.6 [two - one == one, eight - six == two]
A: [true, true]
B: [false, false]
C: [true, false]
D: other
浮點(diǎn)數(shù)計(jì)算時(shí)的精度丟失問(wèn)題,其他語(yǔ)言也會(huì)出現(xiàn)...至于結(jié)果,反正我是蒙的...chrome中計(jì)算出來(lái)的結(jié)果:[0.1, 0.20000000000000007],也就是[true, false],選C
第十題What is the result of this expression? (or multiple ones)
function showCase(value) { switch(value) { case "A": console.log("Case A"); break; case "B": console.log("Case B"); break; case undefined: console.log("undefined"); break; default: console.log("Do not know!"); } } showCase(new String("A"));
A: Case A
B: Case B
C: Do not know!
D: undefined
這題考的是使用new方法創(chuàng)建基礎(chǔ)類(lèi)型,使用new方法創(chuàng)建的基礎(chǔ)類(lèi)型,首先來(lái)看個(gè)栗子(chrome):
> typeof new String("skyinlayer"); "object" typeof "skyinlayer"; "string"
這樣基本上就能看到結(jié)果了,但是為什么呢?MDN上的解釋是,字符串字面量和直接調(diào)用String()方法(不使用new調(diào)用構(gòu)造函數(shù))的結(jié)果是原始字符串。JS自動(dòng)回轉(zhuǎn)化原始字符串到String對(duì)象。所以可以在原始字符串上使用用String對(duì)象的方法。而在上下文中,在原始字符串的方法被調(diào)用或者從其中獲取屬性時(shí),JS會(huì)自動(dòng)包裹原始字符串然后調(diào)用方法或者獲取屬性。
所以呢,JS本身有原始字符串和字符串對(duì)象之分,只不過(guò)在調(diào)用方法和獲取屬性時(shí)的時(shí)候會(huì)自動(dòng)轉(zhuǎn)換,但typeof運(yùn)算符運(yùn)算時(shí)是不會(huì)轉(zhuǎn)換的。Number和Boolean同樣適用
所以這里結(jié)果為Do not know!,選C
第十一題What is the result of this expression? (or multiple ones)
function showCase2(value) { switch(value) { case "A": console.log("Case A"); break; case "B": console.log("Case B"); break; case undefined: console.log("undefined"); break; default: console.log("Do not know!"); } } showCase(String("A"));
A: Case A
B: Case B
C: Do not know!
D: undefined
和上題原理一樣,不過(guò)這里沒(méi)有使用new來(lái)生成字符串,所以生成的結(jié)果就是原始字符串,相當(dāng)于showCase("A"),所以結(jié)果就是A了
第十二題What is the result of this expression? (or multiple ones)
function isOdd(num) { return num % 2 == 1; } function isEven(num) { return num % 2 == 0; } function isSane(num) { return isEven(num) || isOdd(num); } var values = [7, 4, "13", -9, Infinity]; values.map(isSane);
A: [true, true, true, true, true]
B: [true, true, true, true, false]
C: [true, true, true, false, false]
D: [true, true, false, false, false]
還是JS的數(shù)字相關(guān),不過(guò)這次考察的是取模,這題我也是瞎蒙的(果斷跪了)。
前兩個(gè)基本上沒(méi)什么疑問(wèn),必然是true
"13"在進(jìn)行計(jì)算前則會(huì)進(jìn)行隱式類(lèi)型轉(zhuǎn)換(JS最?lèi)盒牡牟糠种唬敿?xì)參見(jiàn)$雨$的文章《Javascript類(lèi)型轉(zhuǎn)換的規(guī)則》,這里的規(guī)則就是將字符串通過(guò)Number()方法轉(zhuǎn)換為數(shù)字,所以結(jié)果為13 % 2 ,也就是true
而JS中負(fù)數(shù)取模的結(jié)果是負(fù)數(shù),這里-9%2的結(jié)果實(shí)際上是-1,所以為false
而Infinity對(duì)任意數(shù)取模都是NaN,所以是false
綜上,結(jié)果為[true, true, true, false, false],也就是C
第十三題What is the result of this expression? (or multiple ones)
parseInt(3, 8) parseInt(3, 2) parseInt(3, 0)
A: 3, 3, 3
B: 3, 3, NaN
C: 3, NaN, NaN
D: other
還是parseInt的題,考的和第一題類(lèi)似,第一個(gè)值為3沒(méi)什么好說(shuō)的。如果出現(xiàn)的數(shù)字不符合后面輸入的進(jìn)制,則為NaN,所以第二個(gè)值為NaN。而radix為0時(shí)的情況第一題下面有介紹,這里也是一樣為默認(rèn)10,所以結(jié)果為3,所以答案為3, NaN, 3,選D
第十四題What is the result of this expression? (or multiple ones)
Array.isArray( Array.prototype )
A: true
B: false
C: error
D: other
死知識(shí),MDN傳送門(mén),這是MDN官方給的例子...
第十五題What is the result of this expression? (or multiple ones)
var a = [0]; if ([0]) { console.log(a == true); } else { console.log("wut"); }
A: true
B: false
C: "wut"
D: other
同樣是一道隱式類(lèi)型轉(zhuǎn)換的題,不過(guò)這次考慮的是"=="運(yùn)算符,a本身是一個(gè)長(zhǎng)度為1的數(shù)組,而當(dāng)數(shù)組不為空時(shí),其轉(zhuǎn)換成bool值為true。
而==左右的轉(zhuǎn)換,會(huì)使用如果一個(gè)操作值為布爾值,則在比較之前先將其轉(zhuǎn)換為數(shù)值的規(guī)則來(lái)轉(zhuǎn)換,Number([0]),也就是0,于是變成了0 == true,結(jié)果自然是false,所以最終結(jié)果為B
第十六題What is the result of this expression? (or multiple ones)
[] == []
A: true
B: false
C: error
D: other
這題考的是數(shù)組字面量創(chuàng)建數(shù)組的原理和==運(yùn)算符,首先JS中數(shù)組的真實(shí)類(lèi)型是Object這點(diǎn)很明顯typeof []的值為"object",而==運(yùn)算符當(dāng)左右都是對(duì)象時(shí),則會(huì)比較其是否指向同一個(gè)對(duì)象。而每次調(diào)用字面量創(chuàng)建,都會(huì)創(chuàng)造新的對(duì)象,也就是會(huì)開(kāi)辟新的內(nèi)存區(qū)域。所以指針的值自然不一樣,結(jié)果為 false,選B
第十七題What is the result of this expression? (or multiple ones)
"5" + 3 "5" - 3
A: 53, 2
B: 8, 2
C: error
D: other
又是一道隱式類(lèi)型轉(zhuǎn)換的題
加法: 加法運(yùn)算中,如果有一個(gè)操作值為字符串類(lèi)型,則將另一個(gè)操作值轉(zhuǎn)換為字符串,最后連接起來(lái)
減法: 如果操作值之一不是數(shù)值,則被隱式調(diào)用Number()函數(shù)進(jìn)行轉(zhuǎn)換
所以第一行結(jié)果為字符串運(yùn)算,為"53"。第二行結(jié)果為2,選A
第十八題What is the result of this expression? (or multiple ones)
1 + - + + + - + 1
A: 2
B: 1
C: error
D: other
C語(yǔ)言中的經(jīng)典...對(duì)于這種問(wèn)題,原理什么的不懂,蒙吧,結(jié)果是2
第十九題What is the result of this expression? (or multiple ones)
var ary = Array(3); ary[0]=2 ary.map(function(elem) { return "1"; });
A: [2, 1, 1]
B: ["1", "1", "1"]
C: [2, "1", "1"]
D: other
又是考的Array.prototype.map的用法,map在使用的時(shí)候,只有數(shù)組中被初始化過(guò)元素才會(huì)被觸發(fā),其他都是undefined,所以結(jié)果為["1", undefined × 2],選D
第二十題What is the result of this expression? (or multiple ones)
function sidEffecting(ary) { ary[0] = ary[2]; } function bar(a,b,c) { c = 10 sidEffecting(arguments); return a + b + c; } bar(1,1,1)
A: 3
B: 12
C: error
D: other
這題考的是JS的函數(shù)arguments的概念:
在調(diào)用函數(shù)時(shí),函數(shù)內(nèi)部的arguments維護(hù)著傳遞到這個(gè)函數(shù)的參數(shù)列表。它看起來(lái)是一個(gè)數(shù)組,但實(shí)際上它只是一個(gè)有l(wèi)ength屬性的Object,不從Array.prototype繼承。所以無(wú)法使用一些Array.prototype的方法。
arguments對(duì)象其內(nèi)部屬性以及函數(shù)形參創(chuàng)建getter和setter方法,因此改變形參的值會(huì)影響到arguments對(duì)象的值,反過(guò)來(lái)也是一樣
具體例子可以參見(jiàn)Javascript秘密花園#arguments
所以,這里所有的更改都將生效,a和c的值都為10,a+b+c的值將為21,選D
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/87481.html
摘要:上半部選擇題解答個(gè)人博客文章地址第二十一題又是一道考查數(shù)字的題,與第七題考察點(diǎn)相似。 上半部:JavaScript選擇題解答(1-20) 個(gè)人博客文章地址 第二十一題 What is the result of this expression? (or multiple ones) var a = 111111111111111110000, b = 1111; a +...
摘要:繼續(xù)使用摩投票算法,假設(shè)要投票,選取票數(shù)超過(guò)以上選為候選人,一個(gè)被分為三等份,也就是說(shuō)最多有兩位當(dāng)選人。排序解決先進(jìn)行一次排序快排,然后遍歷數(shù)據(jù),找出滿(mǎn)足條件的數(shù)據(jù)。 Time:2019/4/5Title: Majority Element 2Difficulty: mediumAuthor: 小鹿 問(wèn)題:Majority Element 2 Given an integer ar...
摘要:如果三個(gè)數(shù)據(jù)相加等于了,就存儲(chǔ)該三個(gè)值且更新和指針。邊界條件判斷數(shù)組內(nèi)元素是否都為整數(shù)或負(fù)數(shù),直接返回。判斷和指針的大小關(guān)系。在原來(lái)數(shù)組上進(jìn)行排序,不生成副本。 Time:2019/4/3Title:3SumDifficulty: mediumAuthor:小鹿 題目三:ADD Two Numbers Given an array?nums?of?n?integers, are the...
摘要:小鹿題目二叉樹(shù)的最大深度給定一個(gè)二叉樹(shù),找出其最大深度。二叉樹(shù)的深度為根節(jié)點(diǎn)到最遠(yuǎn)葉子節(jié)點(diǎn)的最長(zhǎng)路徑上的節(jié)點(diǎn)數(shù)。求二叉樹(shù)的深度,必然要用到遞歸來(lái)解決。分別遞歸左右子樹(shù)。 Time:2019/4/22Title: Maximum Depth of Binary TreeDifficulty: MediumAuthor:小鹿 題目:Maximum Depth of Binary Tre...
摘要:算法思路判斷樹(shù)是否為空同時(shí)也是終止條件。分別對(duì)左右子樹(shù)進(jìn)行遞歸。代碼實(shí)現(xiàn)判斷當(dāng)前樹(shù)是否為左右子樹(shù)結(jié)點(diǎn)交換分別對(duì)左右子樹(shù)進(jìn)行遞歸返回樹(shù)的根節(jié)點(diǎn)歡迎一起加入到開(kāi)源倉(cāng)庫(kù),可以向提交您其他語(yǔ)言的代碼。 Time:2019/4/21Title: Invert Binary TreeDifficulty: EasyAuthor: 小鹿 題目:Invert Binary Tree(反轉(zhuǎn)二叉樹(shù)) ...
閱讀 1362·2021-10-09 09:44
閱讀 1443·2021-09-28 09:36
閱讀 15970·2021-09-22 15:55
閱讀 1245·2021-09-22 15:45
閱讀 2203·2021-09-02 09:48
閱讀 2786·2019-08-29 17:19
閱讀 2299·2019-08-29 10:54
閱讀 913·2019-08-23 18:40