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

資訊專欄INFORMATION COLUMN

溫故js系列(13.2)-有意思的30題_解析

AZmake / 948人閱讀

摘要:茶余飯后,來杯咖啡對(duì)數(shù)組的每個(gè)元素調(diào)用定義的回調(diào)函數(shù)并返回包含結(jié)果的數(shù)組。因此,題目等同于最終返回。但是的次方計(jì)算出的結(jié)果由于精度問題使得失效。,返回,執(zhí)行會(huì)強(qiáng)制將轉(zhuǎn)換為,,最終返回。我們可能理解為,該函數(shù)存儲(chǔ)的是嵌套函數(shù)創(chuàng)建時(shí)變量的值。

前端學(xué)習(xí):教程&開發(fā)模塊化/規(guī)范化/工程化/優(yōu)化&工具/調(diào)試&值得關(guān)注的博客/Git&面試-前端資源匯總

歡迎提issues斧正:30題_解析

JavaScript-有意思的30題-解析

之前在學(xué)習(xí)時(shí)把問題和答案分開了,這兒也分開吧。這樣在看得時(shí)候無意識(shí)的會(huì)多思考一下。茶余飯后,來杯咖啡

1.D

map對(duì)數(shù)組的每個(gè)元素調(diào)用定義的回調(diào)函數(shù)并返回包含結(jié)果的數(shù)組。["1","2","3"].map(parseInt)對(duì)于數(shù)組中每個(gè)元素調(diào)用paresInt。但是該題目不同于:

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

題目等同于:

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

map中回調(diào)函數(shù)的語法如下所示:function callbackfn(value, index, array1),可使用最多三個(gè)參數(shù)來聲明回調(diào)函數(shù)。第一參數(shù)value,數(shù)組元素的值;第二個(gè)參數(shù)index,數(shù)組元素的數(shù)組所以;array1,包含該元素的數(shù)組對(duì)象。
因此,題目等同于[parseInt(1,0),parseInt(2,1),parseInt(3,2)] 最終返回[1, NaN, NaN]。

2.A

typeof用以獲取一個(gè)變量或者表達(dá)式的類型,typeof一般只能返回如下幾個(gè)結(jié)果:

number,boolean,string,function(函數(shù)),object(NULL,數(shù)組,對(duì)象),undefined

instanceof 表示某個(gè)變量是否是某個(gè)對(duì)象的實(shí)例,null是個(gè)特殊的Object類型的值 ,表示空引用的意思 。但null返回object這個(gè)其實(shí)是最初JavaScript的實(shí)現(xiàn)的一個(gè)錯(cuò)誤,
然后被ECMAScript沿用了,成為了現(xiàn)在的標(biāo)準(zhǔn),不過我們把null可以理解為尚未存在的對(duì)象的占位符,這樣就不矛盾了 ,雖然這是一種“辯解”。
對(duì)于我們開發(fā)人員 還是要警惕這種“語言特性”。最終返回:["object", false]

3.A

pow() 方法可返回 x 的 y 次冪的值。[3,2,1].reduce(Math.pow);等同于:

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

執(zhí)行Math.pow(3,2)和Math.pow(2,1),最終返回9和9。
但是要注意pow的參數(shù)都是必須的,[].reduce(Math.pow),等同于執(zhí)行Math.pow();會(huì)導(dǎo)致錯(cuò)誤。

4.A

先執(zhí)行字符串拼接,再執(zhí)行校驗(yàn)

var val = "value";
console.info("Value id "+(val === "value123")?"Something":"Nothing");

同樣會(huì)返回something

5.A

判斷語句被包裹在立即調(diào)用函數(shù)里,函數(shù)內(nèi)部無法訪問外部值為"World"的name,因此typeof name === "undefined"為真,執(zhí)行下一步操作,最終輸出Goodbye Jack

6.D

END = 9007199254740992 ,START = 9007199254740892目的是計(jì)算的END和START之間的差。但是2的53次方計(jì)算出的結(jié)果由于精度問題使得i++失效。

7.C

