Swift
編程
Swift51.com
首頁
社區(qū)
▼
資訊
問答
分享
建議
開源代碼
Xcode下載
Swift教程
hot
登錄
注冊
當(dāng)前位置:
首頁
> 分享
歡迎加入QQ討論群258996829
蘋果6袋
6
麥子學(xué)院
前端必備之ES6 javascript 開發(fā)技巧
發(fā)布時間:2018-04-23 22:17 回復(fù):0 查看:2697 最后回復(fù):2018-04-23 22:17
本文和大家分享的主要是一些ES6 javascript 的實用開發(fā)技巧,一起來看看吧,希望對大家
學(xué)習(xí)前端開發(fā)
有所幫助。
定義變量/常量
ES6 中新增加了 let 和 const 兩個命令,let 用于定義變量,const 用于定義常量 兩個命令與原有的 var 命令所不同的地方在于,let, const 都是塊級作用域,其有效范圍僅在代碼塊中,實例如下:
//es5if(1==1){
var b = 'foo';
}console.log(b);
//foo
//es6if(1==1){
let b = 'foo';
}console.log(b);
//undefined
定義常量對象
const a = {a:1,b:2};
a.b = 3;
console.log(a);
//{a:1,b:3}
上例中,常量 a 中的內(nèi)容在定義后,再進(jìn)行修改依然有效,原因是對于對象類型的使用是指針式引用,常量只是指向了對象的指針,對象本身的內(nèi)容卻依然可以被修改,注意,數(shù)組(Array) 也是對象; 那么如果在定義常量時使用基礎(chǔ)數(shù)據(jù)類型:string, number, boolean 等
const a = 1;
a = 2;
// Uncaught TypeError: Assignment to constant variable.
在使用中,建議使用 let 與 const 完全代替 var 命令
數(shù)值擴(kuò)展 轉(zhuǎn)換
Number.parseInt - 將字符串或數(shù)字轉(zhuǎn)換為整數(shù) Number.parseFloat - 將字符串或數(shù)字轉(zhuǎn)換為浮點數(shù)
Number.parseInt, Number.parseFloat 與 parseInt, parseFloat 功能一致,在ES6中,推薦使用 Number. 的方式進(jìn)行調(diào)用,這么做的目的是為了讓代碼的使用方式盡可能減少全局性方法,使用得語言逐步模塊化
測試函數(shù)
//測試是否整數(shù)Number.isInteger(21)//trueNumber.isInteger(1.11)//false
//測試是否NaNNumber.isNaN(Nan)//trueNumber.isNaN(1)//false
字符串?dāng)U展 字符串內(nèi)容測試
'abcdef'.includes('c');
//true'abcdef'.includes('ye');
//false'abcdef'.startsWith('a');
//true'abcdef'.endsWitch('f');
//true
//includes(), startsWith(), endsWith() 都支持第二個參數(shù),
//類型為數(shù)字類型,意為從第 n 個字符開始,endsWith()的第二個參數(shù)有點不一樣'abcdef'.includes('c', 4);
//false 從第5個字符開始查找是否有 'c' 這個字符'abcdef'.startsWith('d', 3);
//true 從第4個字符開始查找是否是以 'd' 字符為開頭'abcdef'.endsWith('d', 4);
//true 前面的4個字符里,是否以 'd' 字符為結(jié)尾
字符串內(nèi)容重復(fù)輸出
'a'.repeat(5);
//aaaaa 重復(fù)輸出5遍
原生支持模板語言
//es5
$('#result').append(
'There are ' + basket.count + ' ' +
'items in your basket, ' +
'' + basket.onSale +
' are on sale!'
);
//es6
//在es6中,內(nèi)容模板,可以定義在 `` 包起來的字符串中,其中的內(nèi)容會保持原有格式
//另外可以在字符串中直接使用模板語言進(jìn)行變量填充,優(yōu)雅而簡潔
$('#result').append(`
There are ${basket.count} items
in your basket, ${basket.onSale}
are on sale!
`);
字符串遍歷輸出
//for ...of 格式為 es6 中的 Iterator 迭代器的輸出方式for(let c of 'abc'){
console.log(c);
}//a//b//c
字符串補(bǔ)全
//參數(shù)1:[number] 目標(biāo)字符串長度
//參數(shù)2:[string] 進(jìn)行補(bǔ)全的字符串'12345'.padStart(7, '0')
//0012345 - 字符串不足7位,在頭部補(bǔ)充不足長度的目標(biāo)字符串'12345'.padEnd(7, '0')
//1234500 - 在尾部進(jìn)行字符串補(bǔ)全
數(shù)組擴(kuò)展 合并數(shù)組
let a = [1, 2];let b = [3];let c = [2, 4];let d = [...a, ...b, ...c];
//[1, 2, 3, 2, 4] 所有內(nèi)容合并,但并不會去除重復(fù)
快速轉(zhuǎn)換為數(shù)組
Array.of(3,4,5)
//[3,4,5]
數(shù)組內(nèi)容測試
//判斷對象是否為數(shù)組if(Array.isArray(obj)){...}
[1,2,3].includes(5);//false,檢索數(shù)據(jù)中是否有5
//找出第一個匹配表達(dá)式的結(jié)果,注意是只要匹配到一項,函數(shù)即會返回let a = [1, 3, -4, 10].find(function(value, index, arr){
return value < 0;
});console.log(a);//-4
//找出第一個匹配表達(dá)式的結(jié)果下標(biāo)let a = [1, 3, -4, 10].findIndex(function(value, index, arr){
return value < 0;
});console.log(a);
//2
內(nèi)容過濾
//排除負(fù)數(shù)內(nèi)容let a = [1, 3, -4, 10].filter(function(item){
return item > 0;
});console.log(a);
//[1, 3, 10]
內(nèi)容實例
keys() - 獲得數(shù)組中所有元素的鍵名(實際上就是下標(biāo)索引號)
values() - 獲得數(shù)組中所有元素的數(shù)據(jù)
entries() - 獲得數(shù)組中所有數(shù)據(jù)的鍵名和數(shù)據(jù)
for (let index of ['a', 'b'].keys()) {
console.log(index);
}
// 0
// 1
for (let elem of ['a', 'b'].values()) {
console.log(elem);
}
// 'a'
// 'b'
for (let [index, elem] of ['a', 'b'].entries()) {
console.log(index, elem);
}
// 0 "a"
// 1 "b"
.entries(), .keys(), .values() 功能與 Object 中的幾個同名函數(shù)功能類似,實際使用中實用性不高,對于數(shù)組的操作,直接進(jìn)行遍歷即可
對象擴(kuò)展 屬性的簡潔表示
//直接使用變量/常量的名稱個為對象屬性的名稱let a = 'abc';let b = {a};//{a: 'abc'}
function f(x, y){ return {x, y};}
//等效于function f(x, y){ return {x: x, y: y}}
let o = {
f(){ return 1; }
}
//等效于let o = {
f: function(){ return 1; }
}
判斷對象是否為數(shù)組
if(Object.isArray(someobj)){}
對象內(nèi)容合并
let a = {a:1,b:2}, b = {b:3}, c = {b:4,c:5};let d = Object.assign(a, b, c);
console.log(d);//{a:1,b:4,c:5}
console.log(a);//{a:1,b:4}
//上面的合并方式會同時更新 a 對象的內(nèi)容,a 的屬性如果有多次合并會被更新數(shù)據(jù),
//但自身沒有的屬性,其它對象有的屬性不會被添加到 a 身上;
//參數(shù)列中的對象只會影響第一個,后面的參數(shù)對象不會被修改數(shù)據(jù)
//推薦使用這種方式進(jìn)行對象數(shù)據(jù)合并let a = {a:1,b:2}, b = {b:3}, c = {b:4,c:5};let d = Object.assign({}, a, b, c);
//第一個參數(shù)增加一個空對象,在合并時讓它被更新,不影響實際的對象變量內(nèi)容
console.log(d);//{a:1,b:4,c:5}
//與上面的方式合并結(jié)果一致,使用這種方式, a 對象的內(nèi)容就不會被影響了
對象內(nèi)容合并的方向是從參數(shù)順序的后向前合并
對象內(nèi)容集合
Object.keys() - 獲得對象中所有的鍵名,以數(shù)組的形式返回
var obj = { a:1,b:2 };var names = Object.keys(obj);//['a', 'b']
Object.values() - 獲得對象中所有的值內(nèi)容,以數(shù)組的形式返回
var obj = { a:1,b:2 };var values = Object.values(obj);//[1, 2]
Object.entries() - 獲得對象中所有的成員數(shù)據(jù),以數(shù)組的形式返回,成員的內(nèi)容也是數(shù)組形式
var obj = { a:1,b:2 };var values = Object.entries(obj);//[['a',1], ['b',2]]
其實觀察可發(fā)現(xiàn),Object.keys(), Object.values(), Object.entries(),與 Java 的 MAP 中的方法是一致的,不論是方法名還是具體的用法,這也可以幫忙理解這些功能 API
解構(gòu)賦值
let [a, b, c] = [1, 2, 3];
//定義了三個變量,并對應(yīng)賦了值;如果值的個數(shù)與變量名個數(shù)不匹配,沒有對應(yīng)上的變量值為 undefined
let [a, b, c='default'] = [1, 2];
//指定默認(rèn)值,在定義變量時就指定了默認(rèn)值,如果賦值時,沒有給定內(nèi)容,則會取默認(rèn)值
let [a, …b] = [1,2,3];//這里 b 的值為[2,3],這樣可以快速使用剩余的數(shù)據(jù)賦值給變量,
//但實際使用中為了避免代碼閱讀的歧義,不推薦這么使用,僅作了解即可
let [a,b,c] = 'yes';console.log(a);
//yconsole.log(b);
//econsole.log(c);
//s
字符串的解構(gòu)賦值會以單個字符的方式進(jìn)行賦值
let {length}='yes';console.log(length);//3
以對象賦值的方式,如果名稱是字符串的自帶屬性,則會獲得屬性值
let arr = [1,2];let obj = {a:1,b:2};function test ({a = 10, b}){
console.log('a:',a);
console.log('b:',b);
}
test(obj);
解構(gòu)賦值的使用實例,作為函數(shù)傳參,并使用默認(rèn)值
對象結(jié)構(gòu)解構(gòu)
let obj = {a: 1, b: 2};let {a, b} = obj;//a=1,b=2
使用變量的方式進(jìn)行結(jié)構(gòu)賦值,需要嚴(yán)格匹配名稱,數(shù)組的模式是嚴(yán)格匹配下標(biāo)
let obj = {a: 1, b: 2};let {a=0, b=5} = obj;
賦值并給定默認(rèn)值
let obj = {a: 1, b: 2};let {a:A, b} = obj;//A=1,b=2,a報錯,變量未定義
獲得內(nèi)容后,將變量進(jìn)行改名
let obj = {a: 1, b: 2};let a = 0;
({a, b} = obj);
對已存在的 a 進(jìn)行修改值,并生成新的變量 b
let obj = {
arr: ['aaa',{a:1}]
};let {arr:[b, {a}]} = obj;//這里的arr互相映射
console.log(b);
console.log(a);
獲得對象的子數(shù)據(jù),并映射到相應(yīng)的變量,這里需要注意的是結(jié)構(gòu)要對應(yīng)
模塊化 最簡單實例的使用場景
//a.jslet a = {a:1,b:2,c:3};export default a;
//b.jsimport a from 'a.js';//假設(shè) a.js 與 b.js 同在一個目錄中console.log(a.a);//1
以上簡單的實例就兩個腳本文件舉例說明了兩個文件在實際使用,可以進(jìn)行互相引用,并獲得目標(biāo)文件中的數(shù)據(jù);我們可以認(rèn)為一個腳本文件就是一個 模塊,那么在實際開發(fā)過程中,可以將業(yè)務(wù)處理內(nèi)容,或是數(shù)據(jù)處理過程 抽象 在一個文件中,在需要使用時,由其它模塊引入并使用其中的數(shù)據(jù)
取消引用
您還未登錄,
請先登錄
提 問
熱門帖子
iDev 全平臺開發(fā)者大會門票免費送!限量10張!
蘋果Mac Pro垃圾桶 最低配的ME253CH
本人想買個蘋果電腦搞開發(fā),哪位大俠指點下
求助:failable initializer 'init(name:)' cannot override a non-failable initializer
為慶祝Swift發(fā)布1個月,雨燕社區(qū)正式上線。
在UITextFeild里輸入數(shù)據(jù),這個數(shù)據(jù)怎么做加減乘除?
Swift 高仿喜馬拉雅FM
要成為自由職業(yè)者?先要學(xué)會蘋果的Swift哦
用swift實現(xiàn)的調(diào)用系統(tǒng)相機(jī),相冊的DEMO
關(guān)于嵌入式引用\()
Swift 教程
最新帖子
swift_5.3可以更新了
swift如何實現(xiàn)左滑刪除
IBM Swift Sandbox訪問
Thread 18: Fatal error: 'try!' expression unexpectedly raised an error: Error
跟隨手勢滑動的ScrollableTextField
Swift5.0什么時候出
什么時候出5.0
PerfectTemplate 無法編譯
WWDC19 蘋果宣布全新 UI 框架 SwiftUI
水平滾動視圖Carousel
Xcode 9.4下載
?
Copyright © 2017 Swift 編程 版權(quán)所有
推動 Swift 成為最受歡迎的編程語言!
友鏈、商務(wù)合作:service??swift51.com
手機(jī)版