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

資訊專欄INFORMATION COLUMN

聽飛狐聊JavaScript設(shè)計(jì)模式系列01

CHENGKANG / 2183人閱讀

摘要:前言大家好,小弟飛狐,愛學(xué)習(xí),愛裝逼,樂于分享,初來乍到,請(qǐng)多多關(guān)照。特別注意一下,函數(shù)在中是對(duì)象,不是一種數(shù)據(jù)類型,這可是世界的一等公民。和,和的關(guān)系又很曖昧,后面細(xì)說,要不然會(huì)暈菜。基本數(shù)據(jù)類型,,,,,這五種基本數(shù)據(jù)類型是按值訪問的。

前言

大家好,小弟飛狐,愛學(xué)習(xí),愛裝逼,樂于分享,初來乍到,請(qǐng)多多關(guān)照(~ o ~)~zZ。出道幾年,對(duì)JavaScript情有獨(dú)鐘,聊技術(shù)之前,啰嗦啰嗦,雖然咱們都系程序猿,但是一定要多鍛煉,跑跑步,爬爬山蝦米的,身體系革命的本錢。

另外,個(gè)人覺得JavaScript是很文藝的一門語言,文藝范兒會(huì)更適合這門語言(個(gè)人觀點(diǎn),不喜勿噴),JS基礎(chǔ)學(xué)習(xí)資料在網(wǎng)上非常多,所以我們這里從JS面向?qū)ο箝_始(注:需要一(zha)定(shi)的JS基礎(chǔ)),本系列作為JavaScript擴(kuò)展讀物(有講錯(cuò)的地方,歡迎大家指出),又扯了這么多,這回真的來進(jìn)入正題了:

JS數(shù)據(jù)類型介紹

ECMAScript的數(shù)據(jù)類型值分為基本類型值和引用類型值。

用typeof操作符來判斷類型,當(dāng)然如何準(zhǔn)確判斷類型,后面還會(huì)聊到。

Function特別注意一下,函數(shù)在ECMAScript中是對(duì)象,不是一種數(shù)據(jù)類型,這可是JS世界的一等公民。

undefined和null,null和object的關(guān)系又很曖昧,后面細(xì)說,要不然會(huì)暈菜。

基本數(shù)據(jù)類型:Undefined,Null,Boolean,Number,String,這五種基本數(shù)據(jù)類型是按值訪問的。

    var o;            // undefined表示變量聲明了,卻沒有賦值
    var o=null;        // null表示空值
    var o="字符串";    // string字符串
    var o=false;    // boolean布爾值包括true,false
    var o=1;        // number,可以是整數(shù)和小數(shù)
    var o=NaN        // 非數(shù)字

JavaScript是弱類型語言,存在丟失精度問題,本系列以面向?qū)ο鬄橹?,所以不討論此問題;

JS引用類型介紹

包括:Object類型,Array類型,Date類型,RegExp類型,

Function類型,需要特別注意一下,函數(shù)在ECMAScript中是對(duì)象,不是一種數(shù)據(jù)類型,每個(gè)函數(shù)都是Function類型的實(shí)例,函數(shù)名是指向函數(shù)對(duì)象的指針,這可是JS世界的一等公民

基本包裝類型,ECMAScript提供了三個(gè)特殊的引用類型,主要為了便于操作基本類型的值,包括:

Boolean

Number

String

單體內(nèi)置對(duì)象,包括:

Global對(duì)象,這是個(gè)無形的對(duì)象,

Math對(duì)象,這是用來做各種數(shù)學(xué)運(yùn)算的內(nèi)置對(duì)象

引用類型的值是保存在內(nèi)存中的對(duì)象,也就是說,在操作對(duì)象時(shí),實(shí)際上是在操作對(duì)象的引用,而不是實(shí)際的對(duì)象

    var o=[1,2,3];        // Array
    var o=new Date();    // Date
    var o={};            // Object

