react-native-gp-utils(對(duì)react-native全局進(jìn)行配置,對(duì)內(nèi)置對(duì)象原型鏈增加方法,增加常用全局方法.)

react-native-gp-utils

對(duì)react-native全局進(jìn)行配置,對(duì)內(nèi)置對(duì)象原型鏈增加方法,增加常用全局方法.

每次新建react-native項(xiàng)目之后都會(huì)發(fā)現(xiàn)有一些很常用的方法在這個(gè)項(xiàng)目中也會(huì)用到,有些對(duì)全局的配置(禁用模擬器上顯示黃框,release發(fā)布版本中時(shí)console打印失效等).這些如果在新項(xiàng)目中在搞一次的話的確是很麻煩,所以我就將其封裝成了這個(gè)庫.

github地址: https://github.com/geek-prince/react-native-gp-utils

npm地址: https://www.npmjs.com/package/react-native-gp-utils

[TOC]

安裝

npm install react-native-gp-utils --save

如何使用

首先導(dǎo)入插件

三種侵入式等級(jí)(根據(jù)情況選擇其中一種方式導(dǎo)入)

  • 0:非侵入式:每個(gè)要用到的方法的文件中都要導(dǎo)入指定的工具類,并以工具類.方法名的方式調(diào)用方法.

    • 優(yōu)點(diǎn):不會(huì)占用任何一個(gè)全局變量和任何一個(gè)內(nèi)建對(duì)象(Array,String對(duì)象等)的prototype原型鏈屬性,不會(huì)造成全局變量污染
    • 缺點(diǎn):每個(gè)要使用的文件都要導(dǎo)入相應(yīng)的庫文件,不方便
  • 1:部分侵入式(推薦):只用在入口文件中導(dǎo)入一次即可,并以工具類.方法名方式調(diào)用方法,內(nèi)建對(duì)象以arr.unshiftFromIndex的形式調(diào)用.

    • 優(yōu)點(diǎn):相對(duì)方便,只用入口文件導(dǎo)入一次,其他文件都可以使用.
    • 缺點(diǎn):會(huì)占用與各個(gè)工具類名相同的全局變量的屬性(也可把各個(gè)工具類名定義為自定義的變量名),以及各個(gè)內(nèi)建對(duì)象(Array,String對(duì)象等)的prototype原型鏈的與方法名相同的屬性
  • 2:完全侵入式:只用在入口文件中導(dǎo)入一次即可,并以方法名方式直接調(diào)用方法,內(nèi)建對(duì)象以arr.unshiftFromIndex的形式調(diào)用.

    • 優(yōu)點(diǎn):非常方便,在入口文件中導(dǎo)入一次即可,在任何地方使用任何方法,只用直接用方法名就可以調(diào)用方法.
    • 缺點(diǎn):會(huì)占據(jù)各個(gè)工具類中所有和方法名相同的全局變量(會(huì)造成全局變量污染),和各個(gè)內(nèi)建對(duì)象(Array,String對(duì)象等)的prototype原型鏈的與方法名相同的屬性

三種侵入式等級(jí)分別導(dǎo)入插件的方式

導(dǎo)入庫->設(shè)置配置選項(xiàng)(可選)->自定義各個(gè)庫文件名(可選,在侵入式等級(jí)1中使用)->給出侵入式等級(jí)初始化

1.導(dǎo)入庫

import GPUtils from 'react-native-gp-utils';

2.設(shè)置配置選項(xiàng)(可選)

GPUtils.configs={yellowBoxOn:true}; //這里設(shè)置打開警告提示黃框

3.自定義各個(gè)庫文件名(可選,在侵入式等級(jí)1中使用)

//這里表示將CommonUtils,ArrayUtils工具類的名稱分別自定義為CU,AU,沒給出的按默認(rèn)的工具類的名稱.
GPUtils.namesMap={CommonUtils:'CU',ArrayUtils:'AU'};

4.給出侵入式等級(jí)初始化

4.1.以侵入式等級(jí)0初始化
// let {CommonUtils,ArrayUtils}=GPUtils.initWtihInvadeScale(0);
// 也可以向下面這樣為之自定義名稱
let {CommonUtils:CU,ArrayUtils:AU}=GPUtils.initWtihInvadeScale(0);
4.2.以侵入式等級(jí)1初始化(推薦)
GPUtils.initWtihInvadeScale(1); //自定義名稱在上面第3步
4.3.以侵入式等級(jí)2初始化
GPUtils.initWtihInvadeScale(2); //完全侵入,不支持自定義名稱(因?yàn)槊總€(gè)方法名都會(huì)成為全局變量)

可配置選項(xiàng)(上面第2步)

配置項(xiàng) 說明 默認(rèn)值
yellowBoxOn 指定警告黃框(即在打印warn警告信息時(shí),模擬器先放出現(xiàn)的警告黃框)是否開啟 false:關(guān)閉(系統(tǒng)默認(rèn)是開啟)
releaseLogOn 指定是否在release發(fā)布版本中打印log的信息(release版本中系統(tǒng)默認(rèn)是不會(huì)將console.log打印除去的,但是又不可能發(fā)布前特地刪一次所有注釋,所以直接導(dǎo)入庫就行了,默認(rèn)就會(huì)在release版本清除log打印) false:關(guān)閉release版本中的打印

拓展的工具類及其對(duì)應(yīng)的功能

方法的四種類型,下面會(huì)有解釋

  • CommonUtils:一些全局都可能用到的常用方法(里面全部為normal:普通方法)
  • MathUtils:一些和計(jì)算相關(guān)的方法(里面全部為normal:普通方法)
  • RNUtils:對(duì)react-native組件api的簡單封裝,常用值的導(dǎo)出,適配問題的一些處理(里面全部為normal:普通方法,與普通屬性變量)
  • RegExpUtils:一些和正則相關(guān)的方法(里面全部為normal:普通方法)
  • RandomUtils:一些和隨機(jī)相關(guān)的方法(里面全部為normal:普通方法)
  • 內(nèi)建對(duì)象的工具類:
    • ArrayUtils:對(duì)內(nèi)建對(duì)象Array拓展的相關(guān)方法(里面的方法全部為baseOnInvadeScale)
    • DateUtils:對(duì)內(nèi)建對(duì)象Date拓展的相關(guān)方法(里面方法有普通方法,也有both類型)
    • NumberUtils:對(duì)內(nèi)建對(duì)象Number拓展的相關(guān)方法(里面的方法全部為onlyProto)
    • ObjectUtils:對(duì)內(nèi)建對(duì)象Object拓展的相關(guān)方法(本來在Object的原型鏈上加方法會(huì)使調(diào)用很簡便,但是這樣的做法被rn拒絕了,所以這里面的方法都是normal:普通方法)
    • StringUtils:對(duì)內(nèi)建對(duì)象String拓展的相關(guān)方法(里面方法有baseOnInvadeScale類型,也有onlyProto類型,也有both類型)
  • 其他方面的工具類:
    • FileUtils:一些和文件相關(guān)的方法(里面的方法都是normal:普通方法)
    • DebugUtils:一些在開發(fā)或調(diào)試中要到的方法(里面的方法都是normal:普通方法)

三種侵入式導(dǎo)入調(diào)用四種類型方法的方式

四種類型的方法

  • 1.normal:普通方法.直接調(diào)用的方法.
  • 2.baseOnInvadeScale:依據(jù)侵入式等級(jí)來決定.侵入式非0時(shí)提供prototype原型鏈方法,但是在侵入式為0的方法導(dǎo)入時(shí)為了不占用原型鏈中的屬性,這類方法在侵入式0中調(diào)用方式與普通方法一致,第一的參數(shù)就是要進(jìn)行操作的該對(duì)象本身
  • 3.both:同時(shí)提供prototype原型鏈的方法和與之對(duì)應(yīng)的方法.這類方法在侵入式等級(jí)為0時(shí)提供一個(gè)普通方法.侵入式等級(jí)為非0時(shí)會(huì)提供2種方法,一種是直接在寫在內(nèi)建對(duì)象的原型鏈上的方法,一種是與之對(duì)應(yīng)的普通方法
  • 4.onlyProto:只提供prototype原型鏈的方法.侵入式為0時(shí)這些方法就不存在了.

四種類型的方法在三種侵入式等級(jí)下分別的調(diào)用方式

所有方法的詳細(xì)介紹在下面,這里先用其中幾個(gè)方法介紹一下調(diào)用方式

normal:普通方法.(以CommonUtils中的loop方法(統(tǒng)一管理循環(huán),遍歷的方法)為例)

  • 侵入式0的調(diào)用方式:
//按照上面方法導(dǎo)入之后
CommonUtils.loop(10,(i)=>{console.log(i)}); //輸出0到9
//可以自定義別名導(dǎo)入,這時(shí)的調(diào)用方式就位(所有方法類型都可以自定義別名,侵入式1也一樣,下面就不累贅寫以別名方式調(diào)用的內(nèi)容了)
let {CommonUtils:CU}=GPGlobal.initWtihInvadeScale(0);
CU.loop(10,(i)=>{console.log(i)});
  • 侵入式1的調(diào)用方式:
//和上面侵入式0調(diào)用方式一樣,只是會(huì)占用對(duì)應(yīng)的全局變量
  • 侵入式2的調(diào)用方式:
loop(10,(i)=>{console.log(i)}); //直接方法名調(diào)用

