說的是高階函數(shù)吧

10年建站經(jīng)驗, 成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計客戶的見證與正確選擇。創(chuàng)新互聯(lián)建站提供完善的營銷型網(wǎng)頁建站明細(xì)報價表。后期開發(fā)更加便捷高效,我們致力于追求更美、更快、更規(guī)范。
/**
* 高階函數(shù) - 操作函數(shù)的函數(shù),可以把一個或者多個函數(shù)作為參數(shù),并返回一個新的函數(shù);
*/
function not(f){
return function(){ // 這里 return 的是函數(shù)哦
/*var result = !f.apply(this,arguments);
if(!result){
console.log(arguments[0]);
}
return result;*/
return !f.apply(this,arguments);
}
}
/* 數(shù)組 every 方法的回調(diào)函數(shù),這個方法有三個參數(shù):
* value(當(dāng)前元素的值)、
* index(當(dāng)前元素的索引)、
* array(數(shù)組實例)。
*/
function even(value, index, ar) {
/*var result = value % 2 === 0;
if(!result){
console.log(arguments[0]);
}
return result;*/
return value % 2 === 0;
}
var arr = [2, 5];
/**
* every 方法會按升序順序?qū)γ總€數(shù)組元素調(diào)用一次傳入 callback 函數(shù),直到 callback 函數(shù)返回 false;
* 如果找到導(dǎo)致 callback 返回 false 的元素,則 every 方法會立即返回 false。 否則,every 方法返回 true;
* 如果 callback 參數(shù)不是函數(shù)對象,則將引發(fā) TypeError 異常;
* thisArg 可選。可在 callback 函數(shù)中為其引用 this 關(guān)鍵字的對象。
* 如果省略 thisArg,則 undefined 將用作 this 值。
* eg. array1.every(callback[, thisArg])
*/
if (arr.every(even)) {
console.log("All are even.");
} else {
console.log("Some are not even.");
}
if (arr.every(not(even))) {
console.log("All are odd.");
} else {
console.log("Some are not odd.");
}
1. JavaScript DOM 編程藝術(shù)
這本書作為被大家推薦的最多的前端入門書籍是有道理的。
他能真正讓大家了解dom腳本編程,或是說前端編程技術(shù)背后的思路和原則。
對于初學(xué)者來說,這本書沒有任何門檻,按部就班跟著書籍實例編寫代碼即可。
我們會知曉如何對瀏覽器元素操作和掌控,會學(xué)會如何實現(xiàn)簡單的頁面效果。
這種簡單易得的成就感是一個編程語言入門時最難能可貴的體驗。
閱讀建議:
這本書雖然簡單,但是能讓人快速對前端產(chǎn)生興趣和成就感。
不過后續(xù)學(xué)習(xí)jquery的時候可能會產(chǎn)生挫敗感。原生js dom操作的成就感會被jquery便捷的API所徹底打敗。所以一定要恰當(dāng)?shù)恼{(diào)整心態(tài),轉(zhuǎn)換思維方式,正確認(rèn)識到j(luò)query和原生js分別的優(yōu)劣之處。
在熟練使用jquery后還能想起來翻看這本書,找到之前未曾發(fā)現(xiàn)的閃光點,就是入門成功了。
2. JavsScript高級程序設(shè)計(第三版)
無論何時,這都是學(xué)習(xí)js最好的書。
如果說其他的書都是在合適的階段會有不一般的體驗。
這本書就是無論什么階段,都夠你感悟一番的。
當(dāng)你看完了市場上js相關(guān)(不包括框架類庫的最佳實踐類)的所有書籍。你再回去看這本書,也會發(fā)現(xiàn)其實95%的內(nèi)容早就寫在這本書里了,只不過你當(dāng)時等級不夠,根本沒有意識到。
這本書排版舒服,翻譯得體,內(nèi)容豐富,語言流暢。涵蓋了js語法(面向?qū)ο螅]包作用域等),js使用(dom,bom,html5API),編程實踐(高階函數(shù),編碼規(guī)范)等程序員使用javascript時會遇到的大部分問題。
(今天在上海面試了一天。大部分很順利,只是有幾個比較偏的問題沒回答好。晚上回去之后一翻高程三,果然在里面都寫得明明白白的。不得不服。)
閱讀建議:
人們喜歡把他和犀牛書拿一起推薦,不過就我看來,他們完全不是一個可讀性上的。
一個是課本一個是字典。而且還是佶屈聱牙的字典。
所以無論何時我都會把高程三排在js推薦書籍的第一位。
3. 鋒利的jQuery
圖忘了拍了,就不補了。
這本書如果緊接著dom編程看,會如我我說的那樣瞬間摧毀你的小小的成就感。
因為這本工具書級別的書簡單暴力到不給你思考什么“平穩(wěn)退化”,“js動畫計時器”這些dom編程中提及的問題,就直接就甩出一大片簡單有效的jqueryAPI顛覆你的世界觀。
這本書是如此的易懂以至于看完之后瞬間就覺得自己能把web玩出一片花來了。
作為工具書級別的書,或是說學(xué)習(xí)jqueryAPI的書,這是首選。
閱讀建議:
熟悉jquery是每個前端必須要會的事。
只是不要被Jquery的便捷迷惑,而拋離原生js,把原生js貶得一文不值,否則后面會付出昂貴的代價。
4. 學(xué)習(xí)Javascript數(shù)據(jù)結(jié)構(gòu)與算法
這本書相對是一本冷門書。
為什么我會推薦他,是因為他能解決每個半路出家的js程序員都曾思考過的一些問題:
1. 我們的數(shù)組Array這么強大,要棧Stack,隊列Queue這些功能少,半半拉拉的東西干什么呢?
2. 我們學(xué)的數(shù)據(jù)結(jié)構(gòu)搞來搞去好像也就那些玩意,為什么被大家這么推崇,還要分門別類討論呢?
所以這本書只是為何告訴你上面這些問題的答案:
1. 棧和隊列本來就沒有Array功能強。沒有Stack和Queue類只是因為ES5不去實現(xiàn)它而已。作為一種相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)集合,其存在意義是不應(yīng)該被其功能強大與否來決定的。
2. 數(shù)據(jù)結(jié)構(gòu)和編程語言無關(guān)。語言死了,他們會在下一門語言里重生。哪怕計算機死了,他們都會在下一個概念體里重生。
閱讀建議:
跟著書本把這里面的結(jié)構(gòu)全部敲一遍,快的話一天就能搞定。
從此你便再不怕懼怕js相關(guān)的簡單數(shù)據(jù)結(jié)構(gòu)問題。
但是,遇上高級的樹,圖等問題該跪還是要跪。因為這本書虎頭蛇尾,后面的高級點的數(shù)據(jù)結(jié)構(gòu)介紹的不夠深。
適合經(jīng)常反思“它從哪里來,要到哪里去?”的js程序員,或后悔以前數(shù)據(jù)結(jié)構(gòu)沒好好學(xué)的前端同學(xué)。
5. JavaScript設(shè)計模式與開發(fā)實踐
我認(rèn)為騰訊AlloyTeam的這本書對我?guī)椭敲栏叱倘?/p>
那時候我恰好換公司,從原來的開發(fā)方式切換成另一種完全不同的開發(fā)方式,讓我很不適應(yīng)。
這本書及時的蹦出來,他拿實際的應(yīng)用場景舉例,告訴你不同js項目里如何共通設(shè)計模式,還極其詳細(xì)的介紹了函數(shù)的高級用法,能讓你對js高階函數(shù)的認(rèn)知上升一個臺階。
難能可貴的是他還拿java作為靜態(tài)語言的類比。從語言統(tǒng)一高度來給你分析這些問題。
和上本介紹數(shù)據(jù)結(jié)構(gòu)的書一樣,這本書有的放矢,能完美的解決對js設(shè)計模式有疑問的同學(xué)的實際問題。
他比上本書更深刻,更易讀,也更貼近實踐。
閱讀建議:
這是本適合反復(fù)閱讀的書籍。
如果你的思路能根據(jù)應(yīng)用場景自動切換到最適合的設(shè)計模式,說明你已吃透這本書了。
6. 高性能JavaScript
作為Orelly唯一一本我確實認(rèn)可的javascript相關(guān)的書。作為Orelly唯一一本我確實認(rèn)可的javascript相關(guān)的書。
他摒棄了Orelly系列所有我不喜歡的特點:
老外的聊天說教式閱讀體驗,樣例不夠豐富,排版單一,破事水等。
他的優(yōu)點如下:
1. 情景豐富,基本涉及所有js性能優(yōu)化的場景。還會給出不同場景的實際測試數(shù)據(jù),真實可信。我們在閱讀這些場景實例的同時也豐富了自己js的使用經(jīng)驗。
2. 給出了很多看似"旁門左道"的解決方案,而這些冷門的解決方案恰恰是有些人死活百度不到的真正能解決問題的最優(yōu)解。
3. 在說問題的同時說原理,深入淺出,游刃有余。所以這本書不僅僅是一本介紹js性能相關(guān)的書,而是一本涉及瀏覽器原理,js解析原理,用戶體驗等知識的javascript最佳注解。
閱讀建議:
建議和高程三一起看,可以算是高程三閱讀的最佳伴侶。
高程三告訴你“他叫什么,他什么樣”,
這本書就告訴你“他為什么”,“他該怎樣”。
所以,當(dāng)別人還在為某些問題絞盡腦汁的時候,你已經(jīng)從起點上干翻他們了。
7. 你不知道的JavaScript(YOU DONT KNOW JAVASCRIPT)
大名鼎鼎的Github開源的書籍。大名鼎鼎的Github開源的書籍。
為了他的名氣我也得買一本實體書來拜讀下。
這本是上卷,只涉及作用域和閉包,this和對象原型兩部分。
不過其深入程度是其他js書籍難以企及的。
可以說,這已經(jīng)是大部分前端程序員對js語法可以深入了解的最底層了,再往下就直面編譯原理了。
今天小編要跟大家分享的文章是關(guān)于Web前端工程師應(yīng)該知道的JavaScript使用小技巧。任何一門技術(shù)在實際中都會有一些屬于自己的小技巧。同樣的,在使用JavaScript時也有一些自己的小技巧,只不過很多時候有可能容易被大家忽略。而在互聯(lián)網(wǎng)上,時不時的有很多同行朋友會總結(jié)(或收集)一些這方面的小技巧。
今天在這篇文章中,小編會整理一些大家熟悉或不熟悉的有關(guān)于JavaScript的小技巧,希望能夠?qū)Υ蠹业膶W(xué)習(xí)和工作有所幫助。
一、數(shù)組
先來看使用數(shù)組中常用的一些小技巧。
01、數(shù)組去重
ES6提供了幾種簡潔的數(shù)組去重的方法,但該方法并不適合處理非基本類型的數(shù)組。對于基本類型的數(shù)組去重,可以使用...new
Set()來過濾掉數(shù)組中重復(fù)的值,創(chuàng)建一個只有唯一值的新數(shù)組。
constarray=[1,1,2,3,5,5,1]
constuniqueArray=[...newSet(array)];
console.log(uniqueArray);
Result:(4)[1,2,3,5]
這是ES6中的新特性,在ES6之前,要實現(xiàn)同樣的效果,我們需要使用更多的代碼。該技巧適用于包含基本類型的數(shù)組:undefined、null、boolean、string和number。如果數(shù)組中包含了一個object,function或其他數(shù)組,那就需要使用另一種方法。
除了上面的方法之外,還可以使用Array.from(newSet())來實現(xiàn):
constarray=[1,1,2,3,5,5,1]
Array.from(newSet(array))
Result:(4)[1,2,3,5]
另外,還可以使用Array的.filter及indexOf()來實現(xiàn):
constarray=[1,1,2,3,5,5,1]
array.filter((arr,index)=array.indexOf(arr)===index)
Result:(4)[1,2,3,5]
注意,indexOf()方法將返回數(shù)組中第一個出現(xiàn)的數(shù)組項。這就是為什么我們可以在每次迭代中將indexOf()方法返回的索引與當(dāng)索索引進(jìn)行比較,以確定當(dāng)前項是否重復(fù)。
02、確保數(shù)組的長度
在處理網(wǎng)格結(jié)構(gòu)時,如果原始數(shù)據(jù)每行的長度不相等,就需要重新創(chuàng)建該數(shù)據(jù)。為了確保每行的數(shù)據(jù)長度相等,可以使用Array.fill來處理:
letarray=Array(5).fill('');
console.log(array);
Result:(5)["","","","",""]
03、數(shù)組映射
不使用Array.map來映射數(shù)組值的方法。
constarray=[
{
ame:'大漠',
email:'w3cplus@#'
},
{
ame:'Airen',
email:'airen@#'
}
]
constname=Array.from(array,({name})=name)
Result:(2)["大漠","Airen"]
04、數(shù)組截斷
如果你想從數(shù)組末尾刪除值(刪除數(shù)組中的最后一項),有比使用splice()更快的替代方法。
例如,你知道原始數(shù)組的大小,可以重新定義數(shù)組的length屬性的值,就可以實現(xiàn)從數(shù)組末尾刪除值:
letarray=[0,1,2,3,4,5,6,7,8,9]
console.log(array.length)
Result:10
array.length=4
console.log(array)
Result:(4)[0,1,2,3]
這是一個特別簡潔的解決方案。但是,slice()方法運行更快,性能更好:
letarray=[0,1,2,3,4,5,6,7,8,9];
array=array.slice(0,4);
console.log(array);
Result:[0,1,2,3]
05、過濾掉數(shù)組中的falsy值
如果你想過濾數(shù)組中的falsy值,比如0、undefined、null、false,那么可以通過map和filter方法實現(xiàn):
constarray=[0,1,'0','1','大漠','#',undefined,true,false,null,'undefined','null',NaN,'NaN','1'+0]
array.map(item={
returnitem
}).filter(Boolean)
Result:(10)[1,"0","1","大漠","#",true,"undefined","null","NaN","10"]
06、獲取數(shù)組的最后一項
數(shù)組的slice()取值為正值時,從數(shù)組的開始處截取數(shù)組的項,如果取值為負(fù)整數(shù)時,可以從數(shù)組末屬開始獲取數(shù)組項。
letarray=[1,2,3,4,5,6,7]
constfirstArrayVal=array.slice(0,1)
Result:[1]
constlastArrayVal=array.slice(-1)
Result:[7]
console.log(array.slice(1))
Result:(6)[2,3,4,5,6,7]
console.log(array.slice(array.length))
Result:[]
正如上面示例所示,使用array.slice(-1)獲取數(shù)組的最后一項,除此之外還可以使用下面的方式來獲取數(shù)組的最后一項:
console.log(array.slice(array.length-1))
Result:[7]
07、過濾并排序字符串列表
你可能有一個很多名字組成的列表,需要過濾掉重復(fù)的名字并按字母表將其排序。
在我們的例子里準(zhǔn)備用不同版本語言的JavaScript
保留字的列表,但是你能發(fā)現(xiàn),有很多重復(fù)的關(guān)鍵字而且它們并沒有按字母表順序排列。所以這是一個完美的字符串列表(數(shù)組)來測試我們的JavaScript小知識。
varkeywords=['do','if','in','for','new','try','var','case','else','enum','null','this','true','void','with','break','catch','class','const','false','super','throw','while','delete','export','import','return','switch','typeof','default','extends','finally','continue','debugger','function','do','if','in','for','int','new','try','var','byte','case','char','else','enum','goto','long','null','this','true','void','with','break','catch','class','const','false','final','float','short','super','throw','while','delete','double','export','import','native','public','return','static','switch','throws','typeof','boolean','default','extends','finally','package','private','abstract','continue','debugger','function','volatile','interface','protected','transient','implements','instanceof','synchronized','do','if','in','for','let','new','try','var','case','else','enum','eval','null','this','true','void','with','break','catch','class','const','false','super','throw','while','yield','delete','export','import','public','return','static','switch','typeof','default','extends','finally','package','private','continue','debugger','function','arguments','interface','protected','implements','instanceof','do','if','in','for','let','new','try','var','case','else','enum','eval','null','this','true','void','with','await','break','catch','class','const','false','super','throw','while','yield','delete','export','import','public','return','static','switch','typeof','default','extends','finally','package','private','continue','debugger','function','arguments','interface','protected','implements','instanceof'];
因為我們不想改變我們的原始列表,所以我們準(zhǔn)備用高階函數(shù)叫做filter,它將基于我們傳遞的回調(diào)方法返回一個新的過濾后的數(shù)組。回調(diào)方法將比較當(dāng)前關(guān)鍵字在原始列表里的索引和新列表中的索引,僅當(dāng)索引匹配時將當(dāng)前關(guān)鍵字push到新數(shù)組。
最后我們準(zhǔn)備使用sort方法排序過濾后的列表,sort只接受一個比較方法作為參數(shù),并返回按字母表排序后的列表。
在ES6下使用箭頭函數(shù)看起來更簡單:
constfilteredAndSortedKeywords=keywords
.filter((keyword,index)=keywords.lastIndexOf(keyword)===index)
.sort((a,b)=a
這是最后過濾和排序后的JavaScript保留字列表:
console.log(filteredAndSortedKeywords);
Result:['abstract','arguments','await','boolean','break','byte','case','catch','char','class','const','continue','debugger','default','delete','do','double','else','enum','eval','export','extends','false','final','finally','float','for','function','goto','if','implements','import','in','instanceof','int','interface','let','long','native','new','null','package','private','protected','public','return','short','static','super','switch','synchronized','this','throw','throws','transient','true','try','typeof','var','void','volatile','while','with','yield']
08、清空數(shù)組
如果你定義了一個數(shù)組,然后你想清空它。通常,你會這樣做:
letarray=[1,2,3,4];
functionemptyArray(){
array=[];
}
emptyArray();
但是,這有一個效率更高的方法來清空數(shù)組。你可以這樣寫:
letarray=[1,2,3,4];
functionemptyArray(){
array.length=0;
}
emptyArray();
09、拍平多維數(shù)組
使用...運算符,將多維數(shù)組拍平:
10、從數(shù)組中獲取最大值和最小值
可以使用Math.max和Math.min取出數(shù)組中的最大小值和最小值:
constnumbers=[15,80,-9,90,-99]
constmaxInNumbers=Math.max.apply(Math,numbers)
constminInNumbers=Math.min.apply(Math,numbers)
console.log(maxInNumbers)
Result:90
console.log(minInNumbers)
Result:-99
另外還可以使用ES6的...運算符來完成:
constnumbers=[1,2,3,4];
Math.max(...numbers)
Result:4
Math.min(...numbers)
Result:1
二、對象
在操作對象時也有一些小技巧。
01、使用...運算符合并對象或數(shù)組中的對象
同樣使用ES的...運算符可以替代人工操作,合并對象或者合并數(shù)組中的對象。
//合并對象
constobj1={
ame:'大漠',
url:'#'
}
constobj2={
ame:'airen',
age:30
}
constmergingObj={...obj1,...obj2}
Result:{name:"airen",url:"#",age:30}
//合并數(shù)組中的對象
constarray=[
{
ame:'大漠',
email:'w3cplus@#'
},
{
ame:'Airen',
email:'airen@#'
}
]
constresult=array.reduce((accumulator,item)={
return{
...accumulator,
[item.name]:item.email
}
},{})
Result:{大漠:"w3cplus@#",Airen:"airen@#"}
02、有條件的添加對象屬性
不再需要根據(jù)一個條件創(chuàng)建兩個不同的對象,以使它具有特定的屬性。為此,使用...操作符是最簡單的。
constgetUser=(emailIncluded)={
return{
ame:'大漠',
blog:'w3cplus',
...emailIncluded{email:'w3cplus@#'}
}
}
constuser=getUser(true)
console.log(user)
Result:{name:"大漠",blog:"w3cplus",email:"w3cplus@#"}
constuserWithoutEmail=getUser(false)
console.log(userWithoutEmail)
Result:{name:"大漠",blog:"w3cplus"}
03、解構(gòu)原始數(shù)據(jù)
你可以在使用數(shù)據(jù)的時候,把所有數(shù)據(jù)都放在一個對象中。同時想在這個數(shù)據(jù)對象中獲取自己想要的數(shù)據(jù)。
在這里可以使用ES6的Destructuring特性來實現(xiàn)。比如你想把下面這個obj中的數(shù)據(jù)分成兩個部分:
constobj={
ame:'大漠',
blog:'w3cplus',
email:'w3cplus@#',
joined:'2019-06-19',
followers:45
}
letuser={},userDetails={}
({name:user.name,email:user.email,...userDetails}=obj)
{name:"大漠",blog:"w3cplus",email:"w3cplus@#",joined:"2019-06-19",followers:45}
console.log(user)
Result:{name:"大漠",email:"w3cplus@#"}
console.log(userDetails)
Result:{blog:"w3cplus",joined:"2019-06-19",followers:45}
04、動態(tài)更改對象的key
在過去,我們首先必須聲明一個對象,然后在需要動態(tài)屬性名的情況下分配一個屬性。在以前,這是不可能以聲明的方式實現(xiàn)的。不過在ES6中,我們可以實現(xiàn):
constdynamicKey='email'
letobj={
ame:'大漠',
blog:'w3cplus',
[dynamicKey]:'w3cplus@#'
}
console.log(obj)
Result:{name:"大漠",blog:"w3cplus",email:"w3cplus@#"}
05、判斷對象的數(shù)據(jù)類型
使用Object.prototype.toString配合閉包來實現(xiàn)對象數(shù)據(jù)類型的判斷:
constisType=type=target=`[object${type}]`===Object.prototype.toString.call(target)
constisArray=isType('Array')([1,2,3])
console.log(isArray)
Result:true
上面的代碼相當(dāng)于:
functionisType(type){
returnfunction(target){
return`[object${type}]`===Object.prototype.toString.call(target)
}
}
isType('Array')([1,2,3])
Result:true
或者:
constisType=type=target=`[object${type}]`===Object.prototype.toString.call(target)
constisString=isType('String')
constres=isString(('1'))
console.log(res)
Result:true
06、檢查某對象是否有某屬性
當(dāng)你需要檢查某屬性是否存在于一個對象,你可能會這樣做:
varobj={
ame:'大漠'
}
if(obj.name){
console.l
(1) html + css。
(2)JavaScript。不是所有的網(wǎng)頁都必須有js,但是要想實現(xiàn)一些超酷的功能和界面的時候,就需要涉及到j(luò)s。如果沒有其他編程語言的基礎(chǔ)的話,學(xué)起來可能要費些力。
(3)Photoshop、flash。熟悉會一點兒就行了,沒必要全部都學(xué)得精通,當(dāng)然如果你在學(xué)習(xí)的過程中,發(fā)現(xiàn)你ps或者flash比較感興趣的話,也可以嘗試做美工這一行。
(4)html5和css3。可以先了解一下,然后再入手。畢竟IE的瀏覽器大多還不支持。
(5)瀏覽器兼容。懂web標(biāo)準(zhǔn),熟練手寫 xhtml css3 并符合 符合w3c標(biāo)準(zhǔn)。代碼能兼容主流瀏覽器Firfox,Chrome、Safari、IE、Opera。雖然IE6很多都不兼容,但現(xiàn)在還使用的人還是有的。
(6)熟悉一門后臺編程語言 asp、php、jsp等
當(dāng)然是javascript。JavaScript 對象模型構(gòu)建在該語言的其他功能之上來支持大量的庫,比如 Dojo。這種靈活性讓每個框架能夠以一種精細(xì)的方式更改對象模型。在某種程度上,這種靈活性是一種極大的缺點。它可以導(dǎo)致可怕的互操作性問題(盡管該語言的靈活性可以部分緩解這些問題)。
而另一方面,靈活性又是一種巨大的優(yōu)勢。Java 語言一直苦于無法充分增強其靈活性,原因是它的基本對象模型還未靈活到可以被擴展的程度。一個典型的企業(yè)級開發(fā)人員為能夠成功使用 Java 語言必須要學(xué)習(xí)很多東西,而新出現(xiàn)的一些優(yōu)秀的開放源碼項目和新技術(shù),比如面向方面編程、Spring 編程框架和字節(jié)碼增強庫,則帶來了大量要學(xué)的代碼。
最后,JavaScript 優(yōu)秀的靈活性的確讓您體會到了一些高階語言的強大功能。當(dāng)然您無需選擇為每個項目或大多數(shù)項目都做這樣的權(quán)衡和折衷。但了解一種語言的優(yōu)勢和劣勢 —— 通過參考大量信息,而不僅僅基于廣告宣傳或公眾意見 —— 會讓您可以更好地控制何時需要使用以及何時不能使用這種語言。當(dāng)您在修改 JavaScript Web 小部件時,您至少知道該如何讓此語言發(fā)揮它最大的優(yōu)勢。請繼續(xù)跨越邊界吧
文章標(biāo)題:javascript高階,javascript高級進(jìn)階
本文地址:http://chinadenli.net/article27/dsgjpjj.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、動態(tài)網(wǎng)站、App開發(fā)、Google、App設(shè)計、做網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)