filter會(huì)接觸到?jīng)]有被賦值的元素,即在arr中,長(zhǎng)度為10但實(shí)際數(shù)值元素列表為[0, 1, 2, 10],因此,最終返回一個(gè)空的數(shù)組[]。

8.C

兩個(gè)浮點(diǎn)數(shù)相加或者相減,將會(huì)導(dǎo)致一定的正常的數(shù)據(jù)轉(zhuǎn)換造成的精度丟失問題eight-six = 0.20000000000000007。
JavaScript中的小數(shù)采用的是雙精度(64位)表示的,由三部分組成: 符 + 階碼 + 尾數(shù),在十進(jìn)制中的 1/10,在十進(jìn)制中可以簡(jiǎn)單寫為 0.1 ,但在二進(jìn)制中,他得寫成:0.0001100110011001100110011001100110011001100110011001…..(后面全是 1001 循環(huán))。因?yàn)楦↑c(diǎn)數(shù)只有52位有效數(shù)字,從第53位開始,就舍入了。這樣就造成了“浮點(diǎn)數(shù)精度損失”問題。
更嚴(yán)謹(jǐn)?shù)淖龇ㄊ?eight-six ).totoFiexd(1)或者用用Math.round方法回歸整數(shù)運(yùn)算。判斷兩個(gè)浮點(diǎn)數(shù)是否相等,還是建議用逼近的比較,比如if((a-b) < 1E-10)

9.C

使用new String()使用構(gòu)造函數(shù)調(diào)用講一個(gè)全新的對(duì)象作為this變量的值,并且隱式返回這個(gè)新對(duì)象作為調(diào)用的結(jié)果,因此showCase()接收的參數(shù)為String {0: "A"}為不是我們所認(rèn)為的“A”

10.A

直接調(diào)用String("A")創(chuàng)建的變量和"A"無異。

var a="123"    "只是設(shè)置變量
b=new String("123") "設(shè)置一個(gè)成員

var a="123";
a.sex=1;
alert(a.sex);//輸出未定義,因?yàn)椴皇浅蓡T,沒有這屬性

b=new String("123");
b.sex=1;
alert(b.sex);//輸出1,成員的屬性
11.C
function isSane(num){
    return isEven(num)||isOdd(num);
}

該函數(shù)判斷num是否為正整數(shù),"13"被強(qiáng)制轉(zhuǎn)換為數(shù)值13,-9%2結(jié)果為-1,Infinity %2為NaN

12.D

最終結(jié)果為[3, NaN, 3];
parseInt() 函數(shù)可解析一個(gè)字符串,并返回一個(gè)整數(shù)。當(dāng)參數(shù) radix 的值為 0,或沒有設(shè)置該參數(shù)時(shí),parseInt() 會(huì)根據(jù) string 來判斷數(shù)字的基數(shù)。

13.A

Array.prototype為[],Array.isArray(a)是一個(gè)判斷a是否為數(shù)組的方法。
判斷對(duì)象是否為數(shù)組的方法:
1)ES5函數(shù)isArray(),該函數(shù)測(cè)試對(duì)象的內(nèi)部[[Class]]屬性是否為Array:Arrray.isArray(a);
2)判斷對(duì)象的構(gòu)造函數(shù)是否為Array:a.constructor === Array
3)使用對(duì)象內(nèi)部[[Class]]屬性創(chuàng)建結(jié)果字符串:Object.prototype.toString.call(a)
4)使用instanceof操作符測(cè)試對(duì)象是否繼承自Array:(但由于,一個(gè)頁面的iframe不會(huì)繼承自另外一個(gè)頁面的iframe,該方法不可靠)

a instanceof Array
14.B

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

15.B

數(shù)組,在 Javascript 中是對(duì)象,對(duì)象使用 == 比較都是比較的引用。簡(jiǎn)單的說,就是,如果是同一個(gè)對(duì)象,就相等,如果不是同一個(gè)對(duì)象,就不等。每次使用 [] 都是新建一個(gè)數(shù)組對(duì)象,所以 [] == [] 這個(gè)語句里建了兩個(gè)數(shù)據(jù)對(duì)象,它們不等。

