1.JavaScript 定義了幾種數(shù)據(jù)類型? 哪些是原始類型?哪些是復(fù)雜類型?原始類型和復(fù)雜類型的區(qū)別是什么?
六種帘营,其中:number,string,boolean屬于原始類型嘉蕾; object屬于復(fù)雜類型; undefined和null屬于特殊類型。原始類型和復(fù)雜類型的區(qū)別:原始類型是表示Javascript中可用的數(shù)據(jù)或信息的最底層形式或最簡(jiǎn)單形式矫钓,不能表示由其他值組成的值。不可以添加屬性和方法。復(fù)雜類型可以由很多不同類型的javascript對(duì)象組成荞估。復(fù)雜對(duì)象其在內(nèi)存中的大小是未知的咳促,因?yàn)閺?fù)雜對(duì)象可以包含任何值,而不是一個(gè)特定的已知值勘伺。對(duì)于復(fù)雜類型跪腹,可以為其添加屬性和方法,也可以改變和刪除其屬性和方法飞醉。
2.typeof和instanceof的作用和區(qū)別?
typeof:用來(lái)獲取運(yùn)算數(shù)的數(shù)據(jù)類型冲茸。
instanceof用于判斷某個(gè)變量是否是某個(gè)對(duì)象的實(shí)例。
區(qū)別:typeof返回的結(jié)果可能為number缅帘、boolean噪裕、undefined、function股毫、object膳音、string,但這些結(jié)果本身都是字符串铃诬。對(duì)于Array,Null等特殊對(duì)象使用typeof 一律返回object祭陷;instanceof返回值為true或false,是布爾值趣席,可以區(qū)分?jǐn)?shù)組和對(duì)象兵志。
3.如何判斷一個(gè)變量是否是數(shù)字、字符串宣肚、布爾想罕、函數(shù)?
使用typeof檢測(cè):typeof
4.NaN是什么? 有什么特別之處?
NaN即”not a number“的縮寫霉涨,代表非數(shù)字值的特殊值按价,用于指示某個(gè)值不是數(shù)字◇仙可以把 Number 對(duì)象設(shè)置為該值楼镐,來(lái)指示其不是數(shù)字值。需要注意的是往枷,NaN 與其他數(shù)值進(jìn)行比較的結(jié)果總是不相等的框产,包括它自身在內(nèi)。因此错洁,不能與 Number.NaN 比較來(lái)檢測(cè)一個(gè)值是不是數(shù)字秉宿,而只能調(diào)用 isNaN() 來(lái)比較。
5.如何把非數(shù)值轉(zhuǎn)化為數(shù)值?
有三個(gè)函數(shù)可以把非數(shù)值轉(zhuǎn)換為數(shù)值:Number()或 parseInt()或parseFloat()
6.==與===有什么區(qū)別
== 相等=== 嚴(yán)格相等===是嚴(yán)格意義的相等屯碴,只需注意NaN和NaN不等就行了描睦。而使用==的時(shí)候,javascript會(huì)幫我們做類型轉(zhuǎn)換窿锉,例如:1.如果一個(gè)是null酌摇,一個(gè)是undefined膝舅,那么相等2.如果一個(gè)是數(shù)字嗡载,一個(gè)是字符串窑多,先將字符串轉(zhuǎn)為數(shù)字,然后比較3.如果一個(gè)值是true/false則將其轉(zhuǎn)為1/0比較4.如果一個(gè)值是對(duì)象洼滚,一個(gè)是數(shù)字或字符串埂息,則嘗試使用valueOf和toString轉(zhuǎn)換后比較5.其它就不相等了
7.break與continue有什么區(qū)別
break直接跳出循環(huán),一次也不再執(zhí)行遥巴;而continue只跳出本次循環(huán)千康,以后的循環(huán)仍會(huì)執(zhí)行。
8.void 0 和 undefined在使用場(chǎng)景上的區(qū)別
void 會(huì)執(zhí)行后面的表達(dá)式并返回 undefined铲掐,通常 void 0 會(huì)用來(lái)獲取 undefined拾弃。undefined 可能會(huì)被重寫,但是 void 0 返回的值一定會(huì)是 undefined摆霉。
9.以下代碼的輸出結(jié)果豪椿?
console.log(1+1);
console.log("2"+"4");
console.log(2+"4");
console.log(+"4");
![](http://home.jscode.me/uploads/default/original/2X/d/d4e77fd9c6ceff309a26f9a6ccfc58636e2499ba.jpg)
第一個(gè)直接做加法輸出,第二個(gè)字符串拼接后輸出携栋,第三個(gè)數(shù)字會(huì)先被轉(zhuǎn)換成字符串搭盾,第四個(gè)只有一個(gè)字符串會(huì)嘗試轉(zhuǎn)化為數(shù)字。
10.以下代碼的輸出結(jié)果
var a = 1;
a+++a;
typeof a+2;
第二句相當(dāng)于(a++)+a;結(jié)果為3婉支,第三句相當(dāng)于(typeof a)+2鸯隅;即字符串”number“和2拼接,得到”number2“
11.以下代碼輸出結(jié)果向挖?
var a = 1;
var b = 3;
console.log( a+++b );
先算a++為1蝌以,再用這個(gè)值加上b,結(jié)果為4何之。但a的值此時(shí)變成了2
12.以下代碼輸出結(jié)果饼灿?
var a = 1, b = 2, c = 3;
var val = typeof a + b || c >0
console.log(val)
/*結(jié)果為number2,先運(yùn)算typeof a帝美,結(jié)果為number碍彭,接著與b拼接變?yōu)閚umber2,||運(yùn)算符前面的值為true的話悼潭,則直接返回前面的值庇忌。所以結(jié)果為number2。*/
var d = 5;
var data = d ==5 && console.log('bb')
console.log(data)
/*結(jié)果為”bb“,&&運(yùn)算符舰褪,若前面值為true皆疹,則返回后面的值”bb“*/
var data2 = d = 0 || console.log('haha')
console.log(data2)
/*結(jié)果為”haha",||運(yùn)算符左邊為0,所以直接返回其右邊的"haha*/
var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x)
/*結(jié)果為2占拍,略就!運(yùn)算符會(huì)將字符串轉(zhuǎn)換為布爾值捎迫,逗號(hào)運(yùn)算符返回其后面的表達(dá)式的值,即true表牢,與前面的true相加時(shí)會(huì)轉(zhuǎn)換成數(shù)字1+1窄绒,所以最終結(jié)果為2*/