摘要:加快整體響應速度。步驟,用戶在商戶中選擇商品,提交訂單,選擇微信支付。微信支付要求商戶訂單號保持唯一性,商戶后臺收到用戶支付單,調用微信支付統一下單接口。,與團隊成員,,產品經理的溝通。
一:頁面性能優化:
1,減少http請求,資源的合并與壓縮,恰當的緩存,不濫用float,雪碧圖代替圖片,異步加載。減少dom節點,
二: 數組的深淺拷貝
1,假設B復制了A,當修改A時,看B是否會發生變化,
如果B也跟著變了,說明這是淺拷貝,。如果B沒變,那就是深拷貝。
2,基本數據類型有哪些,number,string,boolean,null,undefined五類。
引用數據類型:對象,數組,函數。
3,如何深拷貝?
借用JSON對象的parse和stringify。
借用JQ的extend方法。
$.extend( [deep ], target, object1 [, objectN ] );
let a=[0,1,[2,3],4],
b=$.extend(true,[],a);
a[0]=1;
a2=1;
console.log(a,b);
4,使用場景?
但多人開發情況下,你是沒辦法明確這堆數據是否有其它功能也需要使用, 直接修改可能會造成隱性問題,深拷貝能幫你更安全安心的去操作數據,
根據實際情況來使用深拷貝,
三: 前后端分離的原理
1,原始人時代:
發布,需要用eclipse把代碼打成一個war包,然后把這個war包發布到生產環境下的web容器里。這時候前后端代碼都在這個war包里,html,js,css,各種第三方庫等。這樣服務器壓力會很大,頁面中的所有請求都要通過這個服務器,如果同時很多人訪問這個網站速度就會很慢。一旦服務器出現狀況,前后端一起玩完,用戶體驗級差。。
2, 前后端分離的優勢
1,可以實現正真的前后端解耦,前端服務器放 css,js,圖片等一系列資源,前端服務器負責控制頁面引用,跳轉,路由。前端頁面異步調用后端的接口。加快整體響應速度。
3,減少后端服務器的開發/負載壓力。除了接口外的http請求全部轉到 前端nginx上。
前端大量的組件化代碼 可以抽出來復用,組件化開發提升效率。
前端與后端是兩個項目。放在兩個不同的服務器,需要獨立部署。
四:同步和異步的區別
1,javascript語言是一門“單線程”的語言,
其實同步和異步,
無論如何,做事情的時候都是只有一條流水線(單線程),
同步和異步的差別就在于這條流水線上各個流程的執行順序不同。
最基礎的異步是setTimeout和setInterval函數,
五:異步promise
1,自己身上有all、reject、resolve這幾個眼熟的方法,原型上有then、catch等同樣很眼熟的方法。
2,一: 優點和缺點
可以將異步操作以同步操作流程的方式表達出來,避免了層層嵌套的回調函數。此外,Promise對象提供統一的接口,使得控制異步操作更加容易。
3,使用
新建new一個promise,傳入resove和reject兩個參數分別代表成功失敗的方法。
六:常用的ES6
1,let和const 只在聲明指令的塊級作用域內有效。
let所聲明的變量可以改變,const聲明常量,不能改變
2,Object.assign()方法用于對象的合并
const target = { a: 1 };
const source1 = { b: 2 };
const source2 = { c: 3 };
Object.assign(target, source1, source2);
target // {a:1, b:2, c:3}
3,promise對象
4,import 導入模塊
5,字符串拼接
Es6的這種新的“字符串拼接”方法比較簡單,沒有繁瑣的加號和引號,只需要在所需要的字符串“邊界”加上``即可。
var name = "Datura"; var age = 18; var sex = "nü"; var hobby = "敲代碼"; var str1 = `我是${name},今年${age}歲,性別${sex}的了,愛好${hobby}`; //注意此處有兩個“ `` ” var str2 = "我是"+name+",今年"+age+"歲,性別"+sex+",愛好"+hobby+""; //這個是原來的寫法 alert(st1r);
6,map對象
let map = new Map();
map.set("a","apple");
map.set("b","banana");
console.log(map); // Map {"a" => "apple", "b" => "banana"}
7,for in循環, for of循環(不能循環json數據)
8,箭頭函數
var show = function(){ alert(12); }; show(); // 12 const show = () =>{ alert(12); }; show(); // 12 //個人理解:這里將function關鍵字去掉然后在“()”后面加一個“=>”
七:app里面的支付功能,分享功能
(可以查看微信開發文檔)
1,商戶APP調用微信提供的SDK調用微信支付模塊,
商戶APP會跳轉到微信中完成支付,支付完后跳回到商戶APP內,最后展示支付結果。
步驟:
1,用戶在商戶APP中選擇商品,提交訂單,選擇微信支付。
創建訂單接口需要的參數:
(1) 交易金額
(2) 交易類型trade_type
JSAPI--JSAPI支付(或小程序支付)、NATIVE--Native支付、APP--app支付,MWEB--H5支付,不同trade_type決定了調起支付的方式,請根據支付產品正確上傳
(3) 貨幣類型
境內商戶號僅支持人民幣
CNY:人民幣
(4) 換算成北京時間為2014年11月11日8時0分0秒。
(5)部分系統取到的值為毫秒級,需要轉換成秒(10位數字)。
(6)商戶訂單號
。微信支付要求商戶訂單號保持唯一性
(7)
2,商戶后臺收到用戶支付單,調用微信支付統一下單接口。
(需要傳的參數都有:appid, 隨機字符串,不長于32位,簽名sign,訂單號,交易時間,訂單金額,)
3,統一下單接口返回正常的prepay_id,生成簽名
4,掉起微信支付,
5,返回支付結果。
分享功能:
1,先引入weixin.js。 然后通過config接口注入權限驗證配置
wx.config({ debug: true, // 開啟調試模式,調用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數,可以在pc端打開,參數信息會通過log打出,僅在pc端時才會打印。 appId: "", // 必填,公眾號的唯一標識 timestamp: , // 必填,生成簽名的時間戳 nonceStr: "", // 必填,生成簽名的隨機串 signature: "",// 必填,簽名,見附錄1 jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表見附錄2
});
通過ready接口處理成功驗證,
wx.ready(function(){ // config信息驗證后會執行ready方法,所有接口調用都必須在config接口獲得結果之后,config是一個客戶端的異步操作,所以如果需要在頁面加載時就調用相關接口,則須把相關接口放在ready函數中調用來確保正確執行。對于用戶觸發時才調用的接口,則可以直接調用,不需要放在ready函數中。
});
八: html5的新特性
1,繪畫的canvas元素
2,video和audio元素
3,本地離線存儲localStorage 和 sessionStorage
4,新的特殊內容元素,比如 article、footer、header、nav、section
5,
(1) localStorage和sessionStorage都是用來存儲客戶端臨時信息的對象。
(2) cookie數據存放在客戶的瀏覽器上,session數據放在服務器上
(3) cookie不是很安全,考慮到安全應當使用session
(4) session會在一定時間內保存在服務器上,當訪問增多,會比較占用你服務器的性能,考慮到減輕服務器性能方面,應當使用cookie。
(5) 建議將登錄信息等重要信息存放為session,其他信息如果需要保留,可以放在cookie中
localStorage - 用于長久保存整個網站的數據,保存的數據沒有過期時間,直到手動去除。
sessionStorage - 用于臨時保存同一窗口(或標簽頁)的數據,在關閉窗口或標簽頁之后將會刪除這些數據。
6,表單新增了輸入類型和驗證
九:攔截器
統一處理錯誤及配置請求信息
登陸攔截設置
路由攔截:
1,
1,在定義路由的時候就需要多添加一個自定義字段,
用于判斷該路由的訪問是否需要登錄。如果用戶已經登錄,則順利進入路由, 否則就進入登錄頁面。
{ path: "/repository", name: "repository", meta: { requireAuth: true, // 添加該字段,表示進入這個路由是需要登錄的 }, component: Repository },
2,用vue-router提供的鉤子函數beforeEach()對路由進行判斷。
router.beforeEach((to, from, next) => { if (to.meta.requireAuth) { // 判斷該路由是否需要登錄權限 if (store.state.token) { // 通過vuex state獲取當前的token是否存在 next(); } else { next({ path: "/login", query: {redirect: to.fullPath} // 將跳轉的路由path作為參數,登錄成功后跳轉到該路由 }) } } else { next(); }
})
第二步:攔截器
要想統一處理所有http請求和響應,就得用上 axios 的攔截器。通過配置http response inteceptor,當后端接口返回401 Unauthorized(未授權),讓用戶重新登錄。
// http request 攔截器 axios.interceptors.request.use( config => { if (store.state.token) { // 判斷是否存在token,如果存在的話,則每個http header都加上token config.headers.Authorization = `token ${store.state.token}`; } return config; }, err => { return Promise.reject(err); }); // http response 攔截器 axios.interceptors.response.use( response => { return response; }, error => { if (error.response) { switch (error.response.status) { case 401: // 返回 401 清除token信息并跳轉到登錄頁面 store.commit(types.LOGOUT); router.replace({ path: "login", query: {redirect: router.currentRoute.fullPath} }) } } return Promise.reject(error.response.data) // 返回接口返回的錯誤信息 });
十:跨域問題
1,jsonp方法
只需配置一個dataType:"jsonp",就可以發起一個跨域請求。
2, window.name + iframe跨域
3,postMessage跨域
用法:postMessage(data,origin)方法接受兩個參數
data: html5規范支持任意基本類型或可復制的對象,但部分瀏覽器只支持字符串,所以傳參時最好用JSON.stringify()序列化。
origin: 協議+主機+端口號,也可以設置為"*",表示可以傳遞給任意窗口,如果要指定和當前窗口同源的話設置為"/"。
4,WebSocket協議跨域
原生WebSocket API使用起來不太方便,我們使用Socket.io,它很好地封裝了webSocket接口,提供了更簡單、靈活的接口,也對不支持webSocket的瀏覽器提供了向下兼容。
十一:什么叫優雅降級和漸進增強?
1,漸進增強:
先根據低版本進行構建頁面,保證最基本的功能。然后再根據高級瀏覽器進行效果,達到更好的用戶體驗。
2,優雅降級:
一開始就構建完整的功能,然后在根據低版本瀏覽器兼容。
十二:對前端界面工程師這個職位是怎么樣理解的?
1,快速高效精準的完成效果圖,注重用戶體驗。
2,與團隊成員,UI,產品經理的溝通。
3,寫出優美的代碼格式。注釋
4,優化頁面
十三:JavaScript 的同源策略
1,同源策略指的是:協議,域名,端口相同,同源策略是一種安全協議。
指一段腳本只能讀取來自同一來源的窗口和文檔的屬性。
十四:電商網站如果有大量圖片,怎么去優化界面?
1,圖片懶加載,滾動到位置再發送請求
2,rem,em,px的區別
使用它們的目的就是為了適應各種手機屏幕。
em:而em是繼承父元素的字體
相對長度的單位,用來設置文本的字體尺寸的,相對于當前對象內文本的尺寸,
以上實例em是相對于父級元素div的,div設置的字體大小為30px,所以0.5em計算后的字體大小為:30px x 0.5 = 15px
3,rem是相對于html元素字體大小的設置。字體大小是html的值 * 倍數。
(1) em:
十五:JQUERY篇章
1,選擇器:
CSS 選擇器,ID選擇器,標簽選擇器,屬性選擇器$("[href]") 選取所有帶有 href 屬性的元素。
attr(),$("button").click(function(){
alert($("#w3s").attr("href"));
});
2,show(), hide(),fadeIn(), fadeOut(),
3,操作DOM
append() - 在被選元素的結尾插入內容
prepend() - 在被選元素的開頭插入內容
after() - 在被選元素之后插入內容
before() - 在被選元素之前插入內容
remove() - 刪除被選元素(及其子元素)
empty() - 從被選元素中刪除子元素
十六: css篇,定位問題position
1,relative ,相對定位。
如果元素添加了relative,設置偏移量,元素會有移動但是所占據的那個位置空間依然還在,也不會擠掉其他的元素。
2,position:absolute,絕對定位。
元素加了絕對定位,在頁面中是不占據空間的,他會浮動起來。他會相對于他的父元素定位。
如果它的父元素沒有設置定位,那么就得看它父元素的父元素是否有設置定位 ,如果還是沒有就繼續向更高層的祖先元素類推,總之它的定位就是相對于設置了除static定位之外的定位(比如position:relative)的第一個祖先元素,如果所有的祖先元素都沒有以上三種定位中的其中一種定位,那么它就會相對于文檔body來定位(并非窗口,相對于窗口定位的是fixed)
3,fixed相對于瀏覽器窗口進行定位。
4, 1.id選擇器( # myid)
2.類選擇器(.myclassname) 3.標簽選擇器(div, h1, p) 4.相鄰選擇器(h1 + p) 5.子選擇器(ul > li) 6.后代選擇器(li a) 7.通配符選擇器( * ) 8.屬性選擇器(a[rel = "external"]) 9.偽類選擇器(a: hover, li:nth-child)
5,CSS3新增偽類舉例:
p:first-of-type 選擇屬于其父元素的首個
元素的每個
元素。
p:last-of-type 選擇屬于其父元素的最后
元素的每個
元素。
p:only-of-type 選擇屬于其父元素唯一的
元素的每個
元素。
p:only-child 選擇屬于其父元素的唯一子元素的每個
元素。
p:nth-child(2) 選擇屬于其父元素的第二個子元素的每個
元素。
:enabled :disabled 控制表單控件的禁用狀態。
:checked 單選框或復選框被選中。
6,css3動畫
(1) @keyframes規則定義動畫
設置動畫的名稱, 對關鍵幀進行操作。
動畫至少需要兩個關鍵幀:一個from關鍵幀,它是我們動畫的起始狀態,一個to幀,它是它的結束狀態。在每個多帶帶的關鍵幀塊中,我們可以定義要設置動畫的屬性:
十七:瀏覽器兼容性問題
1,css透明,
IE:filter:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=60)。
FF:opacity:0.6。
2,元素水平居中問題
FF: margin:0auto;
IE: 父級{ text-align:center; }
3,頁面的最小高度:
(1)IE不識別min,可以通過js的判斷來添加
4,圖片下有空隙產生
img為display:block
5,
十八: 移動端兼容性問題
1,防止手機中頁面放大和縮小
2,上下拉動滾動條時卡頓、慢
body { -webkit-overflow-scrolling:touch; overflow-scrolling:touch; }
3,iphone及ipad下輸入框默認內陰影
element { -webkit-appearance:none; }
4,click的300ms延遲問題
方案一:禁用縮放,
方案二:安裝第三方依賴包。
npm install fastclick ---save
(2)在入口文件main.js中引入并使用,方法如下:
import fastClick from "fastclick" fastClick.attach(document.body)
5, 響應式圖片
解決方法:讓圖片最大只能是自己的寬度
img{ max-width: 100%; display: block; margin: 0 auto; }
6,輸入框的問題:
var oHeight = $(document).height(); //瀏覽器當前的高度 $(window).resize(function(){ if($(document).height() < oHeight){ $("#footer").css("position","static"); }else{ $("#footer").css("position","absolute"); }
});
7,Input 的placeholder會出現文本位置偏上的情況
input 的placeholder會出現文本位置偏上的情況:PC端設置line-height等于height能夠對齊,而移動端仍然是偏上,解決是設置line-height:normal
十九:flex彈性布局
1,使用flex盒模型來實現兩欄布局,左側固定200px,右側自適應寬度
父元素: display:flex
子元素1: width:200px; /固定寬度/
子元素2: flex: 1; /這里設置為占比1,填充滿剩余空間/
2,容器的屬性6個:
(1) flex-direction決定主軸的方向(即項目排列的方向)
.box { flex-direction: row | row-reverse | column | column-reverse; }
row(默認值):主軸為水平方向,起點在左端。
row-reverse:主軸為水平方向,起點在右端。
column:主軸為垂直方向,起點在上沿。
column-reverse:主軸為垂直方向,起點在下沿。
(2) flex-wrap屬性
默認情況下,項目都排在一條線(又稱”軸線”)上。flex-wrap屬性定義,如果一條軸線排不下,如何換行。
.box{ flex-wrap: nowrap | wrap | wrap-reverse; }
nowrap: 不換行
wrap: 換行,第一行在上方。
wrap-reverse: 換行,第一行在上方
(3) flex-flow:
是flex-direction和flex-wrap的簡寫形式,默認值row, nowrap
(4) justify-content屬性
定義了項目在主軸上的對齊方式
.box { justify-content: flex-start | flex-end | center | space-between | space-around; } //flex-start左對齊, flex-end右對齊, center居中對齊, space-between兩端對齊中間間隔相等 //space-around:每個項目兩側的間隔相等。所以,項目之間的間隔比項目與邊框的間隔大一倍。
(5) align-items屬性
定義項目在縱向對齊方式
.box { align-items: flex-start | flex-end | center | baseline | stretch; }
(6)align-content屬性
定義了多根軸線的對齊方式。如果項目只有一根軸線,該屬性不起作用。
.box { align-content: flex-start | flex-end | center | space-between | space-around | stretch; }
3,項目屬性,不常用
order flex-grow flex-shrink flex-basis flex align-self
4,flex屬性
是flex-grow, flex-shrink 和 flex-basis的簡寫,默認值為0 1 auto。后兩個屬性可選。
二十:vuex
vuex就是把組件的共享狀態提取出來,以一個全局方式管理。
任何組件都可以獲取狀態或者觸發行為。vuex就是專門為vue設計的狀態管理庫。
1,state
定義初始化狀態變量。
改變state中的狀態唯一方式就是顯示的提交(commit) mutation.
2,getters
可以監聽state里面值的變化。有時候我們需要從state中派生出一些狀態
,例如對列表過濾。類似于計算屬性。
可以以屬性的形式訪問這些值
store.getters.doneTodos // -> [{ id: 1, text: "...", done: true }]
3,mutation
改變state中狀態的唯一方法就是顯示提交mutations。是同步的
4,action方法
action類似于mutation不同在于:
(1) action提交mutation,而不是直接變更狀態
(2) action可以包含任意異步操作。
使用方式:
const mutations ={ increment(state){ return state.count++; } }; const actions = { increment(context){ context.commit("increment"); } }; //在組件中使用 this.$store.dispatch("xxx") 分發 action
二十一:移動端打包問題
打包安卓apk過程:
(1),基本依賴環境
nodejs環境
jdk(java的開發基礎類庫,因為 android )
SDK(安卓開發集成包,集成了安卓的開發工具,插件,API等等)
(2),環境配置
nodejs
jdk (無需配置環境變量)
sdk (需要配置環境變量)
gradle安裝
安裝ionic和cordova
全局安裝ionic和cordova(IONIC是UI,cordova負責打包成apk,并且可以調用原生安卓的各種API)
(3)打包
ionic cordova build android --release
如若你聰慧的雙眼發現如下字眼:Build Success! 說明你已經成功打包了。耐心等待,命令行結束會提示你apk的生成位置
給包生成簽名
2,移動端Mint UI?;?Vue.js 的移動端組件庫
(1)包案豐富的css和js組件。
二十二: js篇基礎
1,事件委托
把綁定到子元素的事件 委托到父元素上,原理就是事件冒泡
事件委托的優點?
(1) 因為每一個函數都是一個對象,對象越多,內存占有率就越大,自然性能就越差,使用事件委托,只需要在其父元素中定義一個事件就可以。
(3) 減少事件注冊,比如在ul上代理所有li的click事件就非常棒
可以實現當新增子對象時無需再次對其綁定(動態綁定事件)
實現方式用:event.target可以判定當前點擊的目標對象
2, 適合事件委托的事件有:
click, mousedown, mouseup, keydown, keyup, keypress
3, this作用域問題
(1) this總是指向調用它所在方法的對象。
this是在函數生成的時候,自動生成的一個內部對象,只能在函數內部使用。
(2) 全局函數調用
this代表的全局對象window。
(3) 對象方法的調用
如果函數作為對象的方法調用,this指向的是這個上級對象,即調用方法的對象。
(4) 構造函數的調用
構造函數中的this指向新創建的對象本身。
3,冒泡排序
(1) 原理:
依次比較相鄰的兩個值,如果后面的比前面的小,則將小的元素排到前面。依照這個規則進行多次并且遞減的迭代,直到順序正確
(2) 實現方法:
4,閉包
(1) 如何從外部讀取局部變量?
在函數的內部,再定義一個函數。
function f1(){ n = 999; function f2(){ console.log(n); //999 } }
在上面的代碼中,函數f2就被包括在函數f1內部,
這時f1內部的所有局部變量,對f2都是可見的。但是反過來就不行,
f2內部的局部變量對f1就是不可見的。
這就是javascript語言特有的‘鏈式作用域’結構(chain scope),子對象會一級一級地向上尋找所有父對象的變
量。所以,父對象的所有變量,對子對象都是可見的,反之則不成立。
既然f2可以讀取f1中的局部變量,那么只要把f2作為返回值,我們就可以在f1外部讀取它的內部變量了。
function f1(){ n = 999; function f2(){ console.log(n); } return f2; } var result = f1(); //返回的是f2函數 result(); //999
(2) 閉包的概念:
上一節代碼中的f2函數就是閉包。
閉包可以簡單理解成:
定義在一個函數內部的函數,
本質上閉包就是將函數內部和函數外部連接的一座橋梁。
(3)閉包的用途:
一個是前面提到的可以讀取函數內部的變量
另一個就是讓這些變量的值始終保持在內存中。
function f1(){ var n = 999; nAdd = function(){ n += 1; } function f2(){ console.log(n); } return f2; } var result = f1(); result(); //從函數外部通過閉包f2獲取到函數f1內部局部變量的值 nAdd(); //從函數外部通過閉包修改局部變量n的值 result(); //再次通過閉包f2獲取到函數f1內部局部變量的值 //console.log出的值是, 999, 1000
(4) 使用閉包的注意點:
1>由于閉包會使得函數中的變量都被保存在內存中,內存消耗很大,所以不能濫用閉包,否則會造成網頁的性能問題,在IE中可能導致內存泄露。解決方法時,在退出函數之前,將不使用的局部變量全部刪除。
2>閉包會在父函數外部,改變父函數內部變量的值。所以,如果你把父函數當作對象(object)使用,把閉包當作它的公用方法,把內部變量當作它的私有屬性,這時一定要小心,不要隨便改變父函數內部變量的值。
5,JS繼承
(1) 屬性繼承
就是將對象的成員復制一份給需要繼承的對象
存在問題:
父構造函數的原型對象和子構造函數的原型對象上的成員有共享問題
只能繼承父構造函數的原型對象上的成員, 不能繼承父構造函數的實例對象的成員
(2) 原型鏈繼承
prototype 英[?pr??t?ta?p]
即 子構造函數.prototype = new 父構造函數()
(3) 借用構造函數
// 創建父構造函數 function Person(name){ this.name = name; this.freinds = ["小王", "小強"]; this.showName = function(){ console.log(this.name); } } // 創建子構造函數 function Student(name){ // 使用call借用Person的構造函數 Person.call(this, name); } // 測試是否有了 Person 的成員 var stu = new Student("Li"); stu.showName(); // Li console.log(stu.friends); // ["小王","小強"]
使用call和apply借用其他構造函數的成員, 可以解決給父構造函數傳遞參數的問題, 但是獲取不到父構造函數原型上的成員.也不存在共享問題
(4) 組合繼承 (構造函數 + 原型式繼承)
(5) 借用構造函數 + 深拷貝
function Person(name,age){ this.name = name; this.age = age; this.showName = function(){ console.log(this.name); } } Person.prototype.friends = ["小王","小強","小王八"]; function Student(name,25){ // 借用構造函數(Person) Person.call(this,name,25); } // 使用深拷貝實現繼承 deepCopy(Student.prototype,Person.prototype); Student.prototype.constructor = Student;
6:BOM
(1) BOM的核心對象是window,它表示瀏覽器的一個實例。
(2) 全局作用域:
在全局作用域中生成的變量,函數都是window的屬性和方法。
全局變量與在window對象上直接定義的屬性還是有一些差別,
全局變量不能通過delete刪除,window對象可以。
(3) window對象有以下方法:
open close alert setTimeout clearTimeout setInterval clearInterval moveBy moveTo resizeBy resizeTo scrollBy scrollTo find back forward home stop print blur focus handleEvent releaseEvent routeEvent scroll
(4) http狀態碼
200:請求成功
404:請求的資源不存在
500:內部服務器錯誤
5XX服務端錯誤:
501,502,503,504,505
4XX客戶端錯誤
401,402,403
304: 對客戶端有緩存的情況下,服務端的一種響應。
403: 表示對請求資源的訪問被服務器拒絕
401: 表示發送的請求需要有通過 HTTP 認證的認證信息
7:數組的哪些方法會改變原數組?那些不會?
(1) 變原數組:
pop() 刪除最后一個元素并把長度減一 shift() 數組的第一個元素被刪除 shift(0,1) 0: 開始的索引,1:要刪除的個數。 push() 添加元素
(2) 不改變原數組
concat() 連接多個數組,返回新的數組 slice() foreach()
二十三: vue篇
1,簡述Vue的響應式原理
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/114831.html
摘要:此專欄文章是對力扣上算法題目各種方法的總結和歸納整理出最重要的思路和知識重點并以思維導圖形式呈現當然也會加上我對導圖的詳解目的是為了更方便快捷的記憶和回憶算法重點不用每次都重復看題解畢竟算法不是做了一遍就能完全記住的所 ...
此專欄文章是對力扣上算法題目各種方法的總結和歸納, 整理出最重要的思路和知識重點并以思維導圖形式呈現, 當然也會加上我對導圖的詳解. 目的是為了更方便快捷的記憶和回憶算法重點(不用每次都重復看題解), 畢竟算法不是做了一遍就能完全記住的. 所以本文適合已經知道解題思路和方法, 想進一步加強理解和記憶的朋友, 并不適合第一次接觸此題的朋友(可以根據題號先去力扣看看官方題解, 然后再看本文內容). 關...
此專欄文章是對力扣上算法題目各種方法的總結和歸納, 整理出最重要的思路和知識重點并以思維導圖形式呈現, 當然也會加上我對導圖的詳解. 目的是為了更方便快捷的記憶和回憶算法重點(不用每次都重復看題解), 畢竟算法不是做了一遍就能完全記住的. 所以本文適合已經知道解題思路和方法, 想進一步加強理解和記憶的朋友, 并不適合第一次接觸此題的朋友(可以根據題號先去力扣看看官方題解, 然后再看本文內容). 關...
摘要:截至年月日零時,杭州市常住人口為萬人。年,杭州市實現地區生產總值億元。阿里巴巴對杭州的影響巨大,一線的七個企業中,有四個企業都是阿里巴巴大集團下的。 歡迎持續關注我...
摘要:復制這一工作所花費的時間,在對象存活率達到一定程度時,將會變的不可忽視。針對老年代老年代的特點是區域較大,對像存活率高。這種情況,存在大量存活率高的對像,復制算法明顯變得不合適。 GC(Garbage Collection)即Java垃圾回收機制,是Java與C++的主要區別之一,作為Java開發者,一般不需要專門編寫內存回收和垃圾清理代碼,對內存泄露和溢出的問題,也不需要像C++程序...
閱讀 3782·2021-09-23 11:32
閱讀 2450·2021-09-06 15:01
閱讀 1616·2021-08-18 10:24
閱讀 3449·2019-12-27 11:44
閱讀 3604·2019-08-30 15:52
閱讀 2512·2019-08-30 11:11
閱讀 671·2019-08-29 17:27
閱讀 599·2019-08-29 16:22