16.A

執(zhí)行"5"+3,加號(hào)具備拼接字符串功能,會(huì)將3強(qiáng)制轉(zhuǎn)換為字符串"3"和"5"拼接。
執(zhí)行"5"-3,減號(hào)只具備數(shù)值運(yùn)算的功能,因此會(huì)將"5"轉(zhuǎn)化為數(shù)值,進(jìn)行5-3的數(shù)值運(yùn)算

17.C 18.D

區(qū)分賦值和聲明。雖然var arr = Array(3);創(chuàng)建一個(gè)長(zhǎng)度為3的數(shù)組,但是實(shí)際只有一個(gè)元素被賦值,因此arr的實(shí)際長(zhǎng)度為1,即最終參與map的只有一個(gè)元素,返回[1]

19.D

按照?qǐng)?zhí)行步驟,無需多疑,最終結(jié)果為10+1+10

20.B

js的精確整數(shù)最大為:Math.pow(2,53)-1 =9007199254740991.
var a = 111111111111111110000,
max = 9007199254740992;
a的值大于javascript所能表示的最大整數(shù)精度,因此和任何數(shù)值相加將會(huì)導(dǎo)致失真。

21.C

正確調(diào)用方式為x.call([])

22.A

Number.MIN_VALUE表示的最小值為5e-324,MIN_VALUE代表的并不是負(fù)最小,而是最接近0的一個(gè)數(shù),因此Number.MIN_VALUE>0。
負(fù)最小值可以使用-Number.MAX_VALUE表示。

23.A

1<2,返回true,執(zhí)行true<3,會(huì)強(qiáng)制將true轉(zhuǎn)換為1,1<3,最終返回true。
3<2,返回false,執(zhí)行false<1,會(huì)強(qiáng)制將false轉(zhuǎn)換為0,0<1,最終返回true。

24.A

使用a==b判斷a和b對(duì)象是否相等,可以會(huì)將b對(duì)象強(qiáng)制轉(zhuǎn)換為a對(duì)象的類型,即執(zhí)行2 == [[[2]]],會(huì)隱式調(diào)用parseInt([[[2]]])將[[[2]]]強(qiáng)制轉(zhuǎn)化為數(shù)字基本量,即2,2==2,最終返回true。

25.C

Number中的toString(a),能夠?qū)?shù)值轉(zhuǎn)化成為a進(jìn)制的值。但a缺省時(shí),默認(rèn)轉(zhuǎn)化為十進(jìn)制。
一般使用方法為:var n = 3;3.toString();
執(zhí)行3.toString(),因?yàn)?只是為數(shù)值型變量,為非Number實(shí)例,因此對(duì)于3不能直接調(diào)用Number方法。而執(zhí)行3..toString(),會(huì)強(qiáng)制將3轉(zhuǎn)化為數(shù)字實(shí)例,因此能夠被解釋,輸出3,同樣可以使用(3).toString()。

26.C

在立即調(diào)用函數(shù)內(nèi)執(zhí)行,var x1 =y1 =1;創(chuàng)建局部變量x1和全局變量y1。函數(shù)外部試圖訪問函數(shù)內(nèi)部的變量,將會(huì)導(dǎo)致錯(cuò)誤。

27.

列舉IE和FF腳本兼容性的問題
(1)window.event
表示當(dāng)前的事件對(duì)象,IE有這個(gè)對(duì)象,F(xiàn)F沒有
(2)獲取事件源
IE用srcElement獲取事件源,而FF用target獲取事件源
(3)添加、移除事件
IE:element.attachEvent("onclick",function)
element.detachEvent("onclick",function)
FF:element.addEventListener("click",function,true)
element.removeEventListener("click",function,true)

28.

題目所給出的代碼,除了有addEventListener不兼容IE瀏覽器的問題之外,最突出的一個(gè)問題是:
雖然在頁面上會(huì)顯示值為button+i的按鈕,但是點(diǎn)擊任意一個(gè)按鈕,最終都會(huì)顯示5。
要想點(diǎn)擊相關(guān)按鈕,彈出相應(yīng)的1,2,3,4,5的值,需要理解閉包原理實(shí)現(xiàn)和使用立即回調(diào)函數(shù)。修改后的代碼如下:


function initButtons(){ 
    var body = document.body,button,i;          
    for(i =0;i<5;i++){ 
        (function(i){ 
             button = document.createElement("button"); 
             button.innerHTML = "Button" + i; 
             button.addEventListener("click",function(e){ 
                  alert(i); 
             },false); 
             body.appendChild(button); 
          })(i);                      
    }          
} 
initButtons(); 

涉及綁定和賦值得到區(qū)別。在運(yùn)行時(shí),進(jìn)入一個(gè)作用域,javascript會(huì)為每一個(gè)綁定到該作用域的變量在內(nèi)存中分配一個(gè)“槽”(slot)。函數(shù)中,創(chuàng)建變量document.body,button,i,因此當(dāng)函數(shù)體(創(chuàng)建按鈕,并為按鈕綁定事件)被調(diào)用時(shí),函數(shù)會(huì)為每個(gè)變量分配一個(gè)“槽”。在循環(huán)的每次迭代中,循環(huán)體都會(huì)為嵌套函數(shù)分配一個(gè)閉包。我們可能理解為,該函數(shù)存儲(chǔ)的是嵌套函數(shù)創(chuàng)建時(shí)變量i的值。但事實(shí)上,他存儲(chǔ)的是i的引用。由于每次函數(shù)創(chuàng)建后變量i的值都發(fā)生變化,因此函數(shù)內(nèi)部最終看到的是變量i的引用。閉包存儲(chǔ)的是外部變量的引用而非值。
立即調(diào)用的函數(shù)表達(dá)式,是一種不可或缺的解決javascript缺少塊級(jí)作用域的方法。
需要深入理解,可以查看《Effective JavaScript》第13條:使用立即調(diào)用的函數(shù)表達(dá)式創(chuàng)建局部作用域

29.使用常規(guī)方法和正則表達(dá)式匹配兩種算法

/*寫一段代碼。判斷一個(gè)字符串中出現(xiàn)次數(shù)最多的字符串,并統(tǒng)計(jì)出現(xiàn)的次數(shù)*/        
        function toGetTheMostCharsByArray(s){ 
            var r={}; 
            for(var i=0;imax.num){ 
                    max.num = r[n]; 
                    max.value = n;  
                } 
            } 
            return max; 
        } 
        function toGetTheMostCharsByRegex(s){ 
            var a = s.split(""); 
            a.sort(); 
            s = a.join(""); 
     
            var regex = /(w)1+/g ;//1代表重復(fù)的 
     
            var max = { 
                "value " :s[0], 
                "num" :  0 
            }; 
             
            s.replace(regex,function(a,b){ 
                if(max.num < a.length){ 
                    max.num = a.length; 
                    max.value= b; 
                } 
            }); 
     
            return max; 
     
        } 
        var test = "efdfssssfrhth"; 
        console.info("使用常規(guī)方法 ,出現(xiàn)最多的字符串為:"+toGetTheMostCharsByArray(test).value+" ,出現(xiàn)次數(shù):"+toGetTheMostCharsByArray(test).num); 
        console.info("使用字符串匹配,出現(xiàn)最多的字符串為:"+toGetTheMostCharsByRegex(test).value+" ,出現(xiàn)次數(shù):"+toGetTheMostCharsByRegex(test).num); 
30.

javascript的引擎是單線程的
javascript的引擎是基于事件驅(qū)動(dòng)的
setTimeout和setInterval都是往事件隊(duì)列中增加一個(gè)待處理時(shí)間而已,setTimeout只觸發(fā)一次,而setInterval是循環(huán)觸發(fā)

setTimeout(function(){
    //代碼塊
    setTimeout(arguments.callee,10);
},10);

上段代碼可使得setTimeout循環(huán)觸發(fā)。但是,執(zhí)行完這段代碼塊才掛起時(shí)間,所以兩次執(zhí)行時(shí)間會(huì)大于10毫秒