baseOnInvadeScale類型.(以ArrayUtils中的unshiftFromIndex方法(將數(shù)組中指定索引的元素移動(dòng)到最前面去)為例)

  • 侵入式0的調(diào)用方式:
let arr=[1,2,3,4,5];
ArrayUtils.unshiftFromIndex(arr,1,3); //結(jié)果為[2, 1, 3, 4, 5] 將所因?yàn)?的元素移到最前面
  • 侵入式1和侵入式2的調(diào)用方式:
let arr=[1,2,3,4,5];
arr.unshiftFromIndex(1,3); //因?yàn)槭菙?shù)組原型鏈上的方法,所以直接這樣調(diào)用,而且相對(duì)于侵入式0的滴啊用方法,也少了第一個(gè)參數(shù)(即當(dāng)前這個(gè)數(shù)組),

both類型.(以DateUtils中的getDateDiff方法(計(jì)算兩個(gè)日期時(shí)間之間的差值)為例)

  • 侵入式0的調(diào)用方式:
let startTimeStr='2017-11-11 11:11:11';
let endTimeStr='2017-11-12 10:10:10';
DateUtils.getDateDiff(startTimeStr,endTimeStr); //結(jié)果為1
  • 侵入式1的調(diào)用方式:
//侵入式1提供兩種方法,一種是普通方法,調(diào)用方式就和上面的侵入式0的調(diào)用方式一樣;一種是原型鏈上的方法(向下面這樣調(diào)用)
let startTimeStr='2017-11-11 11:11:11';
let date=DateUtils.getDateObj(startTimeStr); //這個(gè)方法用于通過字符串,時(shí)間戳獲得一個(gè)日期對(duì)象,date此時(shí)就為日期對(duì)象,詳情看下面的介紹.
let endTimeStr='2017-11-12 10:10:10';
date.diff(endTimeStr); //直接通過這種原型鏈方法的形式調(diào)用,為了簡便,在原型鏈中的方法為diff,both類型方法具體普通方法與原型鏈方法一不一致,看具體方法中的說明.
  • 侵入式2的調(diào)用方式
//普通方法和侵入式2在normal:普通方法的調(diào)用相同
//原型鏈方法和上面侵入式1的調(diào)用方式相同

onlyProto類型.(以NumberUtils中的toFloatStr方法為例)

  • 侵入式1和侵入式2的調(diào)用方式(onlyProto類型的方法侵入式0中沒有):
let num=18.12345;
num.toFloatStr() //結(jié)果為"18.12"

各個(gè)工具類中的方法

為了方便,下面沒有特別說明都以侵入式等級(jí)2為例講解,比較簡單的方法就不給出示例了

CommonUtils:一些全局都可能用到的常用方法(里面全部為normal:普通方法)

toStr(obj)

  • 說明:對(duì)obj對(duì)象調(diào)用Object最原始的toString方法
  • 示例:
toStr({})
// 返回"[object Object]"

判斷當(dāng)前數(shù)據(jù)的類型的一些列方法:

isNumber(obj)

  • 說明:判斷obj是不是數(shù)字或Number對(duì)象,返回布爾值

isString(obj)

  • 說明:判斷obj是不是數(shù)字或String對(duì)象,返回布爾值

isBool(obj)

  • 說明:判斷obj是不是布爾類型,返回布爾值

isArray(obj)

  • 說明:判斷obj是不是數(shù)組類型,返回布爾值

isObj(obj)

  • 說明:判斷obj是不是對(duì)象類型,返回布爾值

isDate(obj)

  • 說明:判斷obj是不是日期對(duì)象類型,返回布爾值

isRegExp(obj)

  • 說明:判斷obj是不是RegExp正則對(duì)象類型,返回布爾值

getNewObj(obj)

  • 說明:獲得一個(gè)全新的和obj值一樣的對(duì)象或數(shù)組(該方法也在ArrayUtils中被用到數(shù)組的原型鏈屬性deepCopy上)
  • 示例:
let arr=[1,2,3,4,5];
let copyArr=getNewObj(arr);
copyArr===arr
// 返回false,得到一個(gè)至完全相同單地址不同的數(shù)組

loop(obj,callBack)

  • 說明:對(duì)數(shù)組,對(duì)象進(jìn)行遍歷,指定范圍進(jìn)行for循環(huán)的統(tǒng)一循環(huán)方法
  • 參數(shù):
    • obj:要循環(huán)的數(shù)組,對(duì)象,指定范圍的數(shù)字
    • callBack:每次循環(huán)要做的操作
  • 示例:
//對(duì)指定范圍進(jìn)行循環(huán)
loop(10,(i)=>{console.log(i)}) //輸出0到9
//對(duì)數(shù)組進(jìn)行循環(huán)
let arr=[1,2,3,4,5,6,7];
loop(arr,(i,k)=>{console.log(i,k)});//輸出數(shù)組中的每一個(gè)索引與其對(duì)應(yīng)的值
//對(duì)對(duì)象進(jìn)行循環(huán)
let obj={a:10,b:20,c:30};
loop(obj,(k,v)=>{console.log(k,v)})//輸出對(duì)象中的每一個(gè)鍵值對(duì)

//loop的回調(diào)函數(shù)中break,continue不可用,但是可以用return做出break,continue,return的操作
//break操作(比如,到5時(shí)退出,這時(shí)只需要return 1(這里的1可以用任何一個(gè)無意義的,不是undefined的值就行)即可)
loop(10,(i)=>{
  if(i===5){return 1}
  console.log(i);// 打印出0到4
});
//continue操作(比如,到5時(shí)跳過此次循環(huán),進(jìn)行下一次循環(huán),只需要return undefined即可)
loop(10,(i)=>{
  if(i===5){return undefined}
  console.log(i);// 打印出0-4,6-9
});
//return操作(比如返回i值,像正常return一樣返回即可,該返回值則為loop方法的返回值,可以拿到返回值后做其他操作,也可以再繼續(xù)將該返回值再次return出去)
let result=loop(10,(i)=>{
  if(i===5){return i}
  console.log(i);// 打印0到4
});
console.log(result);//打印5
//可以繼續(xù)return出去,這樣就和正常for循環(huán)時(shí)的return一樣了
function test() {
  return loop(10,(i)=>{
    if(i===5){return i}
    console.log(i);// 打印0到4
  });
}
let result=test();
console.log(result);//打印5

getBool(obj)

  • 說明:根據(jù)傳入的參數(shù)返回布爾值.該方法將空數(shù)組[],空對(duì)象{},數(shù)值為0的字符串'0',空白字符串' ',也列入false中.(自動(dòng)轉(zhuǎn)布爾值的情況:0,NaN,null,undefined,''為false,其他情況為true)

getFuncName(args)

  • 說明:獲取當(dāng)前調(diào)用方法的方法名(調(diào)用時(shí)getFuncName(arguments))(在es6下的部分方法中會(huì)報(bào)錯(cuò))(在DebugUtils中的logFuncName中會(huì)用到該方法)
  • 參數(shù):
    • args:要打印方法名的方法的arguments,要在方法中將arguments當(dāng)做參數(shù)傳進(jìn)來(因?yàn)閞n中沒有arguments.caller)
  • 示例:
function Test() {
    console.log(getFuncName(arguments));
}
// 打印出Test

isNumeric(strNum,maxDecimalNum=null,ifTrim=true,positive=false)

  • 說明:判斷傳入?yún)?shù)是不是一個(gè)數(shù)字或一個(gè)字符串類型的數(shù)字(1 '37' 1.73 '21.43')(還可以指定判斷小數(shù)點(diǎn)后可以最多有多少位)
  • 參數(shù):
    • strNum:傳入的要判斷的參數(shù)(數(shù)字,字符串)
    • maxDecimalNum:如果要限制最多小數(shù)位數(shù)時(shí)傳入的最多位數(shù)的數(shù)字參數(shù)(如果傳入的參數(shù)strNum的小數(shù)位數(shù)超過toFixed給定的值就返回false,沒超過返回true),0時(shí)限制為只能是整數(shù),null時(shí)為無限制(只要是數(shù)字就行)(默認(rèn)為null)
    • ifTrim 判斷時(shí)是否忽略左右空格(默認(rèn)為true,忽略)
  • 特殊用法:可以用在用戶在輸入框TextInput中輸入數(shù)字之后的校驗(yàn)與限制
isNumeric('123.6765')// 結(jié)果true
isNumeric('123.6765',2)// 結(jié)果false
isNumeric(' -234.67 ',2,)// 結(jié)果true
isNumeric(' -546.12 ',2,false)// 結(jié)果false
isNumeric(' -123.67 ',2,true,true);// 結(jié)果false
isNumeric(123.67,2,true,true);// 結(jié)果true

numToFixedLenStr(num,len=2,char='0')

  • 說明:將數(shù)字或字符串類型的數(shù)字前面加上'0'或指定的字符,到達(dá)指定的長度,并返回字符串(為了方便調(diào)用,該方法被加入到NumberUtils和StringUtils中作為Number與String對(duì)象的原型鏈方法,名稱為toFixedLenStr,詳情看相應(yīng)的方法說明)
  • 參數(shù):
    • num 要轉(zhuǎn)化的數(shù)字或字符串類型的數(shù)字
    • len 最后輸出的字符串的長度(默認(rèn)為2)
    • char 指定填充數(shù)字前面的字符為什么,默認(rèn)為"0"
  • 示例:
numToFixedLenStr('8') //結(jié)果為"08"
numToFixedLenStr('18',4) //結(jié)果為"0018"
numToFixedLenStr('18',4,'*') //結(jié)果為"**18"
numToFixedLenStr(18,4,'*') //可以是數(shù)字

