成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

你真的了解javascript嗎?(一)

whatsns / 1501人閱讀

摘要:表示要解析的數(shù)字的基數(shù)。回調(diào)函數(shù)接收四個參數(shù),依次是通過上一次調(diào)用回調(diào)函數(shù)獲得的值。如果向方法提供,則在首次調(diào)用函數(shù)時,為。當(dāng)前數(shù)組元素的值。

原題出處:JavaScript Puzzlers!
當(dāng)初以為不過是一些小題目,結(jié)果做到懷疑人生,都要懷疑可能我javascript白學(xué)了。讀者可以去試試。

不多說,直接上題:

第一題
["1", "2", "3"].map(parseInt)

不要被套路,這題沒看上去那么簡單,首先我們來看看Array.map這個函數(shù):

array.map(function(currentValue,index,arr), thisValue)

map() 方法按照原始數(shù)組元素順序依次處理元素,返回一個新數(shù)組,數(shù)組中的元素為原始數(shù)組元素調(diào)用函數(shù)處理后的值。

map接收兩個參數(shù),一個回調(diào)函數(shù),一個是可選的回調(diào)函數(shù)的this值,默認為undefined

其中回調(diào)函數(shù)接收三個參數(shù),依次是當(dāng)前元素的值,可選的當(dāng)前元素的索引值和當(dāng)期元素屬于的數(shù)組對象

題目中只傳入了parseInt函數(shù),讓我們再看看parseInt這個函數(shù):

parseInt(string, radix)

parseInt() 函數(shù)可解析一個字符串,并返回一個整數(shù)。
string: 必需。要被解析的字符串。
radix: 可選。表示要解析的數(shù)字的基數(shù)。該值介于 2 ~ 36 之間。

當(dāng)忽略參數(shù) radix , JavaScript 默認數(shù)字的基數(shù)如下:

如果 string 以 "0x" 開頭,parseInt() 會把 string 的其余部分解析為十六進制的整數(shù)。

如果 string 以 0 開頭,那么 ECMAScript v3 允許 parseInt() 的一個實現(xiàn)把其后的字符解析為八進制或十六進制的數(shù)字。

如果 string 以 1 ~ 9 的數(shù)字開頭,parseInt() 將把它解析為十進制的整數(shù)。

把這題分開來看就是:

// parseInt(currenValue, index)
parseInt("1", 0)    // 1
parseInt("2", 1)    // NaN
parseInt("3", 2)    // NaN

答案就是: [1, NaN, NaN]

第二題
[typeof null, null instanceof Object]

這題還好一點,typeof 返回一個表示類型的字符串. instanceof 運算符用來檢測 constructor.prototype 是否存在于參數(shù) object 的原型鏈上.

我們都知道在javascript一切皆是對象,所以第一部分不用說,返回的肯定是Object,但是null并不存在于參數(shù) object 的原型鏈上.

所以答案就是: [Object, false]

第三題
[ [3,2,1].reduce(Math.pow), [].reduce(Math.pow) ]

先說說Array.reduce這個方法吧:

array.reduce(function(total, currentValue, currentIndex, arr), initialValue)

reduce接收兩個參數(shù),一個回調(diào)函數(shù),一個可選的將用作累積的初始值。

如果提供了 initialValue,則 reduce 方法會對數(shù)組中的每個元素調(diào)用一次 callbackfn 函數(shù)(按升序索引順序)。如果未提供 initialValue,則 reduce 方法會對從第二個元素開始的每個元素調(diào)用 callbackfn 函數(shù)。

回調(diào)函數(shù)接收四個參數(shù),依次是

通過上一次調(diào)用回調(diào)函數(shù)獲得的值。如果向 reduce 方法提供 initialValue,則在首次調(diào)用函數(shù)時,total 為 initialValue。

當(dāng)前數(shù)組元素的值。

當(dāng)前數(shù)組元素的數(shù)字索引。

包含該元素的數(shù)組對象。

Math.pow(x,y)

pow() 方法返回 x 的 y 次冪。

[3, 2, 1].reduce(Math.pow) 拆分開來就是:

Math.pow(3, 2)    // 9
Math.pow(9, 1)    // 9

但是reduce在兩個情況下會拋出異常:

當(dāng)滿足下列任一條件時,將引發(fā) TypeError 異常: callbackfn 參數(shù)不是函數(shù)對象。

數(shù)組不包含元素,且未提供 initialValue。

所以 [].reduce(Math.pow) 會拋出異常

答案為:an error

第四題
var val = "smtg";
console.log("Value is " + (val === "smtg") ? "Something" : "Nothing");

這題看上去很簡單對不對?答案不就是 Value is Something,如果你真的這么想,你會哭的,是的,筆者已經(jīng)親自試毒了。

簡單來說就是+的優(yōu)先級大于?

所以原題等價于:

console.log("Value is true" ? "Something" : "Nothing")

答案應(yīng)該是 Something

第五題
var name = "World!";
(function () {
    if (typeof name === "undefined") {
        var name = "Jack";
        console.log("Goodbye " + name);
    } else {
        console.log("Hello " + name);
    }
})();

我還是先說答案吧,可能你們會不相信,答案就是 Goodbye, Jack

為什么會這樣呢,因為在javascript里,聲明變量或函數(shù)會被提升,就是說,
變量提升是JavaScript將聲明移至作用域 scope (全局域或者當(dāng)前函數(shù)作用域) 頂部的行為。
你可以先使用一個函數(shù)或變量,再聲明它:

show("Wiess")    // Hello Wiess
function (name) {
    console.log("Hello " + name)
}

但是javascript只提升聲明,而不是初始化,如果使用一個在已經(jīng)使用后才聲明和初始化的值,這個值將是undefined

所以這題就相當(dāng)于:

