国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

44個(gè) Javascript {{BANNED}}題解析 (下)

HmyBmny / 2503人閱讀

摘要:原文發(fā)布于我的承接上篇個(gè){{BANNED}}題解析上第題這個(gè)題也還可以這個(gè)題會(huì)讓人誤以為是其實(shí)不是的這個(gè)題等價(jià)于答案是第題這個(gè)題我是猜的我猜的至于為什么我不能信服第題這個(gè)題也挺逗我做對(duì)了答案是你如果換一個(gè)寫法就更費(fèi)解了這個(gè)答案就是為啥呢因?yàn)樵谥卸际呛戏ǖ臄?shù)

原文發(fā)布于我的 github

承接上篇 44個(gè) Javascript {{BANNED}}題解析 (上)

第23題
[1 < 2 < 3, 3 < 2 < 1]

這個(gè)題也還可以.

這個(gè)題會(huì)讓人誤以為是 2 > 1 && 2 < 3 其實(shí)不是的.

這個(gè)題等價(jià)于

 1 < 2 => true;
 true < 3 =>  1 < 3 => true;
 3 < 2 => false;
 false < 1 => 0 < 1 => true;

答案是 [true, true]

第24題
// the most classic wtf
2 == [[[2]]]

這個(gè)題我是猜的. 我猜的 true, 至于為什么.....

both objects get converted to strings and in both cases the resulting string is "2" 我不能信服...

第25題
3.toString()
3..toString()
3...toString()

這個(gè)題也挺逗, 我做對(duì)了 :) 答案是 error, "3", error

你如果換一個(gè)寫法就更費(fèi)解了

var a = 3;
a.toString()

這個(gè)答案就是 "3";

為啥呢?

因?yàn)樵?js 中 1.1, 1., .1 都是合法的數(shù)字. 那么在解析 3.toString 的時(shí)候這個(gè) . 到底是屬于這個(gè)數(shù)字還是函數(shù)調(diào)用呢? 只能是數(shù)字, 因?yàn)?b>3.合法啊!

第26題
          
(function(){
  var x = y = 1;
})();
console.log(y);
console.log(x);

答案是 1, error

y 被賦值到全局. x 是局部變量. 所以打印 x 的時(shí)候會(huì)報(bào) ReferenceError

第27題
var a = /123/,
    b = /123/;
a == b
a === b

即使正則的字面量一致, 他們也不相等.

答案 false, false

第28題
var a = [1, 2, 3],
    b = [1, 2, 3],
    c = [1, 2, 4]
a ==  b
a === b
a >   c
a <   c

字面量相等的數(shù)組也不相等.

數(shù)組在比較大小的時(shí)候按照字典序比較

答案 false, false, false, true

第29題
var a = {}, b = Object.prototype;
[a.prototype === b, Object.getPrototypeOf(a) === b]

知識(shí)點(diǎn):

Object/getPrototypeOf

只有 Function 擁有一個(gè) prototype 的屬性. 所以 a.prototypeundefined.

Object.getPrototypeOf(obj) 返回一個(gè)具體對(duì)象的原型(該對(duì)象的內(nèi)部[[prototype]]值)

答案 false, true

第30題
function f() {}
var a = f.prototype, b = Object.getPrototypeOf(f);
a === b

f.prototype is the object that will become the parent of any objects created with new f while Object.getPrototypeOf returns the parent in the inheritance hierarchy.

f.prototype 是使用使用 new 創(chuàng)建的 f 實(shí)例的原型. 而 Object.getPrototypeOf 是 f 函數(shù)的原型.

請(qǐng)看:

a === Object.getPrototypeOf(new f()) // true
b === Function.prototype // true

答案 false

31
function foo() { }
var oldName = foo.name;
foo.name = "bar";
[oldName, foo.name]

答案 ["foo", "foo"]

知識(shí)點(diǎn):

Function/name

因?yàn)?strong>函數(shù)的名字不可變.

第32題
"1 2 3".replace(/d/g, parseInt)

知識(shí)點(diǎn):

String/replace#Specifying_a_function_as_a_parameter

str.replace(regexp|substr, newSubStr|function)

如果replace函數(shù)傳入的第二個(gè)參數(shù)是函數(shù), 那么這個(gè)函數(shù)將接受如下參數(shù)

match 首先是匹配的字符串

p1, p2 .... 然后是正則的分組

offset match 匹配的index

string 整個(gè)字符串

由于題目中的正則沒有分組, 所以等價(jià)于問

parseInt("1", 0)
parseInt("2", 2)
parseInt("3", 4)

答案: 1, NaN, 3

第33題
function f() {}
var parent = Object.getPrototypeOf(f);
f.name // ?
parent.name // ?
typeof eval(f.name) // ?
typeof eval(parent.name) //  ?

先說以下答案 "f", "Empty", "function", error 這個(gè)答案并不重要.....

這里第一小問和第三小問很簡(jiǎn)單不解釋了.