MathUtils:一些和計(jì)算相關(guān)的方法(里面全部為normal:普通方法)

js精確的加減乘除(js對(duì)浮點(diǎn)數(shù)的運(yùn)算會(huì)存在問題,無論加減乘除,所以加入這些方法).
這些方法在NumberUtils和MathUtils中都被加入到Number對(duì)象和String對(duì)象的原型鏈中了,名稱分別為add,sub,mul,div,詳情看相應(yīng)的方法說明.
方法中除了可以傳數(shù)字,也可以傳字符串類型的數(shù)字

accAdd(arg1,arg2)

  • 說明:精確加法函數(shù),用來得到精確的加法結(jié)果
  • 示例:
12.4249+6.8 //結(jié)果為19.224899999999998
accAdd(12.4249,6.8) //結(jié)果為19.2248
accAdd('12.4249','6.8') //傳入?yún)?shù)也可以是字符串類型的數(shù)字,結(jié)果同上

accSub(arg1,arg2)

  • 說明:精確減法函數(shù),用來得到精確的減法結(jié)果(arg1-arg2)
  • 示例:
10.3-9.2 //結(jié)果為1.1000000000000014
accSub(10.3,9.2) //結(jié)果為1.1

accMul(arg1,arg2)

  • 說明:精確乘法函數(shù),用來得到精確的乘法結(jié)果
  • 示例:
0.7*8.1 //結(jié)果為5.669999999999999
accMul(0.7,8.1) //結(jié)果為5.67

accDiv(arg1,arg2)

  • 說明:精確除法函數(shù),用來得到精確的除法結(jié)果(arg1除以arg2)
  • 示例:
5.67/8.1 //結(jié)果為0.7000000000000001
accDiv(5.67,8.1) //結(jié)果為0.7

dealWithFloatStr=(strNum,toFixed=2,type='round',inputType='both',returnType=true)

  • 說明:將一個(gè)字符串類型的數(shù)字(或數(shù)字類型的值)進(jìn)行處理(保留小數(shù)后幾位,舍去部分是四舍五入,還是向上/向下取整)(為了更方便的處理類似問題,這個(gè)方法在NumberUtils,StringUtils和ArrayUtils中都被相應(yīng)的方法(toFloat,toFloatStr)用到,并加入到Number對(duì)象,String對(duì)象和Array對(duì)象的原型鏈中了,詳情看相應(yīng)的方法說明.)
  • 參數(shù):
    • strNum 要處理的字符串類型的數(shù)字(或數(shù)字類型的值)
    • toFixed 要保留的小數(shù)位數(shù). 0為不保留小數(shù)只取整數(shù),null時(shí)為保持原有小數(shù)位數(shù)(默認(rèn)為2)
    • type 是四舍五入,還是向上/向下取整. 'round'為四舍五入;'up'或'ceil'為向上取整;'sub'或'floor'為向下取整. 向上/向下取整同時(shí)適用于小數(shù) dealWithFloatStr('1321.123459',5,'sub') 執(zhí)行后"1321.12345"
    • inputType 輸入的類型可以為什么. 'both'時(shí)數(shù)字或數(shù)字字符串都會(huì)進(jìn)行處理;'num'時(shí)只會(huì)處理數(shù)字(此時(shí)傳入字符串的話會(huì)原樣返回);'str'時(shí)只會(huì)處理數(shù)字字符串(此時(shí)傳入數(shù)字的話會(huì)原樣返回).(默認(rèn)為both)
    • returnType 返回類型為什么. true時(shí)為字符串,false時(shí)為數(shù)字類型
  • 示例:
dealWithFloatStr('12.3456') //結(jié)果為"12.35"
dealWithFloatStr('12.3456',1) //結(jié)果為"12.3"
dealWithFloatStr('12.3456',1,'up') //結(jié)果為"12.4"
dealWithFloatStr('12.3456',3,'sub') //結(jié)果為"12.345"
dealWithFloatStr('12.3456',3,'sub','num') //結(jié)果為"12.3456"
dealWithFloatStr(12.3456,3,'sub','num',false) //結(jié)果為12.345

RNUtils:對(duì)react-native組件api的簡單封裝,常用值的導(dǎo)出,適配問題的一些處理(里面全部為normal:普通方法,與普通屬性)

一些常用屬性:

w

  • 說明:當(dāng)前設(shè)備屏幕的寬度

h

  • 說明:當(dāng)前設(shè)備的高度

isios

  • 說明:當(dāng)前設(shè)備是不是iOS設(shè)備,布爾值

一些常用api的簡單封裝:

openUrl(url)

  • 說明:在瀏覽器中打開指定url的方法
  • 參數(shù):
    • url:要打開的url

openPhone(phoneNum)

  • 說明:打開電話撥號(hào)界面,并在里面填入phoneNum的電話號(hào)碼
  • 參數(shù):
    • phoneNum:要在撥號(hào)界面填入的號(hào)碼

setClipboard(test)

  • 說明:設(shè)置一段文字到剪貼板

get(url,args={})

  • 說明:fetch方法以get方式請(qǐng)求json數(shù)據(jù)的簡單封裝
  • 參數(shù):
    • url:url地址,即fetch的第一個(gè)參數(shù)
    • args:可選參數(shù),fetch的第二個(gè)參數(shù),可以用來定制 HTTP 請(qǐng)求一些參數(shù)。你可以指定 header 參數(shù),或是指定使用 POST 方法,又或是提交數(shù)據(jù)等等
  • 示例:
get('http://baike.baidu.com/api/openapi/BaikeLemmaCardApi?scope=103&format=json&appid=379020&bk_key=%E9%93%B6%E9%AD%82&bk_length=600',)
    .then((jsonData)=>{
        console.log(jsonData);
    })
    .catch((error)=>{
        console.log(error);
    });

post(url,bodyData,headers={})

  • 說明:fetch方法以post方式請(qǐng)求json數(shù)據(jù)的簡單封裝
  • 參數(shù):
    • url:url地址,即fetch的第一個(gè)參數(shù)
    • bodyData:post的body數(shù)據(jù).可以是對(duì)象,在'Content-Type': 'application/json'時(shí)(默認(rèn)是這個(gè));可以是字符串,在'Content-Type': 'application/x-www-form-urlencoded'時(shí).
    • headers:給出相應(yīng)的頭部信息.
  • 示例:
//以'Content-Type': 'application/json'方式發(fā)送請(qǐng)求時(shí)
post('http://baike.baidu.com/api/openapi/BaikeLemmaCardApi',
    {scope:103,format:'json',appid:379020,bk_key:'銀魂',bk_length:600})
    .then((jsonData)=>{
        console.log(jsonData);
    })
    .catch((error)=>{
        console.log(error);
    });
//以'Content-Type': 'application/x-www-form-urlencoded'方式發(fā)送請(qǐng)求時(shí),需要給出第三個(gè)參數(shù)headers
post('http://baike.baidu.com/api/openapi/BaikeLemmaCardApi',
    'scope=103&format=json&appid=379020&bk_key=銀魂&bk_length=600',
    {'Content-Type': 'application/x-www-form-urlencoded'})
    .then((jsonData)=>{
        console.log(jsonData);
    })
    .catch((error)=>{
        console.log(error);
    });

一些適配相關(guān)的方法:

setFontSize(fontSize)

  • 說明:根據(jù)像素密度設(shè)置字體大小(用于老版本的rn,老版本中相同字體大小在不同設(shè)備上會(huì)有問題,新版本的rn中則沒有該問題,忽略該方法)

RegExpUtils:一些和正則相關(guān)的方法(里面全部為normal:普通方法)

isPhoneNum(str)

  • 說明:檢驗(yàn)手機(jī)號(hào)合理性(傳入的str字符串是不是手機(jī)號(hào)),返回布爾值

isEmail(str)

  • 說明:檢驗(yàn)郵箱合理性(傳入的str字符串是不是郵箱),返回布爾值

pushRegExpKeyToArr(obj,reg)

  • 說明:將對(duì)象中的key或數(shù)組中的元素符合指定的正則表達(dá)的放入到數(shù)組中,并返回
  • 參數(shù):
    • obj:傳入的對(duì)象或數(shù)組
    • reg:傳入的正則表達(dá)式
  • 示例:
let arr=['ro123ot','root','fdhfi','raew'];
pushRegExpKeyToArr(arr,/ro.*ot/);
// 返回["ro123ot", "root"]
// 如果傳入?yún)?shù)為對(duì)象,則返回的數(shù)組中的元素是傳入對(duì)象鍵(key)中符合正則的的

RandomUtils:一些和隨機(jī)相關(guān)的方法(里面全部為normal:普通方法)

getRandom(num1,num2)

  • 說明:獲得隨機(jī)數(shù).沒有傳num1和num2時(shí),生成一個(gè)0-1的隨機(jī)數(shù);只有num1的時(shí)候生成一個(gè)0-num1的int整形數(shù);num1,num2都有時(shí)生成一個(gè)num1-num2的int整形隨機(jī)數(shù).

getRandomNumStr(num1,num2)

  • 說明:和上面方法功能是一樣的,只是將返回結(jié)果轉(zhuǎn)換為字符串而已

getRandomFromArr(arr)

  • 說明:從數(shù)組中獲得隨機(jī)的數(shù)組元素(每個(gè)元素權(quán)重相同,獲得概率相同)

