1:什么是引用類(lèi)型嘹锁?
在ECMA中引用類(lèi)型是一種數(shù)據(jù)結(jié)構(gòu)葫录,用于將數(shù)據(jù)和功能組織在一起。
2:JavaScript中有哪幾種引用類(lèi)型领猾?
Object 米同、Array 骇扇、Date、RegExp面粮、Function少孝、基本包裝類(lèi)型、單體內(nèi)置對(duì)象
3:請(qǐng)說(shuō)出基本類(lèi)型值有哪些熬苍?
Undefined稍走、Null、Boolean柴底、Number婿脸、String。這五種基本數(shù)據(jù)類(lèi)型是按值訪(fǎng)問(wèn)的柄驻,因?yàn)榭梢圆僮鞅4嬖谧兞恐袑?shí)際的值而不是引用狐树。
4:創(chuàng)建Object實(shí)例有哪些方法?
//方法一:使用new操作符后跟Object構(gòu)造函數(shù)
var person = new Object();
person.name = 'yura';
person.age = 14;
//方法二:使用對(duì)象字面量
var person = {
name:'yriua',
age:13
};
注意:在通過(guò)對(duì)象字面量定義對(duì)象時(shí)鸿脓,實(shí)際上不會(huì)調(diào)用Object構(gòu)造函數(shù)
5:訪(fǎng)問(wèn)對(duì)象屬性有哪幾種方法抑钟?
//方法一:通過(guò)方括號(hào)語(yǔ)法
//方括號(hào)優(yōu)點(diǎn)主要是可以通過(guò)變量來(lái)訪(fǎng)問(wèn)屬性
//若屬性名中包含會(huì)導(dǎo)致語(yǔ)法錯(cuò)誤的字符,或者屬性名使用關(guān)鍵字或保留字答憔,使用方括號(hào)味赃。
console.log(person['name']);
//方法二:通過(guò)點(diǎn)語(yǔ)法
console.log(person.name;);
6:簡(jiǎn)單介紹一下Funtion類(lèi)型。
函數(shù)實(shí)際上是對(duì)象虐拓。每個(gè)函數(shù)都是Function類(lèi)型的實(shí)例心俗。而且都有其他引用類(lèi)型一樣具有屬性和方法。由于函數(shù)式對(duì)象蓉驹,所以函數(shù)名實(shí)際上是一個(gè)指向函數(shù)對(duì)象的指針城榛,不會(huì)與某個(gè)函數(shù)綁定。
7:什么是函數(shù)聲明态兴,聲明是函數(shù)表達(dá)式狠持。函數(shù)表達(dá)式和函數(shù)聲明有什么不同?
//函數(shù)聲明
function sum (){
//.........
}
//函數(shù)表達(dá)式
var sum = new Function ('num1','num2,"return num1+num2");
函數(shù)聲明和函數(shù)表達(dá)式區(qū)別:解析器會(huì)率先讀取函數(shù)聲明瞻润,并使其在執(zhí)行之前就可以訪(fǎng)問(wèn)喘垂。至于函數(shù)表達(dá)式,必須等到解析器執(zhí)行到他所在的代碼行绍撞,才會(huì)真正被解析正勒。
注意!傻铣!函數(shù)是對(duì)象章贞,函數(shù)名是指針
8:簡(jiǎn)介arguments?
arguments是函數(shù)內(nèi)部的對(duì)象非洲。他是一個(gè)類(lèi)似數(shù)組的對(duì)象鸭限,包含著傳入函數(shù)中的所有參數(shù)蜕径。
argument有一個(gè)callee屬性,該屬性是一個(gè)指針败京,指向擁有這個(gè)arguments對(duì)象的函數(shù)
如:
//這段代碼函數(shù)的執(zhí)行與函數(shù)名factorial緊緊耦合兜喻,
function factorial(num){
if(num<=1){
return 1;
}else{
return num*factorial(num-1);
}
}
//為消除這種耦合現(xiàn)象。我們可以使用auguments.callee
function factorial(num){
if(num<=1){
return 1;
}else{
return num*argumens.callee(num-1);
}
}
9:this是什么鬼喧枷?
this是函數(shù)內(nèi)部的一個(gè)特殊的對(duì)象虹统。this引用的是函數(shù)根據(jù)以執(zhí)行的環(huán)境對(duì)象弓坞。(如在網(wǎng)頁(yè)的全局對(duì)象中調(diào)用函數(shù)時(shí)隧甚,this對(duì)象引用的就是window)
10:caller是什么?
caller是函數(shù)的一個(gè)對(duì)象的屬性渡冻。這個(gè)屬性中保存著調(diào)用當(dāng)前函數(shù)的函數(shù)引用戚扳。
function outer(){
inner();
}
function inner(){
alert(inner.caller);
}
outer(); \\顯示outer函數(shù)源代碼
11:apply和call有什么區(qū)別。他們的作用是什么族吻?
每個(gè)函數(shù)都包含兩個(gè)非繼承而來(lái)的方法帽借。這個(gè)方法的用途
apply():接受兩個(gè)參數(shù),一個(gè)是在其中運(yùn)行函數(shù)的作用域超歌,另一個(gè)是參數(shù)數(shù)組
call():第一個(gè)參數(shù)是this砍艾,剩余的所有值都是直接傳遞給函數(shù)。在使用call()時(shí)巍举,傳遞給函數(shù)的參數(shù)必須逐個(gè)列舉出來(lái)脆荷。
function sum(num1,num2){
return num1+num2;
}
function callSum(num1,num2){
return sum.apply(this,argumens); //傳入arguments對(duì)象
}
function callSum2(num1,num2){
return sum.apply(this,[num1,num2]);
}
function callSum3(num1,num2){
return sum.call(this,num1,num2);
}
注意:嚴(yán)格模式下,未指定環(huán)境對(duì)象而調(diào)用函數(shù)懊悯,則this值不會(huì)轉(zhuǎn)型為window蜓谋。
apply和call可以擴(kuò)充函數(shù)的作用域。
window.color = 'red';
var o = {color:'bule'};
function sayColor(){
alert(this.color);
}
sayColor(); //red
sayColor.call(this); //red
sayColor.call(window); //red
sayColor.call(o);//blue
12:什么是基本包裝類(lèi)型炭分?
為了便于操作基本類(lèi)型值桃焕,ECMAScript還提供了3個(gè)特殊的類(lèi)型:Boolean、Number捧毛、String
13:引用類(lèi)型和基本包裝類(lèi)型有什么區(qū)別观堂?
生存周期不同。使用new操作符創(chuàng)建的引用類(lèi)型的實(shí)例呀忧,在執(zhí)行流離開(kāi)當(dāng)前作用域之前都一直保存在內(nèi)存中师痕。而自動(dòng)創(chuàng)建的基本包裝類(lèi)型的對(duì)象,則只存在于代碼執(zhí)行的瞬間荐虐,然后立即被銷(xiāo)毀七兜。這意味我們不能再運(yùn)行時(shí)為基本類(lèi)型值添加屬性和方法。
14:什么是單體內(nèi)置對(duì)象福扬?
內(nèi)置對(duì)象是由ECMAScript實(shí)現(xiàn)提供的腕铸、不依賴(lài)于宿主環(huán)境的對(duì)象惜犀。這些對(duì)象在ECMAScript程序執(zhí)行之前就已經(jīng)存在了。意思就是說(shuō)開(kāi)發(fā)人員不必顯示的實(shí)例化內(nèi)置對(duì)象狠裹。因?yàn)樗麄円呀?jīng)實(shí)例化了虽界。如:Object 、Array涛菠、String莉御。
單體內(nèi)置對(duì)象:Global和Math