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

資訊專欄INFORMATION COLUMN

Javascript中幾個看起來簡單,卻不一定會做的題

itvincent / 369人閱讀

摘要:作為前端開發(fā)必須掌握的一門語言,因?yàn)檎Z言的靈活性,有些知識點(diǎn)看起來簡單,在真正遇到的時候,卻不一定會直接做出來,今天我們就一起來看看幾道題目吧題目這道題考察的知識點(diǎn)是運(yùn)算符的優(yōu)先級。

Javascript作為前端開發(fā)必須掌握的一門語言,因?yàn)檎Z言的靈活性,有些知識點(diǎn)看起來簡單,在真正遇到的時候,卻不一定會直接做出來,今天我們就一起來看看幾道題目吧

題目1

var val = "smtg";

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

這道題考察的知識點(diǎn)是運(yùn)算符的優(yōu)先級。

首先,小括號的優(yōu)先級是最高的,所以首先會做判斷,val與smtg相等返回true。因此最后這道題等價(jià)于判斷是執(zhí)行下面的語句1還是語句2.

//語句1

"Value is" + (true ? "Something" : "Nothing");

//語句2

"Value is true" ? "Something" : "Nothing";

根據(jù)運(yùn)算符優(yōu)先級我們知道,連接元算符+的優(yōu)先級要高于條件運(yùn)算符?的優(yōu)先級,因此實(shí)際執(zhí)行的是語句2,所以最后返回的結(jié)果是

"Something".

題目2

我們再來看看下面這道題。

  var ary = [0,1,2];

  ary[6] = 6;

  var result = ary.filter(function(x){

  return x === undefined; 

  });

  console.log(result);

這道題考察的時候數(shù)組的初始化和filter方法。

第一眼看上去,以為會輸出[undefined,undefined,undefined],但是實(shí)際輸出卻是undefined,為什么會這樣?

這是因?yàn)樵贘avaScript里存在稀疏數(shù)組的概念,數(shù)組在初始化時,只會對已經(jīng)確定索引的選項(xiàng)進(jìn)行初始化,對于不存在索引的選項(xiàng)不進(jìn)行初始化,通過以下代碼可以確定。

  0 in ary;//true

  1 in ary;//true

  3 in ary;//false     

  4 in ary;//false

  6 in ary;//true 

對數(shù)組使用in運(yùn)算符時,是通過枚舉數(shù)組的索引,通過3和4返回false可以知道,ary[3]和ary[4]實(shí)際是不存在的,未進(jìn)行初始化。

我們再來看看 Array.prototype.filter方法和polyfill,注意代碼中標(biāo)注的地方。