講類型就是基本的一個(gè)過渡介紹,Object和Function后面還會(huì)細(xì)講,其余的類型可以根據(jù)上面列出的,具體的去參考書籍(推薦JavaScript高級(jí)程序設(shè)計(jì))或其他資料,正題開始,先來個(gè)預(yù)熱篇,吼吼~~

ECMAScript5數(shù)組的新特性

作為預(yù)熱篇,我們先來聊聊,ECMAScript5中數(shù)組的新特性,個(gè)人做了如下區(qū)分:

位置方法:indexOf,lastIndexOf

迭代方法:every,filter,forEach,some,map

縮小方法:reduce,reduceRight

(注:迭代方法回調(diào)支持3個(gè)參數(shù),第1個(gè)是遍歷的數(shù)組內(nèi)容;第2個(gè)是對(duì)應(yīng)的數(shù)組索引,第3個(gè)是數(shù)組本身)

來吧,每個(gè)方法都過一遍,敲敲代碼:

indexOf

包含兩個(gè)參數(shù),第一個(gè)是要檢索的字符串值,第二個(gè)是可選參數(shù),表示開始檢索的位置,注:必須是合法值(0,length-1);返回值是該字符串首次出現(xiàn)的位置,找不到則返回-1;

    var arr = ["衛(wèi)士",3,5,"皮帶",8,6,"包裹"];
    var i = arr.indexOf("皮帶");
    alert(i);        // 返回3
    
    var arr = ["衛(wèi)士",3,5,"皮帶",8,6,"包裹"];
    var i = arr.indexOf("皮帶",6);
    alert(i);        // 返回-1

由上面的例子,我們可以掌握indexOf的基本用法,可如果一個(gè)數(shù)組中重復(fù)存在相同的值,怎么樣把重復(fù)項(xiàng)的索引一一找出來嘞,讓帥狐show給你看,如下:

    var arr = ["衛(wèi)士",3,5,"包裹",8,6,"皮帶","包裹","包裹"];
    var oArr = [];    // 定義一個(gè)存放索引的數(shù)組
    var i = arr.indexOf("包裹");    // 索引位置
    
    while(i>-1){    // 用while循環(huán),直到找不到索引為止
        oArr.push(i);
        i = arr.indexOf("包裹",i+1);
    }
    alert(oArr);
    

怎么樣,帥吧,next...

lastIndexOf

跟indexOf,基本一樣,不同的是,這個(gè)方法是從后往前檢索;

    var arr = ["衛(wèi)士",3,5,"包裹",8,6,"皮帶","包裹","包裹"];
    var oArr = [];    // 定義一個(gè)存放索引的數(shù)組
    var i = arr.lastIndexOf("包裹");
    alert(i);        // 返回8
    
every

對(duì)數(shù)組的每個(gè)元素都進(jìn)行函數(shù)運(yùn)行,如果每個(gè)都是true,則返回true,否則,如果有一個(gè)是false的話,嘿嘿~~,那就返回false咯

    var arr = ["衛(wèi)士",3,5,"包裹",8,6,"皮帶","包裹","包裹"];
    var res = arr.every(function(item){
        return typeof item=="string";    // 這里復(fù)習(xí)下typeof操作符
    })    
    alert(res);    // false,把數(shù)組中的數(shù)字項(xiàng)全部去掉,則返回true
filter

對(duì)數(shù)組的每個(gè)元素都進(jìn)行函數(shù)運(yùn)行,返回過濾后的選項(xiàng)

    var arr = ["衛(wèi)士",23,"包裹",565,"皮帶","包裹","包裹"];
    var res = arr.filter(function(item){
        return typeof item=="string";    // 這里復(fù)習(xí)下typeof操作符
    })    
    alert(res);    // 衛(wèi)士, 包裹, 皮帶, 包裹, 包裹
forEach