getRandomFromArrWithWeight(arr,weightArr)

  • 說明:從數(shù)組中獲得隨機(jī)的數(shù)組元素(帶有比重的,每個(gè)元素獲得概率可以自己指定)
  • 參數(shù):
    • arr:要從中隨機(jī)元素的數(shù)組
    • weightArr:指定比重的數(shù)組(該數(shù)組元素個(gè)數(shù)應(yīng)該與arr中的元素個(gè)數(shù)相同,而且每個(gè)元素都是int類型)
  • 示例:
let arr=['第一個(gè)數(shù)','第二個(gè)數(shù)','第三個(gè)數(shù)','第四個(gè)數(shù)'];
let weightArr=[1,2,3,4];
//loop是該庫中的一個(gè)方法用于統(tǒng)一管理循環(huán)的方法(上面有講解)
loop(10,()=>{
  let random=getRandomFromArrWithWeight(arr,weightArr);
  console.log(random); //這樣'第一個(gè)數(shù)','第二個(gè)數(shù)','第三個(gè)數(shù)','第四個(gè)數(shù)'輸出的概率就分別是十分之一,十分之二,十分之三,十分之四
});

getRandomStr(num=4,type='all',ifEq=true)

  • 說明:獲取指定個(gè)數(shù)的隨機(jī)字符串
  • 參數(shù):
    • num:生成隨機(jī)字符串的個(gè)數(shù)(默認(rèn)為4)
    • type:指定生成隨機(jī)字符串的類型.'num':只有數(shù)字,'char':只有字母,'lowChar':只有小寫字母,'upChar':只有大寫字母,'all':字母數(shù)字都有(默認(rèn)為'all')
    • ifEq:如果type為"all"時(shí),字母出現(xiàn)概率和數(shù)字出現(xiàn)概率是否要一致(是概率是否一致,不是數(shù)量是否一致),布爾類型(默認(rèn)為true,false時(shí)字母概率大于數(shù)字)
  • 示例:
getRandomStr(16,'all',true)
// 結(jié)果 "7a314W55nupLV8P4" (16位的既有數(shù)字又有字母的隨機(jī)數(shù),且數(shù)字和字母出現(xiàn)概率相同)

getRandomPhone()

  • 說明:生成一個(gè)11位的隨機(jī)的手機(jī)號(hào)碼

內(nèi)建對(duì)象的工具類部分:

ArrayUtils:對(duì)內(nèi)建對(duì)象Array拓展的相關(guān)(里面的方法全部為baseOnInvadeScale,因?yàn)殛P(guān)聯(lián)數(shù)組不常用,所以這里面的所有方法都是針對(duì)索引數(shù)組的)

contains(value,allEqual=true)

  • 說明:查看元素是否在數(shù)組中的方法
  • 參數(shù):
    • value:要檢查是否存在的元素
    • allEqual:是否全等判斷.true時(shí)為必須全等===,false為==.(默認(rèn)為true)
  • 返回值:返回布爾值,表示是否存在指定元素

deleteValue(value,allEqual=true,deleteAll=true)

  • 說明:從數(shù)組中刪除指定元素的方法
  • 參數(shù):
    • value:要?jiǎng)h除的元素
    • allEqual:是否要全等的元素才刪除.true時(shí)為必須全等===,false為==.(默認(rèn)為true)
    • deleteAll:是否要?jiǎng)h除指定的全部元素.true時(shí)為全部刪除,false時(shí)為只刪除第一個(gè)(默認(rèn)為true)
  • 返回值:數(shù)組的元素會(huì)被刪除,方法返回值也就是這個(gè)刪除過元素的數(shù)組,所以你可以對(duì)它進(jìn)行鏈?zhǔn)讲僮?/li>
  • 示例:
let arr=[1,2,3,4,5,2,3,6,1,3,2];
arr.deleteValue(3); //結(jié)果 [1, 2, 4, 5, 2, 6, 1, 2] ,將多有3的元素都刪除了
arr.deleteValue(2,true,false) //結(jié)果 [1, 4, 5, 2, 6, 1, 2] ,只刪除了第一個(gè)2的元素
arr.deleteValue(2).push(100); //可以對(duì)其進(jìn)行鏈?zhǔn)讲僮?

spliceOne(index)

  • 說明:splice指定索引的一個(gè)元素,并返回這個(gè)元素(而不是數(shù)組,因?yàn)閟plice返回的是一個(gè)數(shù)組,就算只有一個(gè)元素)

sum()

  • 說明:求出數(shù)組中所有元素和的方法(數(shù)組中的元素必須全部是數(shù)字或字符串類型的數(shù)字,否則返回NaN)
  • 示例:
let arr=[1,2,3,4,5,2,3,6,1,3,2,'12','6',1.1,'6.8']
arr.sum() //結(jié)果為57.9

移動(dòng)數(shù)組元素的幾個(gè)方法:

unshiftFromIndex(index)

  • 說明:把數(shù)組中指定位置的元素移動(dòng)到最前面去
  • 特殊用法:比如一個(gè)列表中的內(nèi)容根據(jù)訪問時(shí)間排序,點(diǎn)擊之后就要把它移動(dòng)到最上面去,就可以用這個(gè)方法
  • 返回值:返回的就是處理之后的該數(shù)組,所以可以對(duì)其進(jìn)行鏈?zhǔn)讲僮?/li>
  • 示例:
let arr=['現(xiàn)在最新的內(nèi)容','現(xiàn)在第二新的內(nèi)容','現(xiàn)在正準(zhǔn)備點(diǎn)擊之后變成最新的內(nèi)容','現(xiàn)在最后的內(nèi)容'];
arr.unshiftFromIndex(2) 
//結(jié)果為["現(xiàn)在正準(zhǔn)備點(diǎn)擊之后變成最新的內(nèi)容", "現(xiàn)在最新的內(nèi)容", "現(xiàn)在第二新的內(nèi)容", "現(xiàn)在最后的內(nèi)容"]
arr.unshiftFromIndex(2).unshiftFromIndex(3) //可以對(duì)其進(jìn)行鏈?zhǔn)讲僮?

pushFromIndex(index)

  • 說明:把數(shù)組中指定位置的元素移動(dòng)到最后面去
  • 返回值:返回的就是處理之后的該數(shù)組,所以可以對(duì)其進(jìn)行鏈?zhǔn)讲僮?/li>
  • 示例:
let arr=[0,1,2,3,4,5];
arr.pushFromIndex(2); //結(jié)果為[0, 1, 3, 4, 5, 2]

moveToIndexFromIndex(fromIndex,toIndex)

  • 說明:把數(shù)組中指定位置的元素移動(dòng)到指定位置去
  • 參數(shù):
    • fromIndex:要移動(dòng)的索引
    • toIndex:移動(dòng)到哪個(gè)位置的索引
    • 返回值:返回的就是處理之后的該數(shù)組,所以可以對(duì)其進(jìn)行鏈?zhǔn)讲僮?/li>
  • 特殊用法:比如用戶手指滑動(dòng)列表項(xiàng),改變列表項(xiàng)順序
  • 示例:
let arr=[0,1,2,3,4,5];
arr.moveToIndexFromIndex(1,3) //結(jié)果為[0, 2, 3, 1, 4, 5]

deepCopy()

  • 說明:把當(dāng)前數(shù)組深拷貝一份并返回(就是上面CommonUtils中的getNewObj方法)
  • 示例:
let arr=[0,1,2,3,4,5];
let arr1=arr.deepCopy(); //arr1與arr內(nèi)容完全相同
arr1===arr //返回false,不是同一個(gè)對(duì)象

eachToFloat(args)

  • 說明:將數(shù)組內(nèi)的所有數(shù)字或數(shù)字字符串轉(zhuǎn)換為指定小數(shù)位數(shù)的數(shù)字或數(shù)字字符串(其中的每個(gè)元素調(diào)用MathUtils中的dealWithFloatStr方法,詳情可以去查看該方法)
  • 參數(shù):
    • args 因?yàn)閰?shù)比較多,所以以對(duì)象的方式傳入可選參數(shù)
      • ifChangeArr 表示是否直接改變?cè)瓟?shù)組,為true時(shí)直接改變調(diào)用方法的數(shù)組,此時(shí)返回值沒有意義所以是個(gè)空數(shù)組;false時(shí)不改變?cè)瓟?shù)組,而是返回一個(gè)新數(shù)組,要在外面用變量接收(默認(rèn)為ture,改變)
      • ifRecursion 表示是否遞歸(是否將數(shù)組中的數(shù)組/對(duì)象也進(jìn)行該方法的調(diào)用)(默認(rèn)為true)
      • toFixed 保留小數(shù)點(diǎn)后幾位(與dealWithFloatStr方法中一樣)(默認(rèn)為2)
      • type 四舍五入,還是向上/向下取整(與dealWithFloatStr方法中一樣)(默認(rèn)為'round',四舍五入)
      • inputType 要進(jìn)行處理操作的類型.'both'時(shí)數(shù)字或數(shù)字字符串都會(huì)進(jìn)行處理;'num'時(shí)只會(huì)處理數(shù)字;'str'時(shí)只會(huì)處理數(shù)字字符串.(與dealWithFloatStr方法中一樣)(默認(rèn)為'both',都進(jìn)行處理)
      • outputType 處理后返回的類型.'origin'時(shí)保持原類型,輸入是數(shù)字返回就是數(shù)字,輸入是字符串,返回就是字符串;'num'時(shí)不管是數(shù)字還是字符串類型的數(shù)字都會(huì)轉(zhuǎn)換為數(shù)字;'str'時(shí)不管是數(shù)字還是字符串類型的數(shù)字都會(huì)轉(zhuǎn)換為字符串類型的數(shù)字.(默認(rèn)為''origin,保持原類型)
  • 示例:
//下面的結(jié)果都是JSON.stringify()后的輸出
let arr=[10,123,'123',[832.123,'1234.123','dsadf12'],{a:10.123,b:'123.86',c:'123dsa'}];
let finalArr=arr.eachToFloat({ifChangeArr:false}); 
//上面arr結(jié)果沒變,finalArr結(jié)果為"[10,123,"123.00",[832.12,"1234.12","dsadf12"],{"a":10.12,"b":"123.86","c":"123dsa"}]"
finalArr=arr.eachToFloat({ifChangeArr:false,ifRecursion:false}); 
//上面finalArr的結(jié)果為"[10,123,"123.00",[832.123,"1234.123","dsadf12"],{"a":10.123,"b":"123.86","c":"123dsa"}]"其中的對(duì)象和數(shù)組就沒有參與處理
finalArr=arr.eachToFloat({ifChangeArr:false,toFixed:1,type:'up',outputType:'str');
//上面finalArr的結(jié)果為"["10.0","123.0","123.0",["832.2","1234.2","dsadf12"],{"a":"10.2","b":"123.9","c":"123dsa"}]"
arr.eachToFloat({toFixed:3,type:'sub',inputType:'str'});
//上面這樣就會(huì)直接改變數(shù)組中相應(yīng)的值,這樣就不用外界用變量接收了.arr的結(jié)果為"[10,123,"123.000",[832.123,"1234.123","dsadf12"],{"a":10.123,"b":"123.860","c":"123dsa"}]"

DateUtils:對(duì)內(nèi)建對(duì)象Date拓展的相關(guān)(里面方法有普通方法,也有both類型,具體類型,看下面各個(gè)方法的方法介紹中)

getDateObj(date)

  • 說明:根據(jù)傳進(jìn)來的日期(可以是Date對(duì)象,也可以是字符串類型的日期,也可以是時(shí)間戳的Int)將其轉(zhuǎn)換為日期對(duì)象.(為了方便使用該方法分別在NumberUtils和StringUtils中加入到了Number和String的原型鏈中,名稱為toDate)
  • 方法類型:普通方法
  • 參數(shù):
    • date 日期值,可以是Date對(duì)象,也可以是字符串,也可以是時(shí)間戳的Int.(字符串支持的形式:'2018-08-07 15:51:59','15:51:59 2018-08-07','15:51:59 08/07/2018','08/07/2018'等等,反正只要不是太奇葩的都可以轉(zhuǎn)成功)
  • 示例:
getDateObj('2012-12-12 00:00:00'); //結(jié)果成功生成對(duì)象Wed Dec 12 2012 00:00:00 GMT+0800 (CST)
getDateObj(1455241600000); //可以是時(shí)間戳的Int

formatDate(date,formatStr='yyyy-MM-dd hh:mm:ss')

  • 說明:將日期對(duì)象格式化為指定格式的字符串形式
  • 方法類型:both(特別說明:原型鏈上的方法名為了簡介,方法名為format)
  • 參數(shù):
    • date 要格式化的日期(可以是Date對(duì)象,也可以是字符串類型的日期,也可以是時(shí)間戳的Int)
    • formatStr 要格式化為什么形式的字符串.M表示月,d表示日,h表示小時(shí),m表示分鐘,s表示秒,q表示季度,S表示毫秒(比如默認(rèn)為"yyyy-MM-dd hh:mm:ss")
  • 示例:
formatDate('2012-12-12') //結(jié)果為"2012-12-12 00:00:00"
formatDate('2012-12-12 12:12:12','yyyy/MM/dd hh:mm') //結(jié)果為"2012/12/12 12:12"
formatDate(1455241600000,'yyyy/MM/dd hh:mm') //可以是Int類型的時(shí)間戳,結(jié)果為"2016/02/12 09:46"
let date=new Date();
formatDate(date,'yyyy/MM/dd hh:mm') //可以是日期對(duì)象
date.format('yyyy/MM/dd hh:mm') //因?yàn)槭莃oth類型的方法,所以可以通過這種形式來調(diào)用

addOrSubDate(date,num,dayOrMouth='day',addOrSub='add',ifChangeDate=true,isBehindZero=false)

  • 說明:在當(dāng)前日期上加減(幾天,幾月,幾年),并且返回處理后的日期對(duì)象
  • 方法類型:both
  • 參數(shù):
    • date 在哪個(gè)日期的基礎(chǔ)上增減,可接收日期對(duì)象或字符串類型的日期或Int類型的時(shí)間戳(傳入的是日期對(duì)象時(shí)).
    • num 要加上或減去(年月日)的數(shù)量
    • dayOrMouth 要加減的是(日 月 還是年...), 'year','month','day','hour','min','second'(默認(rèn)為'day',天為單位)
    • addOrSub 加還是減.(默認(rèn)是'add',加)
    • ifChangeDate 傳入的date為日期對(duì)象時(shí),是否要改變?cè)嫉膁ate對(duì)象值(即變成加/減后的日期對(duì)象)(默認(rèn)為true,改變)
    • isBehindZero 當(dāng)設(shè)置為true時(shí),比如加一天后的時(shí)間為第二天的0點(diǎn)0分0秒,加一月時(shí)為第二月的第一天的0點(diǎn)0分0秒;減一天后的時(shí)間為當(dāng)天的0點(diǎn)0分0秒,減一月后為當(dāng)月的第一天的0點(diǎn)0分0秒.(默認(rèn)為false)
  • 示例:
let dateStr='2012-12-12 12:12:12';
addOrSubDate(dateStr,1); //結(jié)果為Thu Dec 13 2012 12:12:12 GMT+0800 (CST)
addOrSubDate(dateStr,1,'month','sub'); //結(jié)果為Mon Nov 12 2012 12:12:12 GMT+0800 (CST)
let timestamp=1455241600000;
addOrSubDate(timestamp,2,'hour','sub') //也可以是Int類型的時(shí)間戳,結(jié)果為Fri Feb 12 2016 07:46:40 GMT+0800 (CST)
let date=new Date();
addOrSubDate(date,2,'hour','sub') //也可以是date對(duì)象,結(jié)果中改變了原來的date對(duì)象
addOrSubDate(date,2,'day','sub',false,true) //這樣就不改變?cè)瓉淼娜掌趯?duì)象了.結(jié)果為Sat Oct 20 2018 00:00:00 GMT+0800 (CST)
date.addOrSubDate(2,'day','sub',false,true) //因?yàn)槭莃oth類型的方法,所以可以通過這種形式來調(diào)用

addOrSubDateFormat(num,formatStr='yyyy-MM-dd',date='',dayOrMouth='day',addOrSub='add',isBehindZero=false)

  • 說明:在當(dāng)前日期上加減(幾天,幾月,幾年),并且返回格式化后的字符串日期形式(使用方法和上面的方法一樣,只是多了第二個(gè)參數(shù)formatStr用于指定返回日期字符串的格式化形式)
  • 方法類型:both
  • 示例:
addOrSubDateFormat('2012-12-12 12:12:12',1); //結(jié)果為"2012-12-13"
let date=new Date();
date.addOrSubDateFormat(3); ////因?yàn)槭莃oth類型的方法,所以可以通過這種形式來調(diào)用

getDateDiff(startTime, endTime, diffType='day',ifAbs=true)

  • 說明:計(jì)算兩個(gè)日期之間的時(shí)間差(計(jì)算結(jié)果是向上取整的,返回都是整數(shù),比如diffType時(shí)間差單位'day'天時(shí),如果兩個(gè)時(shí)間相減后不足1天,返回就是1)
  • 方法類型:both(特別說明:原型鏈上的方法名為了簡介,方法名為diff)
  • 參數(shù):
    • startTime 開始日期時(shí)間(可以是Date對(duì)象,也可以是字符串類型的日期,也可以是時(shí)間戳的Int)
    • endTime 結(jié)束日期時(shí)間(可以是Date對(duì)象,也可以是字符串類型的日期,也可以是時(shí)間戳的Int)
    • diffType 最后獲得的時(shí)間差的單位.'year':年,'month':月,'day':日,'hour':時(shí),'minute':分,'second':秒.(默認(rèn)為'day',天)
    • ifAbs 對(duì)最終的時(shí)間差是否取絕對(duì)值(默認(rèn)為true,取絕對(duì)值)
  • 示例:
let startTimeStr='2017-11-11 11:11:11';
let endTimeStr='2017-11-12 10:10:10';
getDateDiff(startTimeStr,endTimeStr); //結(jié)果為1
getDateDiff(startTimeStr,endTimeStr,'hour'); //結(jié)果為23
let date=new Date();
date.diff(endTimeStr,'month',false); //因?yàn)槭莃oth方法,所以也可以以這種方式調(diào)用.結(jié)果為-11

NumberUtils:對(duì)內(nèi)建對(duì)象Number拓展的相關(guān)方法(里面的方法全部為onlyProto)

add()

sub()

mul()

div()

  • 說明: 將MathUtils方法中的精確算術(shù)運(yùn)算的這幾個(gè)方法(accDiv,accMul,accAdd,accSub)加入到Number的原型鏈中(具體用法,看MathUtils中的方法介紹)
  • 調(diào)用方式(具體用法,看MathUtils中的方法介紹):
