成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Javascript中幾個(gè)看起來簡(jiǎn)單,卻不一定會(huì)做的題

itvincent / 424人閱讀

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

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

題目1

var val = "smtg";

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

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

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

//語句1

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

//語句2

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

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

"Something".

題目2

我們?cè)賮砜纯聪旅孢@道題。

  var ary = [0,1,2];

  ary[6] = 6;

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

  return x === undefined; 

  });

  console.log(result);

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

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

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

  0 in ary;//true

  1 in ary;//true

  3 in ary;//false     

  4 in ary;//false

  6 in ary;//true 

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

我們?cè)賮砜纯?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ù)組沒有對(duì)索引為3,4,5的值進(jìn)行初始化,因此會(huì)直接跳過執(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"));

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

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

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

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"

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

題4 針對(duì)上面的題目3,我們稍作一點(diǎn)改動(dòng),成為下面的題目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相對(duì)于題目3,只是在最后調(diào)用的時(shí)候傳入的參數(shù)是String("A"),它的結(jié)果就變成了"Case A"。這是為什么呢?

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

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

0條評(píng)論

itvincent

|高級(jí)講師

TA的文章

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