對(duì)數(shù)組的每個(gè)元素都進(jìn)行函數(shù)運(yùn)行,注:該方法沒有返回值

    var arr = {                            // 定義一個(gè)對(duì)象字面量
        num: [[1,3,5],[2,3,8],[9,6,1]],    // 一個(gè)二維數(shù)組
        numR:function(o)                // 處理函數(shù)                
        {
            o.reverse();        // 數(shù)組反向
        }
    };

    arr.num.forEach(function(item){
        arr.numR(item);
    })

這個(gè)例子,剛接觸面向?qū)ο蟮耐瑫?huì)覺得略難,多敲代碼多理解,無他,唯手熟爾~

some

對(duì)數(shù)組的每個(gè)元素都進(jìn)行函數(shù)運(yùn)行,對(duì)任一項(xiàng)返回為true,則返回為true,跟上面的every相似,好像every是處女座樣(^__^)

    var arr = [1,3,5];
    var res = arr.some(function(item){
        return item>6;
    })
    alert(res);    // 返回false
map

對(duì)數(shù)組的每個(gè)元素都進(jìn)行函數(shù)運(yùn)行,返回每次函數(shù)調(diào)用的結(jié)果組成的數(shù)組(略抽象),來吧,看例子

    var arr = [1,3,5];
    var res = arr.map(function(item){
        return item+item;
    })
    alert(res);    // 返回2,6,10
reduce和reduceRight

這倆一起說,兄弟倆嘛,這倆方法都會(huì)選代數(shù)組所有項(xiàng),然后構(gòu)建一個(gè)最終返回的值。reduce()方法從數(shù)組的第一項(xiàng)開始,逐個(gè)遍歷到最后,reduceRight則相反

    var arr = [1,3,5];
    var res = arr.reduce(function(prev,cur,index,array){
        return prev+cur;
    })
    alert(res);    // 返回9
    
    var arr = [[1,3,5],[9,8,6,2,1],[6,2,1]];    
    function s(prev,cur){
        return prev.concat(cur);    // 合并二維數(shù)組
    }
    function m(prev,cur){
        return prev>cur?prev:cur;    // 取最大值
    }
    var res = arr.reduce(s).reduceRight(m);        // 鏈?zhǔn)秸{(diào)用
    alert(res);    // 返回9
話外音

既然咱聊的是面向?qū)ο?,設(shè)計(jì)模式,還是再啰嗦一下,在這就不要去爭(zhēng)論JavaScript是基于對(duì)象還是面向?qū)ο?,不管是軒轅劍還是七星劍,能靈活運(yùn)用才是關(guān)鍵(這么說會(huì)不會(huì)有點(diǎn)賤-_-)

面向?qū)ο蟮幕A(chǔ)扎實(shí)了,學(xué)框架(AngularJS,React),或者學(xué)其他腳本語言(Php)等,上手都會(huì)很快

再則程序世界學(xué)東西都是鍛煉思維,掌握以前未掌握的,變成自己的一套才是精髓

另外重申一下,本系列是JS進(jìn)階,初學(xué)者慎讀,尤其設(shè)計(jì)模式的一些知識(shí)會(huì)跟java進(jìn)行比較,模擬等

預(yù)熱篇介紹的數(shù)組新特性在后面的設(shè)計(jì)模式實(shí)戰(zhàn)中會(huì)用到,其他基礎(chǔ)知識(shí),如數(shù)組,閉包等請(qǐng)參閱書籍或其他資料

這一回主要介紹了下JavaScript的數(shù)據(jù)類型,聊了ES5中數(shù)組的9個(gè)新特性,下一回聊JavaScript的Object類型。

注:此系飛狐原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處

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

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

