版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第你需要了解的ES6語法大總結(jié)目錄前言let介紹不允許重復(fù)聲明塊級(jí)作用域?yàn)槭裁葱枰獕K級(jí)作用域?es6的塊級(jí)作用域暫時(shí)性死區(qū)變量提升變量不會(huì)掛載到windowconst總結(jié)對(duì)于var的使用:對(duì)于let和const:解構(gòu)賦值對(duì)象的解構(gòu)數(shù)組的解構(gòu)函數(shù)參數(shù)解構(gòu)對(duì)象字面量增強(qiáng)寫法和計(jì)算屬性名展開語法(...)示例模板字符串對(duì)象擴(kuò)展object.is()Object.assign()對(duì)象的遍歷方式(擴(kuò)展)function擴(kuò)展函數(shù)默認(rèn)值rest參數(shù)箭頭函數(shù)函數(shù)的length屬性數(shù)組的擴(kuò)展Array.fromfor...ofAtotype.find()Atotype.findIndex()Atotype.fill()Atotype.copyWithin()Array.of()Number擴(kuò)展Number.isFinite()Number.isNaN()Number.isInteger()Number.MAX_SAFE_INTEGERNumber.MIN_SAFE_INTEGERNumber.isSafeInteger()Number.parseInt(),Number.parseFloat()String擴(kuò)展Stotype.includes()Stotype.startsWith()Stotype.endsWith()Stotype.repeat()SymbolSymbol.for()Symbol.keyFor()Set添加數(shù)據(jù)刪除數(shù)據(jù)查找和總數(shù)應(yīng)用場(chǎng)景數(shù)組去重合并去重交集差集WeakSetMap添加數(shù)據(jù)刪除數(shù)據(jù)查找和統(tǒng)計(jì)獲取weakMap最后推薦文章
前言
ES6已結(jié)出來6年多了,相信大家的ES6常用語法都用的爐火純青了,自己打算把ES6的語法全部總結(jié)一遍,也方便自己更加的靈活使用和鞏固知識(shí)。希望能對(duì)你有幫助!
let
介紹
let語句聲明一個(gè)塊級(jí)作用域的本地變量,并且可選的將其初始化為一個(gè)值。新的變量的聲明方式。
它具有如下的特性
不允許重復(fù)聲明
var可以多次重復(fù)聲明(最后一次聲明會(huì)覆蓋前面的聲明),而let不能(會(huì)報(bào)錯(cuò)),可以避免重復(fù)命名
vara=1;
vara=2;
console.log(a);//2
leta=1;
leta=2;
console.log(a);//UncaughtSyntaxError:Identifier'a'hasalreadybeendeclared
這個(gè)特性有一大好處就是避免多人開發(fā)時(shí),自己或者別人命名了相同名稱的變量,把以前的變量給覆蓋掉了。
塊級(jí)作用域
為什么需要塊級(jí)作用域?
ES5時(shí)只有全局作用域和函數(shù)作用域,沒有塊級(jí)作用域,這帶來很多不合理的場(chǎng)景。
第一種場(chǎng)景,內(nèi)層變量可能會(huì)覆蓋外層變量。
vartmp=newDate();
functionf(){
console.log(tmp);
if(false){
vartmp='helloworld';//這里會(huì)有變量提升
f();//undefined
if代碼塊的外部使用外層的tmp變量,內(nèi)部使用內(nèi)層的tmp變量。但是,函數(shù)f執(zhí)行后,輸出結(jié)果為undefined,原因在于變量提升,導(dǎo)致內(nèi)層的tmp變量覆蓋了外層的tmp變量。
第二種場(chǎng)景,用來計(jì)數(shù)的循環(huán)變量泄露為全局變量。
vars='hello';
for(vari=0;is.length;i++){
console.log(s[i]);
//for循環(huán)外面打印
console.log(i);//5
上面代碼中,變量i只用來控制循環(huán),但是循環(huán)結(jié)束后,它并沒有消失,泄露成了全局變量。
es6的塊級(jí)作用域
{
leta=10;
varb=1;
console.log(b);//1
console.log(a);//UncaughtReferenceError:aisnotdefined
let實(shí)際上為JavaScript新增了塊級(jí)作用域,let聲明的變量只在它所在的代碼塊有效,外層拿不到let聲明的變量。上面代碼中{}就是塊級(jí)作用域
ES6允許塊級(jí)作用域的任意嵌套。
{{{{
{letinsane='HelloWorld'}
console.log(insane);//報(bào)錯(cuò)
}}}};
上面代碼使用了一個(gè)五層的塊級(jí)作用域,每一層都是一個(gè)單獨(dú)的作用域。第四層作用域無法讀取第五層作用域的內(nèi)部變量。
內(nèi)層作用域可以定義外層作用域的同名變量。
{{{{
letinsane='HelloWorld';
{letinsane='HelloWorld'}
}}}};
for循環(huán)的計(jì)數(shù)器,就很合適使用let命令。
for(leti=0;ii++){
//...
console.log(i);//ReferenceError:iisnotdefined
上面代碼中,計(jì)數(shù)器i只在for循環(huán)體內(nèi)有效,在循環(huán)體外引用就會(huì)報(bào)錯(cuò)。
改成var聲明的話
for(vari=0;ii++){
console.log(i);//輸出012
console.log(i);//只會(huì)輸出3
如果想要更加深入的研究for循環(huán)作用域的問題,請(qǐng)參考這篇文章
暫時(shí)性死區(qū)
vara=1
a=6
leta//UncaughtReferenceError:Cannotaccess'a'beforeinitialization
}
在代碼塊內(nèi),使用let命令聲明變量之前,該變量都是不可用的。這在語法上,稱為暫時(shí)性死區(qū)ES6規(guī)定暫時(shí)性死區(qū),主要是為了減少運(yùn)行時(shí)錯(cuò)誤,防止在變量聲明前就使用這個(gè)變量,從而導(dǎo)致意料之外的行為。這樣的錯(cuò)誤在ES5是很常見的,現(xiàn)在有了這種規(guī)定,避免此類錯(cuò)誤就很容易了。
變量提升
關(guān)于是否有變量提升,目前來看并不統(tǒng)一。阮一峰的ECMAScript6入門中的let和const章節(jié)中明確說明不存在變量提升。但自己的理解還是存在變量提升的。下面舉例說明一下:
vara=1;
(function(){
console.log(a);//1
})();
我們簡單改造一下
vara=1;
(function(){
console.log(a);//UncaughtReferenceError:Cannotaccess'a'beforeinitialization
leta=2
})();
從這里其實(shí)可以看出let也是存在變量提升的,只是在變量賦值之前不能對(duì)變量進(jìn)行讀寫,否則就會(huì)報(bào)錯(cuò),這也就是暫時(shí)性死區(qū)。
變量不會(huì)掛載到window
在本人看來,var聲明的變量掛載到window是一種很不好的設(shè)計(jì),這很容易會(huì)導(dǎo)致變量被污染,以及全局變量被濫用。所以,新的聲明方式已經(jīng)不將聲明的變量再掛載到window上面了。
//var聲明的變量會(huì)掛載到window上
vara=1;
window.a//1
//let聲明的變量不會(huì)掛載到window
letb=1;
window.b//undefined
頂層對(duì)象的屬性與全局變量掛鉤,被認(rèn)為是JavaScript語言最大的設(shè)計(jì)敗筆之一。這樣的設(shè)計(jì)帶來了幾個(gè)很大的問題,首先是沒法在編譯時(shí)就報(bào)出變量未聲明的錯(cuò)誤,只有運(yùn)行時(shí)才能知道(因?yàn)槿肿兞靠赡苁琼攲訉?duì)象的屬性創(chuàng)造的,而屬性的創(chuàng)造是動(dòng)態(tài)的);其次,程序員很容易不知不覺地就創(chuàng)建了全局變量(比如打字出錯(cuò));最后,頂層對(duì)象的屬性是到處可以讀寫的,這非常不利于模塊化編程。另一方面,window對(duì)象有實(shí)體含義,指的是瀏覽器的窗口對(duì)象,頂層對(duì)象是一個(gè)有實(shí)體含義的對(duì)象,也是不合適的。
從ES6開始,全局變量將逐步與頂層對(duì)象的屬性脫鉤。
const
const聲明一個(gè)只讀的常量。一旦聲明,常量的值就不能改變。其他特性和let一樣。
consta=1;
a=3;//TypeError:Assignmenttoconstantvariable.
const聲明的變量不得改變值,這意味著,const一旦聲明變量,就必須立即初始化,不能留到以后賦值。
consta;
//SyntaxError:Missinginitializerinconstdeclaration
const實(shí)際上保證的,并不是變量的值不得改動(dòng),而是變量指向的那個(gè)內(nèi)存地址所保存的數(shù)據(jù)不得改動(dòng)。對(duì)于簡單類型的數(shù)據(jù)(數(shù)值、字符串、布爾值),值就保存在變量指向的那個(gè)內(nèi)存地址,因此等同于常量。但對(duì)于復(fù)合類型的數(shù)據(jù)(主要是對(duì)象和數(shù)組),變量指向的內(nèi)存地址,保存的只是一個(gè)指向?qū)嶋H數(shù)據(jù)的指針,const只能保證這個(gè)指針是固定的(即總是指向另一個(gè)固定的地址),至于它指向的數(shù)據(jù)結(jié)構(gòu)是不是可變的,就完全不能控制了。因此,將一個(gè)對(duì)象聲明為常量必須非常小心。
consta={};
//為a添加一個(gè)屬性,可以成功
p=123;
//將a指向另一個(gè)對(duì)象,就會(huì)報(bào)錯(cuò)
a={};//TypeError:"a"isread-only
總結(jié)
對(duì)于var的使用:
我們需要明白一個(gè)事實(shí),var所表現(xiàn)出來的特殊性:比如作用域提升、window全局對(duì)象、沒有塊級(jí)作用域等都是一些歷史遺留問題;是JavaScript在設(shè)計(jì)之初的一種語言缺陷
當(dāng)然目前也在利用這種缺陷出一系列的面試題,來考察大家對(duì)JavaScript語言本身以及底層的理解
但是在實(shí)際工作中,我們可以使用最新的規(guī)范來編寫,也就是不再使用var來定義變量了
對(duì)于let和const:
對(duì)于let和const來說,是目前開發(fā)中推薦使用的
我們推薦使用const,這樣可以保證數(shù)據(jù)的安全性不會(huì)被隨意的篡改
只有當(dāng)我們明確知道一個(gè)變量后續(xù)會(huì)需要被重新賦值時(shí),這個(gè)時(shí)候再使用let
反正就一句話,以后不要再用var啦!
解構(gòu)賦值
ES6允許按照一定模式,從數(shù)組和對(duì)象中提取值,對(duì)變量進(jìn)行賦值,這被稱為解構(gòu)
對(duì)象的解構(gòu)
以前的取值方式
constobj={a:1,b:2,c:3}
consta=obj.a;
constb=obj.b;
constc=obj.c;
現(xiàn)在的取值方式
constobj={a:1,b:2,c:3}
const{a,b,c}=obj;
修改解構(gòu)出來的名稱
constobj={a:1,b:2,c:3}
const{a:a1,b:b1,c}=obj;
console.log(a1)//1
console.log(b1)//2
console.log(c)//3
給默認(rèn)值
constobj={a:1,b:2,c:3}
const{d=5}=obj;
const{e:e1=6}=obj;
console.log(d)//5
console.log(e1)//6
深層對(duì)象的解構(gòu)
constmetadata={
title:"english-title",
translations:[
title:"我是深處的title",
friend:{
girlFriend:{
name:{
firstName:"chimmy",
let{
title:englishTitle,//rename
translations:[
title:localeTitle,//rename
friend:{
girlFriend:{
name:{firstName},
}=metadata;
console.log(englishTitle);//"english-title"
console.log(localeTitle);//"我是深處的title"
console.log(firstName);//"chimmy"
數(shù)組的解構(gòu)
//以前獲取數(shù)組里面值得方式
varnames=["abc","cba","nba"]
//varitem1=names[0]
//varitem2=names[1]
//varitem3=names[2]
//對(duì)數(shù)組的解構(gòu):[]
let[item1,item2,item3]=names
console.log(item1,item2,item3)//abccbanba
//解構(gòu)后面的元素
let[,,itemz]=names
console.log(itemz)//nba
//解構(gòu)出一個(gè)元素,后面的元素放到一個(gè)新數(shù)組中
let[itemx,...newNames]=names
console.log(itemx,newNames)//abc['cba','nba']
//解構(gòu)的默認(rèn)值
let[itema,itemb,itemc,itemd="aaa"]=names
console.log(itemd)//aaa
//通過解構(gòu)交換變量
leta=1;
letb=3;
[a,b]=[b,a];
console.log(a);//3
console.log(b);//1
函數(shù)參數(shù)解構(gòu)
函數(shù)的參數(shù)也可以使用解構(gòu)賦值。
functionadd([x,y]){
returnx+y;
add([1,2]);//3
函數(shù)參數(shù)的解構(gòu)也可以使用默認(rèn)值。
functionmove({x=0,y=0}={}){
return[x,y];
move({x:3,y:8});//[3,8]
move({x:3});//[3,0]
move({});//[0,0]
move();//[0,0]
對(duì)象字面量增強(qiáng)寫法和計(jì)算屬性名
letname="jimmy"
letage=18
//屬性的簡寫
letobj={
name,
//等同于
letobj={
name:name,
age:age
//方法的簡寫
letobj2={
bar(){
console.log(this)
//等同于
letobj2={
bar:function(){
console.log(this)
//計(jì)算屬性名(對(duì)象的鍵可以是變量)
letobj3={}
obj3[name]="chimmy";
console.log(obj3.jimmy);//chimmy
展開語法(...)
展開語法(Spreadsyntax),可以在函數(shù)調(diào)用/數(shù)組構(gòu)造時(shí),將數(shù)組表達(dá)式或者string在語法層面展開;還可以在構(gòu)造字面量對(duì)象時(shí),將對(duì)象表達(dá)式按key-value的方式展開。(字面量一般指[1,2,3]或者{name:mdn}這種簡潔的構(gòu)造方式)
示例
constnames=["abc","cba","nba"]
constinfo={name:"why",age:18}
//1.函數(shù)調(diào)用時(shí)
functionfoo(x,y,z){
console.log(x,y,z)//abccbanba
foo(...names)
//2.構(gòu)造數(shù)組時(shí)
constnewNames=[...names]
console.log(newNames)//['abc','cba','nba']
console.log(...[1,2,3])//123
//3.構(gòu)建對(duì)象字面量時(shí)ES2025(ES9)
constobj={...info,address:"成都市",...names}
console.log(obj)//{0:'abc',1:'cba',2:'nba',name:'why',age:18,address:'成都市'}
復(fù)制數(shù)組(淺拷貝)
數(shù)組是復(fù)合的數(shù)據(jù)類型,直接復(fù)制的話,只是復(fù)制了指向底層數(shù)據(jù)結(jié)構(gòu)的指針,而不是克隆一個(gè)全新的數(shù)組。
consta1=[1,2];
consta2=a1;
a2[0]=2;
console.log(a1)//[2,2]
consta1=[1,2];
consta2=[...a1];
a2[0]=2;
console.log(a1)//[1,2]
合并數(shù)組
constarr1=['a','b'];
constarr2=['c'];
constarr3=['d','e'];
//ES5的合并數(shù)組
arr1.concat(arr2,arr3);
//['a','b','c','d','e']
//ES6的合并數(shù)組
[...arr1,...arr2,...arr3]
//['a','b','c','d','e']
模板字符串
ES6之前拼接字符串和其他標(biāo)識(shí)符
constname="jimmy";
constage=18;
constheight=1.88;
console.log("mynameis"+name+",ageis"+age+",heightis"+height)
ES6提供的模板字符串
constage=18;
constheight=1.88;
//支持變量
constmessage=`mynameis${name},ageis${age},heightis${height}`;
console.log(message);//mynameis,ageis18,heightis1.88
//支持表達(dá)式
constinfo=`agedoubleis${age*2}`;
console.log(info);//agedoubleis36
//支持函數(shù)調(diào)用
functiondoubleAge(){
returnage*2;
constinfo2=`doubleageis${doubleAge()}`;
console.log(info2);//doubleageis36
對(duì)象擴(kuò)展
object.is()
語法
Object.is(value1,value2);
被比較的第一個(gè)值。value1
被比較的第二個(gè)值。value2
介紹
ES5比較兩個(gè)值是否相等,只有兩個(gè)運(yùn)算符:相等運(yùn)算符(==)和嚴(yán)格相等運(yùn)算符(===)。它們都有缺點(diǎn),前者會(huì)自動(dòng)轉(zhuǎn)換數(shù)據(jù)類型,后者的NaN不等于自身,以及+0等于-0。JavaScript缺乏一種運(yùn)算,在所有環(huán)境中,只要兩個(gè)值是一樣的,它們就應(yīng)該相等。
ES6提出Same-valueequality(同值相等)算法,用來解決這個(gè)問題。Object.is就是部署這個(gè)算法的新方法。它用來比較兩個(gè)值是否嚴(yán)格相等,與嚴(yán)格比較運(yùn)算符(===)的行為基本一致。
Object.is('foo','foo')
//true
Object.is({},{})
//false
不同之處只有兩個(gè):一是+0不等于-0,二是NaN等于自身。
console.log(NaN===NaN);//false
console.log(0===-0);//true
Object.is(NaN,NaN)//true
Object.is(+0,-0)//false
Object.assign()
Object.assign()方法用于將所有可枚舉屬性的值從一個(gè)或多個(gè)源對(duì)象分配到目標(biāo)對(duì)象。它將返回目標(biāo)對(duì)象。
//目標(biāo)對(duì)象與源對(duì)象有同名屬性,或多個(gè)源對(duì)象有同名屬性,則后面的屬性會(huì)覆蓋前面的屬性。
consttarget={a:1,b:2};
constsource={b:4,c:5};
constreturnedTarget=Object.assign(target,source);
console.log(target);//{a:1,b:4,c:5}注意目標(biāo)對(duì)象自身也會(huì)改變
console.log(returnedTarget);{a:1,b:4,c:5}
//Object.assign()的返回值其實(shí)就是目標(biāo)對(duì)象
target===returnedTarget//true
語法
Object.assign(target,...sources)
target目標(biāo)對(duì)象。sources源對(duì)象。個(gè)數(shù)沒有限制
返回值為目標(biāo)對(duì)象
如果只有一個(gè)參數(shù),Object.assign()會(huì)直接返回該參數(shù)。
constobj={a:1};
Object.assign(obj)===obj//true
如果該參數(shù)不是對(duì)象,則會(huì)先轉(zhuǎn)成對(duì)象,然后返回。
typeofObject.assign(2)//"object"
由于undefined和null無法轉(zhuǎn)成對(duì)象,所以如果它們作為參數(shù),就會(huì)報(bào)錯(cuò)。
Object.assign(undefined)//報(bào)錯(cuò)
Object.assign(null)//報(bào)錯(cuò)
//如果`undefined`和`null`不在首參數(shù),就不會(huì)報(bào)錯(cuò)。
letobj={a:1};
Object.assign(obj,undefined)===obj//true
Object.assign(obj,null)===obj//true
常見用途
(1)為對(duì)象添加屬性
classPoint{
constructor(x,y){
Object.assign(this,{x,y});
}
上面方法通過Object.assign()方法,將x屬性和y屬性添加到Point類的對(duì)象實(shí)例。
(2)為對(duì)象添加方法
Object.assign(SomeCtotype,{
someMethod(arg1,arg2){
anotherMethod(){
//等同于下面的寫法
SomeCtotype.someMethod=function(arg1,arg2){
SomeCtotype.anotherMethod=function(){
};
上面代碼使用了對(duì)象屬性的簡潔表示法,直接將兩個(gè)函數(shù)放在大括號(hào)中,再使用assign()方法添加到SomeCtotype之中。
(3)克隆對(duì)象
functionclone(origin){
returnObject.assign({},origin);
}
注意,這種方式是淺拷貝。詳細(xì)理解請(qǐng)參考js深拷貝和淺拷貝知多少
(4)合并多個(gè)對(duì)象
將多個(gè)對(duì)象合并到某個(gè)對(duì)象。
constmerge=(target,...sources)=Object.assign(target,...sources);
如果希望合并后返回一個(gè)新對(duì)象,可以改寫上面函數(shù),對(duì)一個(gè)空對(duì)象合并。
constmerge=(...sources)=Object.assign({},...sources);
(5)為屬性指定默認(rèn)值
constDEFAULTS={
logLevel:0,
outputFormat:'html'
functionprocessContent(options){
options=Object.assign({},DEFAULTS,options);
console.log(options);
//...
}
上面代碼中,DEFAULTS對(duì)象是默認(rèn)值,options對(duì)象是用戶提供的參數(shù)。Object.assign()方法將DEFAULTS和options合并成一個(gè)新對(duì)象,如果兩者有同名屬性,則options的屬性值會(huì)覆蓋DEFAULTS的屬性值。
對(duì)象的遍歷方式(擴(kuò)展)
如何能夠遍歷出對(duì)象中每個(gè)key和value的值呢?
letobj={
name:"jimmy",
age:18,
like:"girl",
};
主要有以下方式
//for...in的作用是用于遍歷對(duì)象的。
for(letkeyinobj){
console.log(key,obj[key]);
//Object.keys()用于返回對(duì)象所有key組成的數(shù)組。
Object.keys(obj).forEach((key)={
console.log(key,obj[key]);
//Object.getOwnPropertyNames()用于返回對(duì)象所有key組成的數(shù)組。
Object.getOwnPropertyNames(obj).forEach((key)={
console.log(key,obj[key]);
//Reflect.ownKeys()用于返回對(duì)象所有key組成的數(shù)組。
Reflect.ownKeys(obj).forEach((key)={
console.log(key,obj[key]);
//打印的都是
//namejimmy
//age18
//likegirl
function擴(kuò)展
函數(shù)默認(rèn)值
ES6之前,不能直接為函數(shù)的參數(shù)指定默認(rèn)值,只能采用變通的方法。
functionlog(x,y){
if(typeofy==='undefined'||typeofy==='null'){
y='World';
console.log(x,y);
log('Hello')//HelloWorld
log('Hello','China')//HelloChina
log('Hello','')//HelloWorld
當(dāng)一個(gè)函數(shù)有很多參數(shù)涉及初始化的時(shí)候,這樣寫代碼極其丑陋。ES6允許為函數(shù)的參數(shù)設(shè)置默認(rèn)值,即直接寫在參數(shù)定義的后面。
functionlog(x,y='World'){
console.log(x,y);
log('Hello')//HelloWorld
log('Hello','China')//HelloChina
log('Hello','')//Hello
ES6的寫法還有兩個(gè)好處:首先,閱讀代碼的人,可以立刻意識(shí)到哪些參數(shù)是可以省略的,不用查看函數(shù)體或文檔;其次,有利于將來的代碼優(yōu)化,即使未來的版本在對(duì)外接口中,徹底拿掉這個(gè)參數(shù),也不會(huì)導(dǎo)致以前的代碼無法運(yùn)行。
rest參數(shù)
ES6引入rest參數(shù)(形式為...變量名),用于獲取函數(shù)的多余參數(shù),這樣就不需要使用arguments對(duì)象了。rest參數(shù)搭配的變量是一個(gè)數(shù)組,該變量將多余的參數(shù)放入數(shù)組中。
functionadd(...values){
letsum=0;
for(varvalofvalues){
sum+=val;
returnsum;
add(2,5,3)//10
上面代碼的add函數(shù)是一個(gè)求和函數(shù),利用rest參數(shù),可以向該函數(shù)傳入任意數(shù)目的參數(shù)。
下面是一個(gè)rest參數(shù)代替arguments變量的例子。
//arguments變量的寫法
functionsortNumbers(){
returnArray.from(arguments).sort();
//rest參數(shù)的寫法
constsortNumbers=(...numbers)=numbers.sort();
上面代碼的兩種寫法,比較后可以發(fā)現(xiàn),rest參數(shù)的寫法更自然也更簡潔。
注意,rest參數(shù)之后不能再有其他參數(shù)(即只能是最后一個(gè)參數(shù)),否則會(huì)報(bào)錯(cuò)。
//報(bào)錯(cuò)
functionf(a,...b,c){
//...
}
箭頭函數(shù)
箭頭函數(shù)可以說是ES6很大的福利了,不管你是函數(shù)式愛好者還是面向?qū)ο箝_發(fā)者,函數(shù)是必須要用到的東西。之前聲明函數(shù)需要使用function,如下:
functionhello(){
console.log('sayhello')
lethello=function(){
console.log('sayhello')
}
現(xiàn)在可以這樣做了:
lethello=()={
console.log('sayhello')
}
如果帶參數(shù)該怎么做呢?
lethello=(name)={
console.log('sayhello',name)
//或者
lethello=name={
console.log('sayhello',name)
//如果只有一個(gè)參數(shù),可以省略括號(hào),如果大于一個(gè)參數(shù)一定要記得帶括號(hào)
函數(shù)的聲明和參數(shù)寫的很清楚了,那么對(duì)于返回值有什么要注意的地方呢?
如果返回值是表達(dá)式可以省略return和{}
letpow=x=x*x
如果返回值是字面量對(duì)象
letperson=(name)=({
age:20,
addr:'BeijingCity'
})
箭頭函數(shù)注意點(diǎn)
箭頭函數(shù)中沒有this,內(nèi)部的this就是定義時(shí)上層作用域中的this。也就是說,箭頭函數(shù)內(nèi)部的this指向是固定的
不可以當(dāng)作構(gòu)造函數(shù),也就是說,不可以對(duì)箭頭函數(shù)使用new命令,否則會(huì)拋出一個(gè)錯(cuò)誤。
箭頭函數(shù)不可以使用arguments對(duì)象,該對(duì)象在函數(shù)體內(nèi)不存在。如果要用,可以用rest參數(shù)代替。
不可以使用yield命令,因此箭頭函數(shù)不能用作Generator函數(shù)。
函數(shù)的length屬性
在函數(shù)體內(nèi),有時(shí)候需要判斷函數(shù)有幾個(gè)參數(shù),一共有2個(gè)辦法。在ES5中可以在函數(shù)體內(nèi)使用arguments來判斷。
functionfoo(a,b=1,c){
console.log(arguments.length)
foo('a','b')//2
然而在ES6中不能再使用arguments來判斷了,但可以借助Function.length來判斷。
functionfoo(a,b=1,c){
console.log(foo.length)
foo('a','b')//1
細(xì)心的同學(xué)發(fā)現(xiàn)Function.length結(jié)果和arguments的結(jié)果不同!沒錯(cuò),F(xiàn)unction.length是統(tǒng)計(jì)第一個(gè)默認(rèn)參數(shù)前面的變量數(shù):
函數(shù)指定了默認(rèn)值以后,函數(shù)的length屬性,將返回沒有指定默認(rèn)值的參數(shù)個(gè)數(shù)。
數(shù)組的擴(kuò)展
Array.from
介紹
Array.from方法用于將兩類對(duì)象轉(zhuǎn)為真正的數(shù)組:類似數(shù)組的對(duì)象(array-likeobject)和可遍歷(iterable)的對(duì)象(包括ES6新增的數(shù)據(jù)結(jié)構(gòu)Set和Map)。
語法
Array.from(arrayLike[,mapFn[,thisArg]])
arrayLike想要轉(zhuǎn)換成數(shù)組的偽數(shù)組對(duì)象或可迭代對(duì)象。mapFn可選如果指定了該參數(shù),新數(shù)組中的每個(gè)元素會(huì)執(zhí)行該回調(diào)函數(shù)。thisArg可選執(zhí)行回調(diào)函數(shù)mapFn時(shí)this對(duì)象
下面是一個(gè)類似數(shù)組的對(duì)象,Array.from將它轉(zhuǎn)為真正的數(shù)組。
letarrayLike={
'0':'a',
'1':'b',
'2':'c',
length:3
//ES5的寫法
vararr1=[].slice.call(arrayLike);//['a','b','c']
//ES6的寫法
letarr2=Array.from(arrayLike);//['a','b','c']
實(shí)際應(yīng)用中,常見的類似數(shù)組的對(duì)象是DOM操作返回的NodeList集合,以及函數(shù)內(nèi)部的arguments對(duì)象。Array.from都可以將它們轉(zhuǎn)為真正的數(shù)組。
//NodeList對(duì)象
letps=document.querySelectorAll('p');
Array.from(ps).filter(p={
returnp.textContent.length100;
//arguments對(duì)象
functionfoo(){
varargs=Array.from(arguments);
//...
//Set
constset=newSet(['foo','bar','baz','foo']);
Array.from(set);//["foo","bar","baz"]
//Map
constmap=newMap([[1,2],[2,4],[4,8]]);
Array.from(map);//[[1,2],[2,4],[4,8]]
如果參數(shù)是一個(gè)真正的數(shù)組,Array.from會(huì)返回一個(gè)一模一樣的新數(shù)組。
Array.from([1,2,3])//[1,2,3]
Array.from可以接受第二個(gè)參數(shù),作用類似于數(shù)組的map方法,用來對(duì)每個(gè)元素進(jìn)行處理,將處理后的值放入返回的數(shù)組。
Array.from(arrayLike,x=x*x);
//等同于
Array.from(arrayLike).map(x=x*x);
Array.from([1,2,3],(x)=x*x)
//[1,4,9]
for...of
ES6中新增的數(shù)組遍歷方式
for(letvalof[1,2,3]){
console.log(val);//1,2,3
}
Atotype.find()
介紹
find()方法返回?cái)?shù)組中滿足提供的測(cè)試函數(shù)的第一個(gè)元素的值,否則返回undefined。
constarray1=[5,12,8,130,44];
constfound=array1.find(element=element10);
console.log(found);//12
語法
arr.find(callback[,thisArg])
callback在數(shù)組每一項(xiàng)上執(zhí)行的函數(shù),接收3個(gè)參數(shù):
element當(dāng)前遍歷到的元素。
index可選當(dāng)前遍歷到的索引
array數(shù)組本身
thisArg執(zhí)行回調(diào)時(shí)用作this的對(duì)象。
Atotype.findIndex()
findIndex()方法返回?cái)?shù)組中滿足提供的測(cè)試函數(shù)的第一個(gè)元素的索引。否則返回-1。其實(shí)這個(gè)和find()是成對(duì)的,不同的是它返回的是索引而不是值。
letarray=[5,12,8,130,44];
letfound=array.find(function(element){
returnelement
console.log(found);//1
Atotype.fill()
介紹
fill()方法用一個(gè)固定值填充一個(gè)數(shù)組中從起始索引到終止索引內(nèi)的全部元素。不包括終止索引。
語法
arr.fill(value[,start[,end]])
value用來填充數(shù)組元素的值start可選起始索引默認(rèn)值為0end可選終止索引默認(rèn)值為this.length返回值修改后的數(shù)組
如果start是個(gè)負(fù)數(shù),則開始索引會(huì)被自動(dòng)計(jì)算成為length+start,其中l(wèi)ength是this對(duì)象的length屬性值。如果end是個(gè)負(fù)數(shù),則結(jié)束索引會(huì)被自動(dòng)計(jì)算成為length+end。
constarray1=[1,2,3,4];
console.log(array1.fill(0,2,4));//[1,2,0,0]
console.log(array1.fill(5,1));//[1,5,5,5]
//只有一個(gè)參數(shù),說明其他兩項(xiàng)都是默認(rèn)值,會(huì)替換數(shù)組全部內(nèi)容
console.log(array1.fill(6));//[6,6,6,6]
Atotype.copyWithin()
數(shù)組實(shí)例的copyWithin()方法,在當(dāng)前數(shù)組內(nèi)部,將指定位置的成員復(fù)制到其他位置(會(huì)覆蓋原有成員),然后返回當(dāng)前數(shù)組。也就是說,使用這個(gè)方法,會(huì)修改當(dāng)前數(shù)組。
Atotype.copyWithin(target,start=0,end=this.length)
它接受三個(gè)參數(shù)。
target(必需):從該位置開始替換數(shù)據(jù)。如果為負(fù)值,表示倒數(shù)。start(可選):從該位置開始讀取數(shù)據(jù),默認(rèn)為0。如果為負(fù)值,表示從末尾開始計(jì)算。end(可選):到該位置前停止讀取數(shù)據(jù),默認(rèn)等于數(shù)組長度。如果為負(fù)值,表示從末尾開始計(jì)算。
//將3號(hào)位復(fù)制到0號(hào)位
[1,2,3,4,5].copyWithin(0,3,4)
//[4,2,3,4,5]
//-2相當(dāng)于3號(hào)位,-1相當(dāng)于4號(hào)位
[1,2,3,4,5].copyWithin(0,-2,-1)//[4,2,3,4,5]
//參數(shù)不足三個(gè),沒有的參數(shù)就是默認(rèn)值
[1,2,3,4,5].copyWithin(-2)//[1,2,3,1,2]
[1,2,3,4,5].copyWithin(0,3)//[4,5,3,4,5]
Array.of()
Array.of()方法用于將一組值,轉(zhuǎn)換為數(shù)組。
Array.of(3,11,8)//[3,11,8]
Array.of(3)//[3]
Array.of(3).length//1
這個(gè)方法的主要目的,是彌補(bǔ)數(shù)組構(gòu)造函數(shù)Array()的不足。因?yàn)閰?shù)個(gè)數(shù)的不同,會(huì)導(dǎo)致Array()的行為有差異。
Array()//[]
Array(3)//[,,,]
Array(3,11,8)//[3,11,8]
面代碼中,Array()方法沒有參數(shù)、一個(gè)參數(shù)、三個(gè)參數(shù)時(shí),返回的結(jié)果都不一樣。只有當(dāng)參數(shù)個(gè)數(shù)不少于2個(gè)時(shí),Array()才會(huì)返回由參數(shù)組成的新數(shù)組。參數(shù)只有一個(gè)正整數(shù)時(shí),實(shí)際上是指定數(shù)組的長度。
Array.of()基本上可以用來替代Array()或newArray(),并且不存在由于參數(shù)不同而導(dǎo)致的重載。它的行為非常統(tǒng)一。
Array.of()//[]`Array.of()`總是返回參數(shù)值組成的數(shù)組。如果沒有參數(shù),就返回一個(gè)空數(shù)組。
Array.of(undefined)//[undefined]
Array.of(1)//[1]
Array.of(1,2)//[1,2]
Number擴(kuò)展
Number.isFinite()
用來檢查一個(gè)數(shù)值是否為有限的(finite),即不是Infinity。
Number.isFinite(15)//true
Number.isFinite(0.8)//true
Number.isFinite(NaN)//false
Number.isFinite(Infinity)//false
Number.isFinite(-Infinity)//false
Number.isFinite('foo')//false
Number.isFinite('15')//false
Number.isFinite(true)//false
注意,如果參數(shù)類型不是數(shù)值,Number.isFinite一律返回false。
Number.isNaN()
用來檢查一個(gè)值是否為NaN。
Number.isNaN(NaN)//true
Number.isNaN(15)//false
Number.isNaN('15')//false
Number.isNaN(true)//false
Number.isNaN(9/NaN)//true
Number.isNaN('true'/0)//true
Number.isNaN('true'/'true')//true
如果參數(shù)類型不是NaN,Number.isNaN一律返回false。
Number.isInteger()
用來判斷一個(gè)數(shù)值是否為整數(shù)。
Number.isInteger(25)//true
Number.isInteger(25.1)//false
Number.isInteger()//false
Number.isInteger(null)//false
Number.isInteger('15')//false
Number.isInteger(true)//false
Number.MAX_SAFE_INTEGERNumber.MIN_SAFE_INTEGER
JavaScript能夠準(zhǔn)確表示的整數(shù)范圍在-2^53到2^53之間(不含兩個(gè)端點(diǎn)),超過這個(gè)范圍,無法精確表示這個(gè)值。
Math.pow(2,53)//9007199254740992
9007199254740992//9007199254740992
9007199254740993//9007199254740992
Math.pow(2,53)===Math.pow(2,53)+1//true
上面代碼中,超出2的53次方之后,一個(gè)數(shù)就不精確了。
ES6引入了Number.MAX_SAFE_INTEGER和Number.MIN_SAFE_INTEGER這兩個(gè)常量,用來表示這個(gè)范圍的上下限。
Number.MAX_SAFE_INTEGER===Math.pow(2,53)-1//true
Number.MAX_SAFE_INTEGER===9007199254740991//true
Number.MIN_SAFE_INTEGER===-Number.MAX_SAFE_INTEGER//true
Number.MIN_SAFE_INTEGER===-9007199254740991//true
Number.isSafeInteger()
JavaScript能夠準(zhǔn)確表示的整數(shù)范圍在-2^53到2^53之間(不含兩個(gè)端點(diǎn)),超過這個(gè)范圍,無法精確表示這個(gè)值。
Math.pow(2,53)//9007199254740992
Math.pow(2,53)===Math.pow(2,53)+1//true
Number.parseInt(),Number.parseFloat()
ES6將全局方法parseInt(),parseFloat()移植到Number對(duì)象上面,行為完全保持不變。這樣做的目的,是逐步減少全局性方法,使得語言逐步模塊化。
String擴(kuò)展
Stotype.includes()
ES5中可以使用indexOf方法來判斷一個(gè)字符串是否包含在另一個(gè)字符串中,indexOf返回出現(xiàn)的下標(biāo)位置,如果不存在則返回-1。
conststr='jimmy'
console.log(str.indexOf('y'))//4
ES6提供了includes方法來判斷一個(gè)字符串是否包含在另一個(gè)字符串中,返回boolean類型的值。
conststr='jimmy'
console.log(str.includes('mm'))//true
//區(qū)分大小寫
'BlueWhale'.includes('blue');//returnsfalse
語法
str.includes(searchString[,position])
searchString要在此字符串中搜索的字符串。position從當(dāng)前字符串的哪個(gè)索引位置開始搜尋子字符串,默認(rèn)值為0。
返回值
如果當(dāng)前字符串包含被搜尋的字符串,就返回true;否則返回false。;
Stotype.startsWith()
判斷參數(shù)字符串是否在原字符串的頭部,返回boolean類型的值。
conststr='jimmy'
console.log(str.startsWith('ji'))//true
Stotype.endsWith()
判斷參數(shù)字符串是否在原字符串的尾部,返回boolean類型的值。
conststr='jimmy'
console.log(str.endsWith('my'))//true
Stotype.repeat()
repeat方法返回一個(gè)新字符串,表示將原字符串重復(fù)n次。
conststr='jimmy'
constnewStr=str.repeat(2)
console.log(newStr)//jimmyjimmy
Symbol
ES6引入了一種新的原始數(shù)據(jù)類型Symbol,表示獨(dú)一無二的值。它是JavaScript語言的第七種數(shù)據(jù)類型,前六種是:undefined、null、布爾值(Boolean)、字符串(String)、數(shù)值(Number)、對(duì)象(Object)。
為什么要引入Symbol呢
ES5的對(duì)象屬性名都是字符串,這容易造成屬性名的沖突。比如,你使用了一個(gè)他人提供的對(duì)象,但又想為這個(gè)對(duì)象添加新的方法(mixin模式),新方法的名字就有可能與現(xiàn)有方法產(chǎn)生沖突。如果有一種機(jī)制,保證每個(gè)屬性的名字都是獨(dú)一無二的就好了,這樣就從根本上防止屬性名的沖突。這就是ES6引入Symbol的原因。
Symbol值通過Symbol函數(shù)生成。這就是說,對(duì)象的屬性名現(xiàn)在可以有兩種類型,一種是原來就有的字符串,另一種就是新增的Symbol類型。凡是屬性名屬于Symbol類型,就都是獨(dú)一無二的,可以保證不會(huì)與其他屬性名產(chǎn)生沖突。
leta=Symbol();
letb=Symbol();
typeofa//symbol
console.log(a===b);//false
Symbol函數(shù)可以接受一個(gè)字符串作為參數(shù),表示對(duì)Symbol實(shí)例的描述,主要是為了在控制臺(tái)顯示,或者轉(zhuǎn)為字符串時(shí),比較容易區(qū)分。
lets1=Symbol('foo')
lets2=Symbol('foo')
console.log(s1)//Symbol(foo)
console.log(s2)//Symbol(foo)
//`Symbol`函數(shù)的參數(shù)只是表示對(duì)當(dāng)前Symbol值的描述,因此相同參數(shù)的`Symbol`函數(shù)的返回值是不相等的。
console.log(s1===s2)//false
注意
Symbol函數(shù)前不能使用new命令,否則會(huì)報(bào)錯(cuò)。這是因?yàn)樯傻腟ymbol是一個(gè)原始類型的值,不是對(duì)象。也就是說,由于Symbol值不是對(duì)象,所以不能添加屬性?;旧希且环N類似于字符串的數(shù)據(jù)類型。
如果Symbol的參數(shù)是一個(gè)對(duì)象,就會(huì)調(diào)用該對(duì)象的toString方法,將其轉(zhuǎn)為字符串,然后才生成一個(gè)Symbol值。
constobj={
toString(){
return'abc';
constsym=Symbol(obj);//Symbol(abc)
Symbol值不能與其他類型的值進(jìn)行運(yùn)算,會(huì)報(bào)錯(cuò)。
letsym=Symbol('Mysymbol');
"yoursymbolis"+sym
//TypeError:can'tconvertsymboltostring
`yoursymbolis${sym}`
//TypeError:can'tconvertsymboltostring
Symbol值可以顯式轉(zhuǎn)為字符串,布爾值但是不能轉(zhuǎn)為數(shù)值。
letsym=Symbol('Mysymbol');
String(sym)//'Symbol(Mysymbol)'
sym.toString()//'Symbol(Mysymbol)'
Boolean(sym)//true
!sym//false
Number(sym)//TypeError
sym+2//TypeError
Symbol.for()
Symbol.for()接受一個(gè)字符串作為參數(shù),然后搜索有沒有以該參數(shù)作為名稱的Symbol值。如果有,就返回這個(gè)Symbol值,否則就新建一個(gè)以該字符串為名稱的Symbol值,并將其注冊(cè)到全局。
lets1=Symbol.for('foo')
lets2=Symbol.for('foo')
console.log(s1===s2)//true
Symbol.for()與Symbol()這兩種寫法,都會(huì)生成新的Symbol。它們的區(qū)別是,前者會(huì)被登記在全局環(huán)境中供搜索,后者不會(huì)。Symbol.for()不會(huì)每次調(diào)用就返回一個(gè)新的Symbol類型的值,而是會(huì)先檢查給定的key是否已經(jīng)存在,如果不存在才會(huì)新建一個(gè)值。
Symbol.keyFor()
Symbol.keyFor()方法返回一個(gè)已登記的Symbol類型值的key。
consts1=Symbol('foo')
console.log(Symbol.keyFor(s1))//undefined
consts2=Symbol.for('foo')
console.log(Symbol.keyFor(s2))//foo
應(yīng)用場(chǎng)景
消除魔術(shù)字符串
魔術(shù)字符串指的是,在代碼之中多次出現(xiàn)、與代碼形成強(qiáng)耦合的某一個(gè)具體的字符串或者數(shù)值。風(fēng)格良好的代碼,應(yīng)該盡量消除魔術(shù)字符串,改由含義清晰的變量代替。
functiongetArea(shape,options){
letarea=0;
switch(shape){
case'Triangle'://魔術(shù)字符串
area=.5*options.width*options.height;
break;
/*...morecode...*/
returnarea;
getArea('Triangle',{width:100,height:100});//魔術(shù)字符串
上面代碼中,字符串Triangle和Circle就是魔術(shù)字符串。它多次出現(xiàn),與代碼形成強(qiáng)耦合,不利于將來的修改和維護(hù)。
常用的消除魔術(shù)字符串的方法,就是把它寫成一個(gè)變量。
constshapeType={
triangle:'Triangle'
functiongetArea(shape,options){
letarea=0;
switch(shape){
caseshapeType.triangle:
area=.5*options.width*options.height;
break;
returnarea;
getArea(shapeType.triangle,{width:100,height:100});
上面代碼中,我們把Triangle寫成shapeType對(duì)象的triangle屬性,這樣就消除了強(qiáng)耦合。
如果仔細(xì)分析,可以發(fā)現(xiàn)shapeType.triangle等于哪個(gè)值并不重要,只要確保不會(huì)跟其他shapeType屬性的值沖突即可。因此,這里就很適合改用Symbol值。
constshapeType={
triangle:Symbol()
};
最終的代碼
constshapeType={
triangle:Symbol(),
circle:Symbol()
functiongetArea(shape){
letarea=0
switch(shape){
caseshapeType.triangle:
area=.5*options.width*options.height;
break;
caseshapeType.circle:
//...morecode...
break
returnarea
console.log(getArea(shapeType.triangle))
Symbol類型還可以用于定義一組常量,保證這組常量的值都是不相等的。
constCOLOR_RED=Symbol();
constCOLOR_GREEN=Symbol();
functiongetComplement(color){
switch(color){
caseCOLOR_RED:
returnCOLOR_GREEN;
caseCOLOR_GREEN:
returnCOLOR_RED;
default:
thrownewError('Undefinedcolor');
}
常量使用Symbol值最大的好處,就是其他任何值都不可能有相同的值了,因此可以保證上面的switch語句會(huì)按設(shè)計(jì)的方式工作。
Set
ES6提供了新的數(shù)據(jù)結(jié)構(gòu)Set。它類似于數(shù)組,但是成員的值都是唯一的,沒有重復(fù)的值。
Set本身是一個(gè)構(gòu)造函數(shù),用來生成Set數(shù)據(jù)結(jié)構(gòu)。
lets=newSet()
//在實(shí)例化的同時(shí)傳入默認(rèn)的數(shù)據(jù)。
lets2=newSet([1,2,3])
//初始化的參數(shù)必須是可遍歷的,可以是數(shù)組或者自定義遍歷的數(shù)據(jù)結(jié)構(gòu)。
添加數(shù)據(jù)
lets=newSet()
s.add('chimmy')
s.add('18')
s.add('jimmy').add('18')
//Set數(shù)據(jù)結(jié)構(gòu)不允許數(shù)據(jù)重復(fù),所以添加重復(fù)的數(shù)據(jù)是無效的
console.log(s);//Set(3){'chimmy','18','jimmy'}
刪除數(shù)據(jù)
//刪除指定數(shù)據(jù)
s.delete('jimmy')//true
//刪除全部數(shù)據(jù)
s.clear()
查找和總數(shù)
//判斷是否包含數(shù)據(jù)項(xiàng),返回true或false
s.has('hello')//true
//計(jì)算數(shù)據(jù)項(xiàng)總數(shù)
s.size//3
應(yīng)用場(chǎng)景
數(shù)組去重
letarr=[1,2,3,4,2,3]
lets=[...newSet(arr)]
console.log(s)//[1,2,3,4]
合并去重
letarr1=[1,2,3,4]
letarr2=[2,3,4,5,6]
lets=newSet([...arr1,...arr2])
console.log(s)//Set(6){1,2,3,4,5,6}
console.log([...s])//[1,2,3,4,5,6]
console.log(Array.from(s))//[1,2,3,4,5,6]
交集
letarr1=[1,2,3,4]
letarr2=[2,3,4,5,6]
lets1=newSet(arr1)
lets2=newSet(arr2)
letresult=newSet(arr1.filter(item=s2.has(item)))
console.log(Array.from(result))//[2,3,4]
差集
letarr1=[1,2,3,4];
letarr2=[2,3,4,5,6];
lets1=newSet([1,2,3,4])
lets2=newSet([2,3,4,5,6])
letarr3=newSet(arr1.filter(item=!s2.has(item)))
letarr4=newSet(arr2.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中職動(dòng)物營養(yǎng)管理應(yīng)用(應(yīng)用技術(shù))試題及答案
- 2025年大學(xué)三年級(jí)(食品營養(yǎng)與健康)營養(yǎng)配餐設(shè)計(jì)試題及答案
- 2025年中職城鎮(zhèn)建設(shè)(城鎮(zhèn)建設(shè)基礎(chǔ))試題及答案
- 2025年高職機(jī)電設(shè)備安裝技術(shù)(機(jī)電設(shè)備安裝)試題及答案
- 2025年大學(xué)物業(yè)服務(wù)(小區(qū)管理)試題及答案
- 2025年高職(機(jī)電一體化技術(shù))氣動(dòng)傳動(dòng)實(shí)訓(xùn)階段測(cè)試題及答案
- 2025年大學(xué)生物學(xué)(生物學(xué)案例分析)試題及答案
- 2025年大學(xué)大三(園林)園林工程施工技術(shù)試題及答案
- 2025年大學(xué)物理學(xué)與人類文明(量子物理與現(xiàn)代科技)試題及答案
- 2025年高職歷史(考古學(xué)基礎(chǔ))試題及答案
- 數(shù)字孿生方案
- 金融領(lǐng)域人工智能算法應(yīng)用倫理與安全評(píng)規(guī)范
- 2026長治日?qǐng)?bào)社工作人員招聘勞務(wù)派遣人員5人備考題庫及答案1套
- 2023年司法鑒定所黨支部年終總結(jié)
- 向規(guī)范要50分規(guī)范答題主題班會(huì)-課件
- 腫瘤生物學(xué)1(完整版)
- cie1931年標(biāo)準(zhǔn)色度觀測(cè)者的光譜色品坐標(biāo)
- 2023-2024學(xué)年廣東省廣州市小學(xué)數(shù)學(xué)二年級(jí)上冊(cè)期末自我評(píng)估試題
- YS/T 971-2014鈦鎳形狀記憶合金絲材
- 鈷冶金概述課件
- 方小丹建筑地基基礎(chǔ)設(shè)計(jì)的若干問題課件
評(píng)論
0/150
提交評(píng)論