let num=5.67;
num.div(7) 

toFixedLenStr(len=2,char='0')

  • 說明:將CommonUtils中的numToFixedLenStr方法加入到Number的原型鏈中
  • 參數(shù):
    • len:到達(dá)多少長度
    • char:填充的字符
  • 調(diào)用方式(具體用法,看CommonUtils中的方法介紹):
let num=18;
num.toFixedLenStr(4,'*') //結(jié)果為"**18"

toFloatStr(toFixed=2,type='round')

  • 說明:將一個(gè)數(shù)字類型的值進(jìn)行處理(保留小數(shù)后幾位,舍去部分是四舍五入,還是向上/向下取整)(返回字符串形式時(shí))(其中調(diào)用了MathUtils的dealWithFloatStr方法,參數(shù)的具體含義與之相同)
  • 參數(shù):
    • toFixed 保留到小數(shù)點(diǎn)后幾位,默認(rèn)為2
    • type 是四舍五入,還是向上/向下取整
  • 調(diào)用方式(具體用法,看MathUtils中的方法介紹):
let num=18.12345;
num.toFloatStr() //結(jié)果為"18.12"
num.toFloatStr(3,'up') //結(jié)果為"18.124"

toFloat(toFixed=null,type='round')

  • 說明:和上面的方法一樣,只是返回值為數(shù)字類型,而非字符串
  • 調(diào)用方式(具體用法,看MathUtils中的方法介紹):
let num=18.12345;
num.toFloat(3,'up') //結(jié)果為18.124 

toDate()

  • 說明:將DateUtils中的getDateObj方法加入Number的原型鏈中,將Int類型的時(shí)間戳轉(zhuǎn)換為日期對(duì)象(具體介紹看原方法)
  • 示例:
let num=1455241600000;
num.toDate() //結(jié)果轉(zhuǎn)化為日期對(duì)象 Fri Feb 12 2016 09:46:40 GMT+0800 (CST)

ObjectUtils:對(duì)內(nèi)建對(duì)象Object拓展的相關(guān)方法(本來在Object的原型鏈上加方法會(huì)使調(diào)用很簡便,但是這樣的做法被rn拒絕了,所以這里面的方法都是normal:普通方法)

objEachToFloat(obj,args={})

  • 說明:將數(shù)組內(nèi)的所有數(shù)字或數(shù)字字符串轉(zhuǎn)換為指定小數(shù)位數(shù)的數(shù)字或數(shù)字字符串(其中的每個(gè)元素調(diào)用MathUtils中的dealWithFloatStr方法,詳情可以去查看該方法)(和ArrayUtils中的eachToFloat方法基本一致,這里就不做過多的示例了)
  • 參數(shù):
    • obj 要進(jìn)行處理的obj對(duì)象
    • args 因?yàn)閰?shù)比較多,所以以對(duì)象的方式傳入可選參數(shù)
      • ifRecursion 表示是否遞歸(是否將數(shù)組中的數(shù)組/對(duì)象也進(jìn)行該方法的調(diào)用)(默認(rèn)為true)
      • toFixed 保留小數(shù)點(diǎn)后幾位(與dealWithFloatStr方法中一樣)(默認(rèn)為2)
      • type 四舍五入,還是向上/向下取整(與dealWithFloatStr方法中一樣)(默認(rèn)為'round',四舍五入)
      • inputType 要進(jìn)行處理操作的類型.'both'時(shí)數(shù)字或數(shù)字字符串都會(huì)進(jìn)行處理;'num'時(shí)只會(huì)處理數(shù)字;'str'時(shí)只會(huì)處理數(shù)字字符串.(與dealWithFloatStr方法中一樣)(默認(rèn)為'both',都進(jìn)行處理)
      • outputType 處理后返回的類型.'origin'時(shí)保持原類型,輸入是數(shù)字返回就是數(shù)字,輸入是字符串,返回就是字符串;'num'時(shí)不管是數(shù)字還是字符串類型的數(shù)字都會(huì)轉(zhuǎn)換為數(shù)字;'str'時(shí)不管是數(shù)字還是字符串類型的數(shù)字都會(huì)轉(zhuǎn)換為字符串類型的數(shù)字.(默認(rèn)為''origin,保持原類型)
  • 示例:
//下面的結(jié)果是JSON.stringify()后的輸出
let obj={a:10.12341,b:{a:'10.12412',b:true,c:[10,23.0123,'dsad']},c:'40.1'};
objEachToFloat(obj,{toFixed:3,type:'up'}) //結(jié)果為"{"a":10.124,"b":{"a":"10.125","b":true,"c":[10,23.013,"dsad"]},"c":"40.100"}"

getSubObj(obj, subObjDatas,empty=null)

  • 說明:用于獲得obj對(duì)象中子對(duì)象中的子對(duì)象...的值.但是有的時(shí)候我們不知道對(duì)應(yīng)的位置是否存在數(shù)據(jù)(比如obj下面可能不存在class對(duì)象)這時(shí)直接(obj.class.people.name)這樣取的話就會(huì)報(bào)錯(cuò),這個(gè)方法會(huì)順著obj對(duì)象的子對(duì)象一層一層向下找,只要沒有對(duì)應(yīng)的對(duì)象就返回null
  • 方法應(yīng)用場景:要去一個(gè)對(duì)象指定子對(duì)象,子對(duì)象的子對(duì)象...的值的時(shí)候,但是它有可能不存在,還有可能這個(gè)對(duì)象的父對(duì)象就不存在,這時(shí)用正常方式取值會(huì)報(bào)錯(cuò),這時(shí)就要用到這個(gè)方法.
  • 參數(shù):
    • obj 最外層的obj對(duì)象
    • subObjDatas 要取的是哪個(gè)子對(duì)象,可以是字符串或數(shù)組(看下面的兩種調(diào)用方式)
    • empty 子對(duì)象不存在時(shí)返回什么,默認(rèn)為null
  • 兩種調(diào)用方式:比如要獲得obj.class.people.name的值:
    • 方式1: getSubObj(obj,'class.people.name') 這種方式通常用在子對(duì)象鍵名確定,固定,不變的情況
    • 方式2: getSubObj(obj,['class','people','name']). 或者let a='class',b='people',c='name';getSubObj(obj,[a,b,c]); 這種方法通常在子對(duì)象鍵名根據(jù)變量改變時(shí)的情況,使用后面這種形式調(diào)用
  • 示例:
let obj={class:{otherProple:{name:'zhangsan'}}};
obj.class.people.name //這樣直接調(diào)用就會(huì)報(bào)錯(cuò)
getSubObj(obj,'class.people.name') //用該方法就返回null(也可以自定義不存在時(shí)的返回值)
let a='class',b='people',c='name'; //模擬鍵名會(huì)根據(jù)情況改變時(shí)
getSubObj(obj,[a,b,c]); //也可以用這種方式調(diào)用

gqlObjToString(obj,ifNull=false,num=0)

  • 說明:將對(duì)象/數(shù)組類型的數(shù)據(jù)轉(zhuǎn)換為字符串(左邊鍵部分不加引號(hào),右邊正常的形式)(要傳入的字符串不加引號(hào)時(shí),則在傳入的字符串形參兩邊加上,例如'CONST*')
  • 方法作用:該方法是將對(duì)象和數(shù)組轉(zhuǎn)換為字符串的形式,與JSON.stringify不同的是,不會(huì)將對(duì)象的鍵(key)的部分也加上雙引號(hào),每個(gè)數(shù)組元素/對(duì)象元素之間不加逗號(hào),值Value為null或undefined時(shí)不會(huì)被加入其中,也可以配置為false,0,''時(shí)都不放入.可以讓字符串不加引號(hào).
  • 特殊用法:將對(duì)象轉(zhuǎn)換為GraphQL的查詢語句(其實(shí)該方法就是用于這個(gè)功能時(shí)寫的,不知道GraphQL的同學(xué)請(qǐng)忽略)
  • 參數(shù):
    • obj 傳入的對(duì)象或數(shù)組
    • ifNull true時(shí)只有鍵的值為undefined或者null時(shí)這組鍵值才不被放入字符串中;false時(shí),0,''等都不放入
    • num 用于記錄遞歸調(diào)用的第幾層,也可以在調(diào)用時(shí)手動(dòng)給出指定的值作為最后的縮進(jìn)
  • 示例:
let obj={a:10.12341,b:{a:'10.12412',b:true,c:[10,23.0123,'dsad']},c:'40.1',d:null,e:undefined,f:'*CONST*'};
gqlObjToString(obj);
//結(jié)果為
/*
"{
    a:10.12341
    b:{
        a:"10.12412"
        b:true
        c:[
            10
            23.0123
            "dsad"
        ]
    }
    c:"40.1"
    f:CONST
}"
*/