第二小問筆者在自己的瀏覽器測(cè)試的時(shí)候是 "", 第四問是 "undefined"

所以應(yīng)該是平臺(tái)相關(guān)的. 這里明白 parent === Function.prototype 就好了.

第34題
var lowerCaseOnly =  /^[a-z]+$/;
[lowerCaseOnly.test(null), lowerCaseOnly.test()]

知識(shí)點(diǎn):

RegExp/test

這里 test 函數(shù)會(huì)將參數(shù)轉(zhuǎn)為字符串. "nul", "undefined" 自然都是全小寫了

答案: true, true

第35題
[,,,].join(", ")

[,,,] => [undefined × 3]

因?yàn)閖avascript 在定義數(shù)組的時(shí)候允許最后一個(gè)元素后跟一個(gè),, 所以這是個(gè)長(zhǎng)度為三的稀疏數(shù)組(這是長(zhǎng)度為三, 并沒有 0, 1, 2三個(gè)屬性哦)

答案: ", , "

第36題
var a = {class: "Animal", name: "Fido"};
a.class

這個(gè)題比較流氓.. 因?yàn)槭菫g覽器相關(guān), class是個(gè)保留字(現(xiàn)在是個(gè)關(guān)鍵字了)

所以答案不重要, 重要的是自己在取屬性名稱的時(shí)候盡量避免保留字. 如果使用的話請(qǐng)加引號(hào) a["class"]

第37題
var a = new Date("epoch")

知識(shí)點(diǎn):

Date

Date/parse

簡(jiǎn)單來說, 如果調(diào)用 Date 的構(gòu)造函數(shù)傳入一個(gè)字符串的話需要符合規(guī)范, 即滿足 Date.parse 的條件.

另外需要注意的是 如果格式錯(cuò)誤 構(gòu)造函數(shù)返回的仍是一個(gè)Date 的實(shí)例 Invalid Date.

答案 Invalid Date

第38題
var a = Function.length,
    b = new Function().length
a === b

我們知道一個(gè)function(Function 的實(shí)例)的 length 屬性就是函數(shù)簽名的參數(shù)個(gè)數(shù), 所以 b.length == 0.

另外 Function.length 定義為1......

所以不相等.......答案 false

第39題
var a = Date(0);
var b = new Date(0);
var c = new Date();
[a === b, b === c, a === c]

還是關(guān)于Date 的題, 需要注意的是

如果不傳參數(shù)等價(jià)于當(dāng)前時(shí)間.

如果是函數(shù)調(diào)用 返回一個(gè)字符串.

答案 false, false, false

第40題
var min = Math.min(), max = Math.max()
min < max

知識(shí)點(diǎn):

Math/min

Math/max

有趣的是, Math.min 不傳參數(shù)返回 Infinity, Math.max 不傳參數(shù)返回 -Infinity ?

答案: false

第41題
function captureOne(re, str) {
  var match = re.exec(str);
  return match && match[1];
}
var numRe  = /num=(d+)/ig,
    wordRe = /word=(w+)/i,
    a1 = captureOne(numRe,  "num=1"),
    a2 = captureOne(wordRe, "word=1"),
    a3 = captureOne(numRe,  "NUM=2"),
    a4 = captureOne(wordRe,  "WORD=2");
[a1 === a2, a3 === a4]

知識(shí)點(diǎn):

RegExp/exec

通俗的講

因?yàn)榈谝粋€(gè)正則有一個(gè) g 選項(xiàng) 它會(huì)‘記憶’他所匹配的內(nèi)容, 等匹配后他會(huì)從上次匹配的索引繼續(xù), 而第二個(gè)正則不會(huì)

舉個(gè)例子

var myRe = /ab*/g;
var str = "abbcdefabh";
var myArray;
while ((myArray = myRe.exec(str)) !== null) {
  var msg = "Found " + myArray[0] + ". ";
  msg += "Next match starts at " + myRe.lastIndex;
  console.log(msg);
}
// Found abb. Next match starts at 3
// Found ab. Next match starts at 9

所以 a1 = "1"; a2 = "1"; a3 = null; a4 = "2"

答案 [true, false]

第42題
var a = new Date("2014-03-19"),
    b = new Date(2014, 03, 19);
[a.getDay() === b.getDay(), a.getMonth() === b.getMonth()]

這個(gè)....

JavaScript inherits 40 years old design from C: days are 1-indexed in C"s struct tm, but months are 0 indexed. In addition to that, getDay returns the 0-indexed day of the week, to get the 1-indexed day of the month you have to use getDate, which doesn"t return a Date object.

a.getDay()
3
b.getDay()
6
a.getMonth()
2
b.getMonth()
3

都是套路!

第43題
if ("http://giftwrapped.com/picture.jpg".match(".gif")) {
  "a gif file"
} else {
  "not a gif file"
}

知識(shí)點(diǎn):

String/match

String.prototype.match 接受一個(gè)正則, 如果不是, 按照 new RegExp(obj) 轉(zhuǎn)化. 所以 . 并不會(huì)轉(zhuǎn)義
那么 /gif 就匹配了 /.gif/