Array.prototype.filter = function(fun /*thisArg*/){

  if(this === void 0 || this === null){

    throw new TypeError();

  }

  var t = Object(this);

  var len = t.length >>> 0;

  if(typeof fun !== "function"){

    throw new TypeError();

  }

  var res = [];

  var thisArg = arguments.length >=2 ? arguments[1]:void 0;

  for(var i = 0;i

在filter方法源碼中,我發(fā)現(xiàn)使用了in運(yùn)算符,而arg數(shù)組沒有對索引為3,4,5的值進(jìn)行初始化,因此會直接跳過執(zhí)行,所以最后返回undefined。

題3

function caseshow(val){

  switch(val){

    switch(value){

      case "A":

        console.log("A");

               break;

       case "B":

        console.log("B");

               break;

         case "C":

        console.log("C");

                        break;

      default:
        console.log("do not know!");

    }          

  }      

}    

caseshow(new String("A"));

咋一看,很多人會以為輸出"case A",但實(shí)際輸出"do not know"。why? 這道題考察的知識點(diǎn)是:switch和string,我們需要知道一下兩點(diǎn):

1,JavaScript中switch執(zhí)行的是嚴(yán)格相等(===)。 2,字符串和string的實(shí)例不一樣。

第二點(diǎn)我們可以測試下。

var s_p = "foo"; var s_o = new String(s_p)

console.log(typeof s_p) //"string" 
console.log(typeof s_o) //"object"
console.log(s_p === s_o)  //"false"

因此針對題目中的"A"與String("A")并不嚴(yán)格相等,最終會返回‘do not know’

題4 針對上面的題目3,我們稍作一點(diǎn)改動,成為下面的題目4,再看看結(jié)果輸出什么?

function caseshow2(val){ 
    switch(val){   
       case "A":
    console.log("A");
    break;   case "B":
    console.log("B");
    break;   case undefined:
    console.log("undefined");
    break;   default:
    console.log("do not know!"); 
 } } 
   caseshow2(String("A"));

    題目4相對于題目3,只是在最后調(diào)用的時候傳入的參數(shù)是String("A"),它的結(jié)果就變成了"Case A"。這是為什么呢?

其實(shí)很簡單,String(X)返回的是一個字符串而不會生成一個新的String實(shí)例,因此與"A"是嚴(yán)格相等的

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

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

相關(guān)文章

  • 為什么你學(xué)不會遞歸?刷題幾個月,告別遞歸,談?wù)勎业慕?jīng)驗(yàn)

    摘要:第一遞歸函數(shù)功能假設(shè)的功能是求第項(xiàng)的值,代碼如下找出遞歸結(jié)束的條件顯然,當(dāng)或者我們可以輕易著知道結(jié)果。定義遞歸函數(shù)功能假設(shè)函數(shù)的功能是反轉(zhuǎn)但鏈表,其中表示鏈表的頭節(jié)點(diǎn)。可能很多人在大一的時候,就已經(jīng)接觸了遞歸了,不過,我敢保證很多人初學(xué)者剛開始接觸遞歸的時候,是一臉懵逼的,我當(dāng)初也是,給我的感覺就是,遞歸太神奇了! 可能也有一大部分人知道遞歸,也能看的懂遞歸,但在實(shí)際做題過程中,卻不知道怎么...

    Achilles 評論0 收藏0
  • 不可變數(shù)據(jù)

    摘要:為什么要有不可變數(shù)據(jù)首先,不可變數(shù)據(jù)類型是源于函數(shù)式編程中的,是一條必備的準(zhǔn)則。另外在中的廣泛應(yīng)用,也讓函數(shù)式編程火熱,而函數(shù)式編程最重要的原則之一就是不可變數(shù)據(jù),所以你在使用的時候,改變必須返回新的。 不可變數(shù)據(jù) 引入 我是通過使用 React 才去關(guān)注 immutable data 這個概念的。事實(shí)上,你去搜 immutable 的 JS 相關(guān)文章,也基本都是近兩年的,大概是隨著 ...

    lanffy 評論0 收藏0
  • JavaScript幾個重要的知識點(diǎn)(1) ---- 面向?qū)ο?/b>

    摘要:中幾個最重要的大知識點(diǎn)面向?qū)ο笫录惒浇换ッ嫦驅(qū)ο笤谥锌梢园讶我獾囊煤妥兞慷伎闯墒且粋€對象。我們可以寫一個通用方法來模擬面向?qū)ο笳Z言的多態(tài) JavaScript中幾個最重要的大知識點(diǎn) 面向?qū)ο?DOM事件 異步交互ajax 面向?qū)ο?在JS中可以把任意的引用和變量都看成是一個對象。面向?qū)ο蟮闹饕齻€表現(xiàn)形式: 封裝 繼承 多態(tài) 1. 封裝 1.1 單例模式 var obj={...

    acrazing 評論0 收藏0
  • JavaScript幾個重要的知識點(diǎn)(2) ---- DOM事件

    摘要:使用來移除事件,參數(shù)必須與要移除的事件處理函數(shù)地址指針相同。在低版本瀏覽器中,綁定級事件的方法為中的級事件的事件處理程序都是在冒泡階段執(zhí)行的。 JavaScript中幾個最重要的大知識點(diǎn) 面向?qū)ο?DOM事件 異步交互ajax 事件 事件就是文檔和瀏覽器的瞬間交互行為 1.事件類型 點(diǎn)擊: click 滾輪: scroll 滑動: move 進(jìn)入: enter 加載: load ...

    dantezhao 評論0 收藏0

發(fā)表評論

0條評論

itvincent

|高級講師

TA的文章

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