相關(guān)文章

  • 飛狐JavaScript設(shè)計(jì)模式系列12

    摘要:,對(duì)組合對(duì)象執(zhí)行的操作可以向下傳遞到葉子節(jié)點(diǎn)進(jìn)行操作。組合模式之圖片庫圖片庫可以有選擇地隱藏或顯示圖片庫的全部或某一部分單獨(dú)的或是部分的。 本回內(nèi)容介紹 上一回,聊了橋接模式,做了一道計(jì)算題;介一回,聊組合模式(Composite),官方描述組合模式將對(duì)象組合成樹形結(jié)構(gòu)以表示部分-整體的層次結(jié)構(gòu),組合模式使得用戶對(duì)單個(gè)對(duì)象和組合對(duì)象的使用具有一致性。 組合模式特性 這里我理了一下,就組...

    HitenDev 評(píng)論0 收藏0
  • 飛狐JavaScript設(shè)計(jì)模式系列06

    本回內(nèi)容介紹 上一回聊到JS中模擬接口,裝飾者模式,摻元類,分析了backbone的繼承源碼,感覺還好吧! 介一回,偶們來聊一下在JS單例模式(singleton),單例模式其實(shí)運(yùn)用很廣泛,比如:jquery,AngularJS,underscore吖蝦米的都是單例模式,來吧,直接開始咯: 1. 單例模式 保證一個(gè)類只有一個(gè)實(shí)例,從全局命名空間里提供一個(gè)唯一的訪問點(diǎn)來訪問該對(duì)象。其實(shí)之前寫過的對(duì)象...

    hiYoHoo 評(píng)論0 收藏0
  • 飛狐JavaScript設(shè)計(jì)模式系列02

    摘要:本回內(nèi)容介紹上一回聊到數(shù)據(jù)類型,簡(jiǎn)單的過了一遍,包括個(gè)數(shù)組新特性等,這一回來聊聊對(duì)象,結(jié)合數(shù)組來實(shí)戰(zhàn)一些例子,在做題中成長(zhǎng),記憶會(huì)更深刻,來吧,開始咯創(chuàng)建實(shí)例的方式有兩種使用操作符后跟構(gòu)造函數(shù)飛狐使用對(duì)象字面量表示法飛狐也可以飛狐這種寫法與 本回內(nèi)容介紹 上一回聊到JS數(shù)據(jù)類型,簡(jiǎn)單的過了一遍,包括9個(gè)數(shù)組新特性等,這一回來聊聊Object對(duì)象,結(jié)合數(shù)組來實(shí)戰(zhàn)一些例子,在做題中成長(zhǎng),記...

    tangr206 評(píng)論0 收藏0
  • 飛狐JavaScript設(shè)計(jì)模式系列11

    摘要:橋接模式之特權(quán)函數(shù)特權(quán)函數(shù),用一些具有特權(quán)的方法作為橋梁以便訪問私有空間,可以回憶一下之前的系列。連續(xù)自然數(shù)分組,計(jì)算最多組的個(gè)數(shù)將至這個(gè)連續(xù)自然數(shù)分成組使每組相加的值相等。個(gè)數(shù)組中數(shù)字最多的一組有個(gè)此時(shí)的和為。 本回內(nèi)容介紹 上一回,聊了適配器模式,圖片預(yù)加載,介一回,聊橋接模式(Bridge),跟之前一樣,難度比較小,橋接模式將抽象部分與它的實(shí)現(xiàn)部分分離,通過橋接模式聯(lián)系彼此,同時(shí)...

    wanglu1209 評(píng)論0 收藏0
  • 飛狐JavaScript設(shè)計(jì)模式系列10

    摘要:本回內(nèi)容介紹上一回,聊了代理模式,虛擬代理,圖片懶加載,介一回,也比較容易,適配器模式,用一個(gè)新的接口對(duì)現(xiàn)有類的接口進(jìn)行包裝,處理類與的不匹配。這一回,主要聊了適配器模式,圖片預(yù)加載,主要還是理解下一回,聊一聊橋接模式,順便做一做計(jì)算題。 本回內(nèi)容介紹 上一回,聊了代理模式,虛擬代理,圖片懶加載,介一回,也比較容易,適配器模式(Adapter),用一個(gè)新的接口對(duì)現(xiàn)有類的接口進(jìn)行包裝,處...

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

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

0條評(píng)論

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