subObjDataToObj(obj,dealWithSameSubKey='both',separator='_',allNameKeyArr=null,supKeyArr=[],sameKeyArr=null)

  • 說明:遞歸遍歷對(duì)象中的每一個(gè)鍵值(k:v)數(shù)據(jù),把子對(duì)象(值value為對(duì)象)中的鍵值數(shù)據(jù)都放到最外層父對(duì)象(傳入的這個(gè)obj對(duì)象)中.如果傳入的是一個(gè)數(shù)組,則遍歷該數(shù)組,對(duì)其中的每一個(gè)對(duì)象元素進(jìn)行該操作.
  • 方法作用:該方法主要用于對(duì)象嵌套比較復(fù)雜,希望把鍵值都抽取出來到最外層的情況
  • 高能預(yù)警:此方法有點(diǎn)復(fù)雜,不知道我能不能把它講清楚
  • 參數(shù):
    • obj 要處理的對(duì)象(下面說到的父對(duì)象就是傳入的這個(gè)obj)
    • dealWithSameSubKey 如果遇到子對(duì)象中有鍵(key)與父對(duì)象中的鍵重復(fù)時(shí)的操作.
      • "sub":為以子對(duì)象為主(子對(duì)象數(shù)據(jù)覆蓋父對(duì)象的),
      • "sup":為以父對(duì)象為主(子對(duì)象數(shù)據(jù)直接忽略,跳過),
      • "both":為都保留.
        • 比如子對(duì)象"test"下的key:"name"命名為"test_name"(多個(gè)子對(duì)象下有相同key,或父對(duì)象中有該key時(shí)會(huì)這樣命名);
        • 在如有子對(duì)象中該鍵名唯一則直接命名為該鍵名. 比如let obj={bcd:2,cde:{test:'234'}};subObjDataToObj(obj) 這時(shí)結(jié)果為{bcd: 2, test: "234"}. 此時(shí)要在想讓鍵名為"cde_test"這樣的形式時(shí),可在allNameKeyArr中加入該鍵名.
    • separator 第二個(gè)參數(shù)dealWithSameSubKey值為"both"時(shí)子對(duì)象名與key之間的分隔符,默認(rèn)為"_"
    • allNameKeyArr 除重復(fù)鍵名外,需要顯示鍵名全路徑的鍵名.
      • 不傳值時(shí),如果一個(gè)子對(duì)象中有這個(gè)鍵,而且這個(gè)鍵名唯一,這個(gè)鍵名會(huì)被直接用在父對(duì)象上. 比如let obj={bcd:2,cde:{test:'234'}};subObjDataToObj(obj) 這時(shí)結(jié)果為{bcd: 2, test: "234"}
      • 手動(dòng)傳入值時(shí),子對(duì)象中與sameKeyArr數(shù)組中鍵相同的鍵名不管父對(duì)象中有沒有該鍵名. 比如let obj={bcd:2,cde:{test:'234'}};subObjDataToObj(obj,'both','_',[],['test']) 這時(shí)結(jié)果為{bcd: 2, cde_test: "234"} (這通常用在有兩個(gè)或多個(gè)子對(duì)象中有相同的鍵名,但是父對(duì)象中沒有,而且這些子對(duì)象中的這些鍵名還可能只存在其中一個(gè)的情況)
    • supKeyArr 用于遞歸調(diào)用時(shí)記錄向上每層父對(duì)象的key的數(shù)組(調(diào)用時(shí)不要手動(dòng)傳入) 這樣的話obj.a.b.c就會(huì)轉(zhuǎn)換為obj_a_b_c,如果手動(dòng)傳入null/false則返回b_c
    • sameKeyArr 用于遞歸調(diào)用時(shí)傳遞相同重復(fù)鍵名的數(shù)組(調(diào)用時(shí)不用手動(dòng)傳,也可手動(dòng)傳入).給了這個(gè)值之后allNameKeyArr值就無效了.
  • 示例:
let obj1={a:{test:123},b:{c:{test:456}},d:{c:{test:789}},e:{f:{test:135}}};
subObjDataToObj(obj1) //結(jié)果為 {a_test: 123, b_c_test: 456, d_c_test: 789, e_f_test: 135}

StringUtils:對(duì)內(nèi)建對(duì)象String拓展的相關(guān)方法(里面方法有baseOnInvadeScale類型,也有onlyProto類型,也有both類型,具體類型,看下面各個(gè)方法的方法介紹中)

注意字符串是不能改變的,所以下面的方法如果是和改變字符串相關(guān)的都是生成的另一個(gè)新的字符串,要用另一個(gè)變量來接,元字符串不會(huì)發(fā)生改變

add()

sub()

mul()

div()

  • 說明:將MathUtils方法中的精確算術(shù)運(yùn)算的這幾個(gè)方法(accDiv,accMul,accAdd,accSub)加入到Number的原型鏈中
  • 方法類型:這幾個(gè)方法都是onlyProto類型
  • 調(diào)用方式(具體用法,看MathUtils中的方法介紹):
'5.67'.div(7)

toFixedLenStr(len=2,char='0')

  • 說明:將CommonUtils中的numToFixedLenStr方法加入到String的原型鏈中
  • 參數(shù):
    • len:到達(dá)多少長度
    • char:填充的字符
  • 調(diào)用方式(具體用法,看CommonUtils中的方法介紹):
let numStr='18';
numStr.toFixedLenStr(4,'*') //結(jié)果為"**18"

isNumeric()

  • 說明:將CommonUtils中的isNumeric方法加入到String的原型鏈中,判斷當(dāng)前這個(gè)字符串是不是數(shù)字(調(diào)用方法:'123.123dsa'.isNumeric(),具體用法,看CommonUtils中的方法介紹)
  • 方法類型:onlyProto

toFloatStr(toFixed=2,type='round')

  • 說明:將一個(gè)字符串類型的數(shù)字進(jìn)行處理(保留小數(shù)后幾位,舍去部分是四舍五入,還是向上/向下取整)(返回字符串形式時(shí))(其中調(diào)用了MathUtils的dealWithFloatStr方法,參數(shù)的具體含義與之相同)
  • 方法類型:onlyProto
  • 參數(shù):
    • toFixed 保留到小數(shù)點(diǎn)后幾位,默認(rèn)為2
    • type 是四舍五入,還是向上/向下取整
  • 示例:
"18.12345".toFloatStr() //結(jié)果為"18.12"
"18.12345".toFloatStr(3,'up') //結(jié)果為"18.124"

toFloat(toFixed=null,type='round')

  • 說明:和上面的方法一樣,只是返回值為數(shù)字類型,而非字符串
  • 方法類型:onlyProto
  • 示例:
"18.12345".toFloat(3,'up') //結(jié)果為18.124 

toDate()

  • 說明:將DateUtils中的getDateObj方法加入String的原型鏈中,將字符串類型的日期轉(zhuǎn)換為日期對(duì)象(具體介紹看原方法)
  • 方法類型:onlyProto
  • 示例:
'2012-12-12 00:00:00'.toDate() //結(jié)果轉(zhuǎn)化為日期對(duì)象 Wed Dec 12 2012 00:00:00 GMT+0800 (CST)

getSecStr(leftNum=0,rightNum=0,middleNum=0,secChar='*')

  • 說明:密文顯示字符串,比如身份證號(hào)123456199507281234處理為1234************34這樣的形式
  • 方法類型:both
  • 特殊用法:比如從后端獲取到一些用戶的私密信息(手機(jī)號(hào),銀行卡號(hào),身份證等)在界面上密文展示時(shí)
  • 參數(shù):
    • leftNum 左邊明文顯示的內(nèi)容的長度
    • rightNum 右邊明文顯示的內(nèi)容的長度
    • middleNum 中間隱藏內(nèi)容的長度(默認(rèn)0時(shí),為減去leftNum和rightNum后的長度)
    • secChar 設(shè)置密文的字符,默認(rèn)為'*'
  • 示例:
let str='1383838438';
str.getSecStr(2,3); //結(jié)果為"13****438"
str.getSecStr(2,3,8); //結(jié)果為"13*******438"
getSecStr(str,2,3,8); //結(jié)果同上,也可以以普通方法調(diào)用

insertSpace(numStr,spacePositions=4,loop=true)

  • 說明:對(duì)傳入的字符串進(jìn)行4位(spacePositions)隔一空格處理,比如,輸入'432896549984326896532',則輸出'4328 9654 9984 3268 9653 2'
  • 方法類型:both
  • 參數(shù):
    • numStr 傳入要處理的字符串
    • spacePositions 每隔多少位空一格空格(默認(rèn)為4).spacePositions為數(shù)組時(shí).比如[4,6,5],字符串為'432896549984326896532',則輸出'4328 965499 84326 8965 32'
    • loop 表示是否循環(huán),默認(rèn)為true.false時(shí),則輸出'4328 965499 84326 896532',只執(zhí)行一遍
  • 特殊用法:比如用戶在輸入銀行卡號(hào),身份證號(hào)時(shí)調(diào)用此方法讓格式更清晰
  • 示例:
//下面的信息都是亂寫的
let bankCard='6212262201023557228';
bankCard.insertSpace(); //結(jié)果為"6212 2622 0102 3557 228",這是用于銀行卡號(hào)的情況.
let IDNum='123456199507281234';
IDNum.insertSpace([6,8,4]); //結(jié)果為"123456 19950728 1234",這是用于身份證時(shí)的情況.
let phone='13383838438'; //結(jié)果為"133 8383 8438",這是用于手機(jī)號(hào)時(shí)的情況.
let random='213649213892749217392147236294';
random.insertSpace([2,4,3]) //結(jié)果為"21 3649 213 89 2749 217 39 2147 236 29 4",默認(rèn)會(huì)循環(huán)
random.insertSpace([2,4,3],false); //結(jié)果為"21 3649 213 892749217392147236294",不循環(huán)時(shí)
insertSpace(random,[2,4,3],false) //因?yàn)槭莃oth類型的方法,所以也可以通過普通方法的形式調(diào)用