setInterval(function(){
    /*代碼塊*/
},10);

而上段代碼,是自動(dòng)在10的時(shí)候掛上這個(gè)事件,所以兩次事件的相隔會(huì)小于等于10毫秒。
當(dāng)線程阻塞在一個(gè)事件的時(shí)候,不管是使用setInterval還是setTimeout都需要等待當(dāng)前事件處理完才能執(zhí)行。

聲明:本文源于學(xué)習(xí)的時(shí)候保存的一份word文檔。word復(fù)制自一篇博客稱“JavaScript30個(gè)你不可能全會(huì)的題目”,具體出處已無。不過,最原始源自書籍《超實(shí)用的JavaScript代碼段》

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

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

相關(guān)文章

  • 溫故js系列(13.1)-意思30_

    摘要:前端學(xué)習(xí)教程開發(fā)模塊化規(guī)范化工程化優(yōu)化工具調(diào)試值得關(guān)注的博客面試前端資源匯總歡迎提斧正題題目有意思的題題目之前在學(xué)習(xí)時(shí)把問題和答案分開了,這兒也分開吧。復(fù)制自一篇博客個(gè)你不可能全會(huì)的題目,具體出處已無。不過,最原始源自書籍超實(shí)用的代碼段 前端學(xué)習(xí):教程&開發(fā)模塊化/規(guī)范化/工程化/優(yōu)化&工具/調(diào)試&值得關(guān)注的博客/Git&面試-前端資源匯總 歡迎提issues斧正:30題_題目 Jav...

    Binguner 評(píng)論0 收藏0
  • 前端空間 - 收藏集 - 掘金

    摘要:封裝手寫的方筆記使用檢測(cè)文件前端掘金副標(biāo)題可以做什么以及使用中會(huì)遇到的坑。目的是幫助人們用純中文指南實(shí)現(xiàn)復(fù)選框中多選功能前端掘金作者緝熙簡(jiǎn)介是推出的一個(gè)天挑戰(zhàn)。 深入理解 JavaScript Errors 和 Stack Traces - 前端 - 掘金譯者注:本文作者是著名 JavaScript BDD 測(cè)試框架 Chai.js 源碼貢獻(xiàn)者之一,Chai.js 中會(huì)遇到很多異常處理...

    you_De 評(píng)論0 收藏0
  • 前端空間 - 收藏集 - 掘金

    摘要:封裝手寫的方筆記使用檢測(cè)文件前端掘金副標(biāo)題可以做什么以及使用中會(huì)遇到的坑。目的是幫助人們用純中文指南實(shí)現(xiàn)復(fù)選框中多選功能前端掘金作者緝熙簡(jiǎn)介是推出的一個(gè)天挑戰(zhàn)。 深入理解 JavaScript Errors 和 Stack Traces - 前端 - 掘金譯者注:本文作者是著名 JavaScript BDD 測(cè)試框架 Chai.js 源碼貢獻(xiàn)者之一,Chai.js 中會(huì)遇到很多異常處理...

    lwx12525 評(píng)論0 收藏0
  • 溫故js系列(4)-運(yùn)算符詳解

    摘要:一元運(yùn)算符一元運(yùn)算符只能操作一個(gè)值。邏輯非邏輯非參考數(shù)據(jù)判斷邏輯非運(yùn)算符可以用于任何值。無論這個(gè)值是什么數(shù)據(jù)類型,這個(gè)運(yùn)算符都會(huì)返回一個(gè)布爾值。 前端學(xué)習(xí):教程&開發(fā)模塊化/規(guī)范化/工程化/優(yōu)化&工具/調(diào)試&值得關(guān)注的博客/Git&面試-前端資源匯總 歡迎提issues斧正:運(yùn)算符 JavaScript-運(yùn)算符 JavaScript 有一系列操作數(shù)據(jù)值的運(yùn)算符,運(yùn)算符按照特定運(yùn)算規(guī)則對(duì)...

    王軍 評(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

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

0條評(píng)論

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