摘要:前言大家好,小弟飛狐,愛學習,愛裝逼,樂于分享,初來乍到,請多多關照。特別注意一下,函數在中是對象,不是一種數據類型,這可是世界的一等公民。和,和的關系又很曖昧,后面細說,要不然會暈菜。基本數據類型,,,,,這五種基本數據類型是按值訪問的。
前言
大家好,小弟飛狐,愛學習,愛裝逼,樂于分享,初來乍到,請多多關照(~ o ~)~zZ。出道幾年,對JavaScript情有獨鐘,聊技術之前,啰嗦啰嗦,雖然咱們都系程序猿,但是一定要多鍛煉,跑跑步,爬爬山蝦米的,身體系革命的本錢。
另外,個人覺得JavaScript是很文藝的一門語言,文藝范兒會更適合這門語言(個人觀點,不喜勿噴),JS基礎學習資料在網上非常多,所以我們這里從JS面向對象開始(注:需要一(zha)定(shi)的JS基礎),本系列作為JavaScript擴展讀物(有講錯的地方,歡迎大家指出),又扯了這么多,這回真的來進入正題了:
JS數據類型介紹ECMAScript的數據類型值分為基本類型值和引用類型值。
用typeof操作符來判斷類型,當然如何準確判斷類型,后面還會聊到。
Function特別注意一下,函數在ECMAScript中是對象,不是一種數據類型,這可是JS世界的一等公民。
undefined和null,null和object的關系又很曖昧,后面細說,要不然會暈菜。
基本數據類型:Undefined,Null,Boolean,Number,String,這五種基本數據類型是按值訪問的。
var o; // undefined表示變量聲明了,卻沒有賦值 var o=null; // null表示空值 var o="字符串"; // string字符串 var o=false; // boolean布爾值包括true,false var o=1; // number,可以是整數和小數 var o=NaN // 非數字
JavaScript是弱類型語言,存在丟失精度問題,本系列以面向對象為主,所以不討論此問題;
JS引用類型介紹包括:Object類型,Array類型,Date類型,RegExp類型,
Function類型,需要特別注意一下,函數在ECMAScript中是對象,不是一種數據類型,每個函數都是Function類型的實例,函數名是指向函數對象的指針,這可是JS世界的一等公民
基本包裝類型,ECMAScript提供了三個特殊的引用類型,主要為了便于操作基本類型的值,包括:
Boolean
Number
String
單體內置對象,包括:
Global對象,這是個無形的對象,
Math對象,這是用來做各種數學運算的內置對象
引用類型的值是保存在內存中的對象,也就是說,在操作對象時,實際上是在操作對象的引用,而不是實際的對象
var o=[1,2,3]; // Array var o=new Date(); // Date var o={}; // Object
ECMAScript5數組的新特性講類型就是基本的一個過渡介紹,Object和Function后面還會細講,其余的類型可以根據上面列出的,具體的去參考書籍(推薦JavaScript高級程序設計)或其他資料,正題開始,先來個預熱篇,吼吼~~
作為預熱篇,我們先來聊聊,ECMAScript5中數組的新特性,個人做了如下區分:
位置方法:indexOf,lastIndexOf
迭代方法:every,filter,forEach,some,map
縮小方法:reduce,reduceRight
(注:迭代方法回調支持3個參數,第1個是遍歷的數組內容;第2個是對應的數組索引,第3個是數組本身)
來吧,每個方法都過一遍,敲敲代碼:
indexOf包含兩個參數,第一個是要檢索的字符串值,第二個是可選參數,表示開始檢索的位置,注:必須是合法值(0,length-1);返回值是該字符串首次出現的位置,找不到則返回-1;
var arr = ["衛士",3,5,"皮帶",8,6,"包裹"]; var i = arr.indexOf("皮帶"); alert(i); // 返回3 var arr = ["衛士",3,5,"皮帶",8,6,"包裹"]; var i = arr.indexOf("皮帶",6); alert(i); // 返回-1
由上面的例子,我們可以掌握indexOf的基本用法,可如果一個數組中重復存在相同的值,怎么樣把重復項的索引一一找出來嘞,讓帥狐show給你看,如下:
var arr = ["衛士",3,5,"包裹",8,6,"皮帶","包裹","包裹"]; var oArr = []; // 定義一個存放索引的數組 var i = arr.indexOf("包裹"); // 索引位置 while(i>-1){ // 用while循環,直到找不到索引為止 oArr.push(i); i = arr.indexOf("包裹",i+1); } alert(oArr);
怎么樣,帥吧,next...
lastIndexOf跟indexOf,基本一樣,不同的是,這個方法是從后往前檢索;
var arr = ["衛士",3,5,"包裹",8,6,"皮帶","包裹","包裹"]; var oArr = []; // 定義一個存放索引的數組 var i = arr.lastIndexOf("包裹"); alert(i); // 返回8every
對數組的每個元素都進行函數運行,如果每個都是true,則返回true,否則,如果有一個是false的話,嘿嘿~~,那就返回false咯
var arr = ["衛士",3,5,"包裹",8,6,"皮帶","包裹","包裹"]; var res = arr.every(function(item){ return typeof item=="string"; // 這里復習下typeof操作符 }) alert(res); // false,把數組中的數字項全部去掉,則返回truefilter
對數組的每個元素都進行函數運行,返回過濾后的選項
var arr = ["衛士",23,"包裹",565,"皮帶","包裹","包裹"]; var res = arr.filter(function(item){ return typeof item=="string"; // 這里復習下typeof操作符 }) alert(res); // 衛士, 包裹, 皮帶, 包裹, 包裹forEach
對數組的每個元素都進行函數運行,注:該方法沒有返回值
var arr = { // 定義一個對象字面量 num: [[1,3,5],[2,3,8],[9,6,1]], // 一個二維數組 numR:function(o) // 處理函數 { o.reverse(); // 數組反向 } }; arr.num.forEach(function(item){ arr.numR(item); })
這個例子,剛接觸面向對象的童鞋會覺得略難,多敲代碼多理解,無他,唯手熟爾~
some對數組的每個元素都進行函數運行,對任一項返回為true,則返回為true,跟上面的every相似,好像every是處女座樣(^__^)
var arr = [1,3,5]; var res = arr.some(function(item){ return item>6; }) alert(res); // 返回falsemap
對數組的每個元素都進行函數運行,返回每次函數調用的結果組成的數組(略抽象),來吧,看例子
var arr = [1,3,5]; var res = arr.map(function(item){ return item+item; }) alert(res); // 返回2,6,10reduce和reduceRight
這倆一起說,兄弟倆嘛,這倆方法都會選代數組所有項,然后構建一個最終返回的值。reduce()方法從數組的第一項開始,逐個遍歷到最后,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); // 合并二維數組 } function m(prev,cur){ return prev>cur?prev:cur; // 取最大值 } var res = arr.reduce(s).reduceRight(m); // 鏈式調用 alert(res); // 返回9話外音
既然咱聊的是面向對象,設計模式,還是再啰嗦一下,在這就不要去爭論JavaScript是基于對象還是面向對象,不管是軒轅劍還是七星劍,能靈活運用才是關鍵(這么說會不會有點賤-_-)
面向對象的基礎扎實了,學框架(AngularJS,React),或者學其他腳本語言(Php)等,上手都會很快
再則程序世界學東西都是鍛煉思維,掌握以前未掌握的,變成自己的一套才是精髓
另外重申一下,本系列是JS進階,初學者慎讀,尤其設計模式的一些知識會跟java進行比較,模擬等
預熱篇介紹的數組新特性在后面的設計模式實戰中會用到,其他基礎知識,如數組,閉包等請參閱書籍或其他資料
這一回主要介紹了下JavaScript的數據類型,聊了ES5中數組的9個新特性,下一回聊JavaScript的Object類型。
注:此系飛狐原創,轉載請注明出處
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/86094.html
摘要:,對組合對象執行的操作可以向下傳遞到葉子節點進行操作。組合模式之圖片庫圖片庫可以有選擇地隱藏或顯示圖片庫的全部或某一部分單獨的或是部分的。 本回內容介紹 上一回,聊了橋接模式,做了一道計算題;介一回,聊組合模式(Composite),官方描述組合模式將對象組合成樹形結構以表示部分-整體的層次結構,組合模式使得用戶對單個對象和組合對象的使用具有一致性。 組合模式特性 這里我理了一下,就組...
本回內容介紹 上一回聊到JS中模擬接口,裝飾者模式,摻元類,分析了backbone的繼承源碼,感覺還好吧! 介一回,偶們來聊一下在JS單例模式(singleton),單例模式其實運用很廣泛,比如:jquery,AngularJS,underscore吖蝦米的都是單例模式,來吧,直接開始咯: 1. 單例模式 保證一個類只有一個實例,從全局命名空間里提供一個唯一的訪問點來訪問該對象。其實之前寫過的對象...
摘要:本回內容介紹上一回聊到數據類型,簡單的過了一遍,包括個數組新特性等,這一回來聊聊對象,結合數組來實戰一些例子,在做題中成長,記憶會更深刻,來吧,開始咯創建實例的方式有兩種使用操作符后跟構造函數飛狐使用對象字面量表示法飛狐也可以飛狐這種寫法與 本回內容介紹 上一回聊到JS數據類型,簡單的過了一遍,包括9個數組新特性等,這一回來聊聊Object對象,結合數組來實戰一些例子,在做題中成長,記...
摘要:橋接模式之特權函數特權函數,用一些具有特權的方法作為橋梁以便訪問私有空間,可以回憶一下之前的系列。連續自然數分組,計算最多組的個數將至這個連續自然數分成組使每組相加的值相等。個數組中數字最多的一組有個此時的和為。 本回內容介紹 上一回,聊了適配器模式,圖片預加載,介一回,聊橋接模式(Bridge),跟之前一樣,難度比較小,橋接模式將抽象部分與它的實現部分分離,通過橋接模式聯系彼此,同時...
摘要:本回內容介紹上一回,聊了代理模式,虛擬代理,圖片懶加載,介一回,也比較容易,適配器模式,用一個新的接口對現有類的接口進行包裝,處理類與的不匹配。這一回,主要聊了適配器模式,圖片預加載,主要還是理解下一回,聊一聊橋接模式,順便做一做計算題。 本回內容介紹 上一回,聊了代理模式,虛擬代理,圖片懶加載,介一回,也比較容易,適配器模式(Adapter),用一個新的接口對現有類的接口進行包裝,處...
閱讀 947·2021-09-26 09:55
閱讀 3192·2021-09-22 15:36
閱讀 2982·2021-09-04 16:48
閱讀 3142·2021-09-01 11:41
閱讀 2591·2019-08-30 13:49
閱讀 1491·2019-08-29 18:46
閱讀 3546·2019-08-29 17:28
閱讀 3425·2019-08-29 14:11