答案: "a gif file"

第44題
function foo(a) {
    var a;
    return a;
}
function bar(a) {
    var a = "bye";
    return a;
}
[foo("hello"), bar("hello")]

在兩個(gè)函數(shù)里, a作為參數(shù)其實(shí)已經(jīng)聲明了, 所以 var a; var a = "bye" 其實(shí)就是 a; a ="bye"

所以答案 "hello", "bye"

全部結(jié)束!

==================

總結(jié)

由于筆者水平有限, 如果解釋有誤, 還望指出 ?

通過整理, 筆者發(fā)現(xiàn)絕大部分題目都是因?yàn)樽约簩?duì)于基礎(chǔ)知識(shí)或者說某個(gè) API 的參數(shù)理解偏差才做錯(cuò)的.

筆者的重災(zāi)區(qū)在原型那一塊, 所以這次被虐和整理還是很有意義呀.

筆者相信 堅(jiān)實(shí)的基礎(chǔ)是深入編程的前提. 所以基礎(chǔ)書還是要常看啊 ?

最后這些{{BANNED}}題現(xiàn)在看看還{{BANNED}}嘛?

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/86340.html

相關(guān)文章

  • 44個(gè) Javascript 變態(tài)解析 (上)

    摘要:變量提升是將聲明移至作用域全局域或者當(dāng)前函數(shù)作用域頂部的行為。 原文來自我的 github 原題來自: javascript-puzzlers 44個(gè) Javascript 變態(tài)題解析 (下) 讀者可以先去做一下感受感受. 當(dāng)初筆者的成績(jī)是 21/44... 當(dāng)初筆者做這套題的時(shí)候不僅懷疑智商, 連人生都開始懷疑了.... 不過, 對(duì)于基礎(chǔ)知識(shí)的理解是深入編程的前提. 讓我們一起來看看...

    k00baa 評(píng)論0 收藏0
  • 44個(gè)JavaScript變態(tài)解析

    摘要:第題知識(shí)點(diǎn)首先接受兩個(gè)參數(shù)一個(gè)回調(diào)函數(shù)一個(gè)回調(diào)函數(shù)的值其中回調(diào)函數(shù)接受三個(gè)參數(shù)而題目中只傳入了回調(diào)函數(shù)其次只接受兩個(gè)兩個(gè)參數(shù)基數(shù)可選。 第1題 [1, 2, 3].map(parseInt) 知識(shí)點(diǎn): Array/map Number/parseInt JavaScript parseInt 首先, map接受兩個(gè)參數(shù), 一個(gè)回調(diào)函數(shù) callback, 一個(gè)回調(diào)函數(shù)的this值 ...

    aikin 評(píng)論0 收藏0
  • 實(shí)用性前端知識(shí) - 收藏集 - 掘金

    摘要:與面向?qū)ο缶幊塘蠓较蛑阃黄魄岸松钠脚_(tái)期前端掘金無論我們從事何種職業(yè),在職業(yè)生涯的某個(gè)階段,都或多或少會(huì)遇到所謂的平臺(tái)期。目前為止,已經(jīng)有個(gè)用戶通過認(rèn)證登觀點(diǎn)年前端初學(xué)者的生存指南前端掘金逝者如斯夫,不舍晝夜。 你可能聽說過函數(shù)式編程(Functional programming),甚至已經(jīng)使用了一段時(shí)間。 但是,你能說清楚,它到底是什么嗎? 網(wǎng)上搜索一下,你會(huì)輕松找到好多答案...

    Honwhy 評(píng)論0 收藏0
  • 深入理解js

    摘要:詳解十大常用設(shè)計(jì)模式力薦深度好文深入理解大設(shè)計(jì)模式收集各種疑難雜癥的問題集錦關(guān)于,工作和學(xué)習(xí)過程中遇到過許多問題,也解答過許多別人的問題。介紹了的內(nèi)存管理。 延遲加載 (Lazyload) 三種實(shí)現(xiàn)方式 延遲加載也稱為惰性加載,即在長(zhǎng)網(wǎng)頁中延遲加載圖像。用戶滾動(dòng)到它們之前,視口外的圖像不會(huì)加載。本文詳細(xì)介紹了三種延遲加載的實(shí)現(xiàn)方式。 詳解 Javascript十大常用設(shè)計(jì)模式 力薦~ ...

    caikeal 評(píng)論0 收藏0
  • 轉(zhuǎn)載:《44個(gè)Javascript變態(tài)

    摘要:第題第題第題第題第題第題第題第題第題第題第題第題第題第題第題第題第題第題第題第題第題第題屬性是中可表示的最小的數(shù)接近,但不是負(fù)數(shù)。 第1題 [1,2,3].map(parseInt); 第2題 [typeof null,null instanceOf Object] 第3題 [[3,2,1].reduce(Math.pow),[].reduce(Math.pow)] 第4題 var v...

    BDEEFE 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<