var name = "World!";
(function () {
    var name;
    if (typeof name === "undefined") {
        name = "Jack";
        console.log("Goodbye " + name);
    } else {
        console.log("Hello " + name);
    }
})();

到這里是不是有點肝疼?習(xí)慣就好,習(xí)慣就好

第六題
var END = Math.pow(2, 53);
var START = END - 100;
var count = 0;
for (var i = START; i <= END; i++) {
    count++;
}
console.log(count);

Math.pow(2, 53) = 9007199254740992(可以表示的最大值) 最大值加1還是9007199254740992,所以這個循環(huán)會一直下去

答案是: other

第七題
var ary = [0,1,2];
ary[10] = 10;
ary.filter(function(x) { return x === undefined;});

這里先科普一下Array.filter():

var newArray = array.filter(function(currentValue,index,arr), thisValue)

filter() 方法創(chuàng)建一個新的數(shù)組,新數(shù)組中的元素是通過檢查指定數(shù)組中符合條件的所有元素。

filter接收兩個參數(shù), 一個回調(diào)函數(shù),一個是可選的回調(diào)函數(shù)的this值,默認為undefined

回調(diào)函數(shù)依次接收三個參數(shù):

必須。當(dāng)前元素的值

可選。當(dāng)期元素的索引值

可選。當(dāng)期元素屬于的數(shù)組對象

再說稀疏矩陣,當(dāng)你取數(shù)組中某個沒有定義的數(shù)時:

arr[4]    // undefined

但是當(dāng)你遍歷它時,你會發(fā)現(xiàn),它并沒有元素。
JavaScript會跳過這些縫隙.

所以答案為: []

第八題
var two   = 0.2
var one   = 0.1
var eight = 0.8
var six   = 0.6
[two - one == one, eight - six == two]

這題筆者認為應(yīng)該選[false, false],但是答案卻是[true, false]

就不說javascript里沒有精確的浮點數(shù)了,這個大家應(yīng)該都知道,但是為什么不能一視同仁呢?!希望有個大神來解答一下

第九題
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"));

這題主要考察的是switch,在switch里,比較用的是 ===,所以new String("A") 與 字面聲明的 "A"是不一樣的,所以答案是 Do not know!

第十題
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!");
    }
}
showCase2(String("A"));

String(x)不創(chuàng)建對象,但返回一個字符串,即typeof String(1)===“string”

所以答案為 Case A

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/88175.html

相關(guān)文章

  • JS基礎(chǔ)篇--JS的DOM操作 - 真的了解?

    摘要:摘要想稍微系統(tǒng)的說說對于的操作把和常用操作的內(nèi)容歸納成思維導(dǎo)圖方便閱讀同時加入性能上的一些問題前言在前端開發(fā)的過程中極為重要的一個功能就是對對象的操作無論增刪改查在前端頁面操作這一范圍內(nèi)都是比較消耗性能的如何高效率的便捷的操作這就是本文要講 摘要 想稍微系統(tǒng)的說說對于DOM的操作,把Javascript和jQuery常用操作DOM的內(nèi)容歸納成思維導(dǎo)圖方便閱讀,同時加入性能上的一些問題....

    DirtyMind 評論0 收藏0
  • 真的了解Object.defineProperty?

    摘要:前言想到,首先不得不提到對象,對象是的基礎(chǔ),有一種常見的說法中萬物皆是對象。這種說法其實并不那么準(zhǔn)確,根據(jù)對語言類型的分類,就可以得出并不是萬物皆對象,這次就不對這個問題進行展開,感興趣可以點擊萬物皆對象 1. 前言 想到Object.defineProperty,首先不得不提到對象,對象是JavaScript的基礎(chǔ),有一種常見的說法JavaScript中萬物皆是對象。 這種說法其實并...

    894974231 評論0 收藏0
  • 真的了解this指向?

    摘要:前言相信很多人都對中的指向問題一知半解,所以今天就來詳細看看它到底是怎么判斷的。椎確來說是函數(shù)調(diào)用時是否有引用上下文對象。隱式綁定,上下文對象無上下文對象顯示綁定這也是常用的的方式就不一一舉例了。 前言 相信很多人都對JavaScript中的this指向問題一知半解,所以今天就來詳細看看它到底是怎么判斷的。 一. 先看幾道題 var length = 10; functio...

    liaorio 評論0 收藏0
  • 2019前端工程師自檢清單與思考

    摘要:前端工程師自檢清單對于,掌握其語法和特性是最基本的,但是這些只是應(yīng)用能力,最終仍舊考量仍然是計算機體系的理論知識,所以數(shù)據(jù)結(jié)構(gòu),算法,軟件工程,設(shè)計模式等基礎(chǔ)知識對前端工程師同樣重要,這些知識的理解程度,可以決定你在前端工程師這條路上能走多 2019前端工程師自檢清單 對于JavaScript,掌握其語法和特性是最基本的,但是這些只是應(yīng)用能力,最終仍舊考量仍然是計算機體系的理論知識,所...

    Honwhy 評論0 收藏0
  • JavaScript百煉成仙》統(tǒng)回復(fù)粉絲們的些問題

    摘要:期間,我還遇到了幾個校友,真的是大受感動。所以,我專門開個貼回復(fù)一下老鐵們的問題。前幾章,尤其是函數(shù)七重關(guān)的部分,真的是我自己對基礎(chǔ)細節(jié)的提煉和感悟,是我最滿意的。后面的節(jié)奏確實是快了些,嗯,下一本書我會好好改進的。 感謝老鐵們能喜歡這本書,這兩天評論和私信很多,我?guī)缀趺恳粭l都會認真看。哈哈...

    Pluser 評論0 收藏0

發(fā)表評論

0條評論

whatsns

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<