indexdWithNum(char,n)

  • 說明:查找字符串中指定字符/字符串第n次出現(xiàn)的位置(找到返回對(duì)應(yīng)位置的索引,沒找到返回-1)
  • 參數(shù):
    • findStr 要查找位置的字符/字符串
    • n 要找第n次出現(xiàn)的位置(默認(rèn)為1,第一次出現(xiàn)的位置)
  • 方法類型:baseOnInvadeScale
  • 示例:
let str='root123rootdsahkroot123';
str.indexdWithNum('root'); //結(jié)果為0
str.indexdWithNum('root',3); //結(jié)果為16

insertToIndex(inserts,indexs)

  • 說明:字符串指定位置插入字符/字符串的方法(可以指定多個(gè)位置插入多個(gè)字符/字符串)
  • 參數(shù):
    • inserts 表示要插入的字符/字符串(給出數(shù)組時(shí),在多個(gè)位置插入多個(gè)字符串)
    • indexs 表示要插入的位置(給數(shù)組時(shí)在數(shù)組指定的多個(gè)位置插入)
  • 方法類型:baseOnInvadeScale
  • 示例:
let str='I you';
str.insertToIndex(' love',1); //結(jié)果為"I love you"
str='I you,I you';
str.insertToIndex(' love',[1,7]) //結(jié)果為"I love you,I love you"
str.insertToIndex([' love',' hate'],[1,7]) //結(jié)果為"I love you,I hate you"

getStrCount(strOrReg)

  • 說明:獲取一個(gè)字符串中一個(gè)指定字符/字符串或正則表達(dá)式出現(xiàn)次數(shù)
  • 參數(shù):
    • strOrReg 要查找的字符串或正則表達(dá)式
  • 方法類型:baseOnInvadeScale
  • 示例:
let str='root123rootdsro132otahkroot123';
str.getStrCount('root'); //結(jié)果為3
str.getStrCount(/ro.*?ot/g) //結(jié)果為4,注意,得加上修飾符g,不然會(huì)返回1

trimFunc(char=' ',type='lr')

  • 說明:去除字符串(左右/所有)空格或指定字符
  • 參數(shù):
    • type 要去除的位置.'all':所有,包括字符串中間的,'lr':左右(默認(rèn)就是這個(gè)),'l':左,'r':右
    • char 要去除的字符,默認(rèn)為空格' '
  • 方法類型:both
  • 示例:
let str='   I   love  you  ';
str.trimFunc(); //結(jié)果為"I   love  you"
str.trimFunc('all') ;//結(jié)果為"Iloveyou"
str='---I--Love--you---';
str.trimFunc('l','-') //結(jié)果為"I--Love--you---"
trimFunc(str,'l','-') //因?yàn)槭莃oth類型,也可以以普通方法的形式調(diào)用

toUpperFirst(ifOtherLower = true)

  • 說明:將字符串中的每個(gè)單詞首字母大寫
  • 參數(shù):
    • ifOtherLower 如果除了首字母外其他字母有大寫的話是否要轉(zhuǎn)換為小寫(默認(rèn)為true)
  • 方法類型:baseOnInvadeScale
  • 示例:
let str='I lovE yoU';
str.toUpperFirst(); //結(jié)果為"I Love You"
str.toUpperFirst(false); //結(jié)果為"I LovE YoU"

其他方面的工具類部分:

FileUtils:一些和文件相關(guān)的方法(里面的方法都是normal:普通方法)

formatFileSize(size)

  • 說明:通過傳入的文件字節(jié)大小格式化文件大小
  • 參數(shù):
    • size 文件字節(jié)大小
  • 示例:
formatFileSize(1236821); //結(jié)果為"1.18MB"
formatFileSize(1236821213); //結(jié)果為"1.15GB"

getBaseName(path)

  • 說明:通過文件路徑返回文件名
getBaseName('somedir/to/test.js') //結(jié)果為"test.js"

getDirName(path)

  • 說明:通過文件路徑返回路勁(上面方法的取反)
getDirName('somedir/to/test.js') //"somedir/to"

getFileType(filePath,haveDot=false)

  • 說明:返回文件的拓展名,haveDot表示是否帶上"點(diǎn)"(.jpg還是jpg)
  • 參數(shù):
    • filePath 文件路勁
    • haveDot 表示是否帶上"點(diǎn)"(比如.jpg還是jpg)(默認(rèn)為false)
  • 示例:
getFileType('somedir/to/test.js') //結(jié)果為"js"

pathJoin(dirPath,fileName)

  • 說明:拼接路徑和文件名
  • 參數(shù):
    • dirPath 文件路勁
    • fileName 文件名
  • 示例:
pathJoin('somedir/to','test.js'); //結(jié)果為"somedir/to/test.js"

DebugUtils:一些在開發(fā)或調(diào)試中要到的方法(里面的方法都是normal:普通方法)

logFuncName(args)

  • 說明:獲取當(dāng)前調(diào)用方法的方法名,并打印(調(diào)用時(shí)logFuncName(arguments))(常用于調(diào)試,在es6下的部分方法中會(huì)報(bào)錯(cuò))
  • 參數(shù):
    • args:要打印方法名的方法的arguments,要在方法中將arguments當(dāng)做參數(shù)傳進(jìn)來(因?yàn)閞n中沒有arguments.caller)
    • otherStr:另外要打印到一起的字符串
    • char:在方法名的左右用什么符號(hào)來標(biāo)記,默認(rèn)為'-',給出空字符串時(shí)不要左右的字符
    • num:左右各多少個(gè)char字符,默認(rèn)35個(gè)
  • 示例:
function Test() {
    logFuncName(arguments);
}
打印出***********************************Test***********************************
function Test() {
    logFuncName(arguments,'App','-',20);
}
打印出--------------------App--------------------Test--------------------

getLorem(wordCount=30)

  • 說明:返回一串隨機(jī)的亂數(shù)假文(就和在webStorm或其他一些支持該功能的IDE中寫lorem后Tab鍵一樣)
  • 參數(shù):wordCount 要生成的假文單詞數(shù)目.(默認(rèn)為30)
  • 示例:
getLorem() //結(jié)果為"Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nkiuaoxuidbej hdkgnsmf nztqmp ngxsuxmxryubb kkuuegcnj npwtikvax jeitrhdtm, hjmmflmcqf qwhynmxw. Wpt ddoqkvpeaa dymecfpet, mqwhgngubpzbu. Asmthth jlsef fkznuhorv uwexlhzx owpyryoxxww eugqf cdefdkeatlii, ppcfamku. Gqpslqmmyg?"
getLorem(15) //指定單詞數(shù)目為15.結(jié)果為"Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sckyejb hdrko, zqkiuuudb iwuvzwpqll, ycvceyrlgadw yuzwcqjezdsq qnxho,."

getDataFromNetTest(pageLen=20,page=1,ms=3000,max=100)

  • 說明:模擬網(wǎng)絡(luò)獲取數(shù)據(jù)方法,模擬分頁請(qǐng)求網(wǎng)絡(luò)數(shù)據(jù)(react-native-page-listview中的模擬數(shù)據(jù)就是通過這個(gè)方法獲得的)
  • 參數(shù):
    • pageLen 獲得數(shù)據(jù)的每一頁的數(shù)據(jù)條數(shù)(默認(rèn)20條)
    • page 獲得數(shù)據(jù)的頁數(shù)(默認(rèn)第1頁)
    • ms 模擬多少毫秒后可以獲得網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)(默認(rèn)3000毫秒:即3秒)
    • max 模擬數(shù)據(jù)庫中總共有多少條數(shù)據(jù)(默認(rèn)最多100條,這時(shí)如果每頁20條,第5頁有數(shù)據(jù),第6頁就沒有數(shù)據(jù)了)
  • 示例:
getDataFromNetTest()
    .then((res)=>{console.log(res)}); 
    //這里結(jié)果為3秒鐘后打印出一個(gè)長度20的數(shù)組,數(shù)組中每條元素就是一個(gè)對(duì)象,該對(duì)象里面
    //{index:當(dāng)前數(shù)據(jù)的索引(即對(duì)幾條數(shù)據(jù)),name:一個(gè)隨機(jī)生成的名字,age:隨機(jī)年齡,phone:隨機(jī)電話號(hào)碼,text:隨機(jī)的一串文字(上面的getLorem方法)}.
    //這里的對(duì)象格式現(xiàn)在是固定的,后面可能會(huì)將其改為可以從參數(shù)中傳遞來.

終于整理完了

整理了好幾整天終于整理完了,現(xiàn)在方法還比較少,不過還是算都比較常用的.

(↓ˉ▽ˉ↓)

如果大家覺得我的組件好用的話,幫到你的話,歡迎大家Star,Fork,如果有什么問題的話也可以在github中想我提出,謝謝大家的支持.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,596評(píng)論 0 13
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,691評(píng)論 0 4
  • 與互加的相識(shí)已經(jīng)三月有余,在這短短的幾個(gè)月里,我和我的孩子們都有了一個(gè)全新的改變。 互加,...
    寧都286侯海紅閱讀 386評(píng)論 2 2
  • 時(shí)間過得真快,2017年已經(jīng)在忙碌拼搏中結(jié)束了!回顧這一年來的點(diǎn)滴,寫滿了不易,那是汗水與淚水,累與幸福交織著的日...
    上好媽媽閱讀 327評(píng)論 0 1
  • ———今日悅讀——— 【0222今日悅讀】夕瀠 【書名】《成功的真諦》——第五講1 【作者】稻盛和夫 【金句】 1...
    是你的兔閱讀 290評(píng)論 0 0

友情鏈接更多精彩內(nèi)容