1、JavaScript 定義了幾種數(shù)據(jù)類型? 哪些是原始類型?哪些是復(fù)雜類型?原始類型和復(fù)雜類型的區(qū)別是什么?
- JS語言的每一個值,都屬于某一種數(shù)據(jù)類型,共有六種:
1、數(shù)值:整數(shù)和小數(shù);
2、字符串:字符組成的文本(比如“hello world”);
3、布爾值:true(真)和false(假)兩個特定值;
4、undefined:表示“未定義”或不存在,即此處目前沒有任何值(未賦值);
5、null:表示空缺,即此處應(yīng)該有一個值,但目前為空;
6、對象:各種值組成的集合。 - 原始類型:數(shù)值、字符串、布爾值,即它們是最基本的數(shù)據(jù)類型,不能再細(xì)分了。
- 復(fù)雜類型:對象,因為一個對象往往是多個原始類型的值的合成,可以看作是一個存放各種值的容器。
至于undefined和null,一般將它們看成兩個特殊值。
2、typeof和instanceof的作用和區(qū)別?
- typeof運算符可以用來檢查一個沒有聲明的變量,而不報錯。實際編程中,這個特點通常用在判斷語句。例如
if (typeof v === “undefined”){}
只能檢測出部分簡單的原始類型數(shù)據(jù),例如數(shù)值返回number、字符串返回string、布爾值boolean;函數(shù)返回function;undefined 返回undefined。
而對于復(fù)雜類型數(shù)據(jù),則無法區(qū)分,例如無法區(qū)分?jǐn)?shù)組和對象、null,都返回object。 - instanceof運算符;判斷一個東西是不是由某個構(gòu)造函數(shù)所創(chuàng)建的實例,例判斷是不是數(shù)組。
3、如何判斷一個變量是否是數(shù)字、字符串、布爾、函數(shù)?
使用typeof運算符判斷
Paste_Image.png
4、NaN是什么? 有什么特別之處?
- NaN是JavaScript的特殊值,表示“非數(shù)字”(Not a Number),主要出現(xiàn)在將字符串解析成數(shù)字出錯的場合。NaN不是一種獨立的數(shù)據(jù)類型,而是一種特殊數(shù)值,它的數(shù)據(jù)類型依然屬于Number。
- 特點:NaN不等于任何值,包括它本身。NaN在布爾運算時被當(dāng)作false。NaN與任何數(shù)(包括它自己)的運算,得到的都是NaN。
5、如何把非數(shù)值轉(zhuǎn)化為數(shù)值?
可以用下面函數(shù)將非數(shù)值轉(zhuǎn)化為數(shù)值
Number()
parseInt()
parseFloat()
6、==與===有什么區(qū)別?
- ==,相等運算符隱藏的類型轉(zhuǎn)換,將不同類型的數(shù)據(jù)轉(zhuǎn)化成數(shù)值后比較;===為嚴(yán)格相等運算符,是否為同一個值。
- 區(qū)別是相等運算符(==)比較兩個值是否相等,嚴(yán)格相等運算符(===)比較它們是否為“同一個值”。如果兩個值不是同一類型,嚴(yán)格相等運算符(===)直接返回false,而相等運算符(==)會將它們轉(zhuǎn)化成同一個類型,再用嚴(yán)格相等運算符進(jìn)行比較。
7、break與continue有什么區(qū)別?
break語句和continue語句都具有跳轉(zhuǎn)作用,可以讓代碼不按既有的順序執(zhí)行。
break語句用于跳出代碼塊或循環(huán)。
continue語句用于立即終止本輪循環(huán),返回循環(huán)結(jié)構(gòu)的頭部,開始下一輪循環(huán)。
8、void 0 和 undefined在使用場景上有什么區(qū)別?
void 運算符通常只用于獲取 undefined 的原始值,一般使用 void(0)(等同于 void 0)。在上述情況中,也可以使用全局變量undefined 來代替(假定其仍是默認(rèn)值)。
void 可以給任何給定的表達(dá)式求值,并返回 undefined,并且 void 不可被重寫。
undefined:表示“未定義”或不存在,即此處目前沒有任何值(未賦值)。
9、以下代碼的輸出結(jié)果是?為什么?
Paste_Image.png
console.log(1+1);
輸出2console.log("2"+"4")
輸出"24"console.log(2+"4")
輸出"24"console.log(+"4")
輸出4若兩個運算子都是原始類型,只要有一個運算子是字符串,則兩個運算子都轉(zhuǎn)為字符串,執(zhí)行字符串連接運算;否則,兩個運算子都轉(zhuǎn)為數(shù)值,執(zhí)行加法運算。
加法運算符一定有左右兩個運算子,如果只有右邊一個運算子,就是另一個運算符,叫做“數(shù)值運算符”。
10、 以下代碼的輸出結(jié)果是?
var a=1;
a+++a; //輸出3,先執(zhí)行a++=1,此時a=2,則(a++)+a=1+2=3;
typeof a+2; //輸出"number2",typeof優(yōu)先,number+2=number2
11、以下代碼的輸出結(jié)果是? 為什么
Paste_Image.png
var a=1;
var b=3;
console.log(a+++b); //輸出4,(a++)+b=1+3=4
12、遍歷數(shù)組,把數(shù)組里的打印數(shù)組每一項的平方
var arr=[3,4,5];
for (var i=0,i<arr.length,i++){
console.log(arr[i]*arr[i]);
}
13、遍歷 JSON, 打印里面的值
var obj={
name: 'hunger',
sex: 'male',
age: 28
}
for (a in obj){
console.log(a+":"+obj[a])
}
14、以下代碼輸出結(jié)果是? 為什么 (選做題目)
var a=1,b=2,c=3;
var val=typeof a+b || c>0;
console.log(val)
輸出number2;因為typeof優(yōu)先級最高,||左邊為number2,為true,所以返回第一個運算子的值
var d=5;
var data=d==5 && console.log('bb')
console.log(data)
輸出為'bb',因為&&左邊第一個運算子的布爾值為true,所以輸出第二個運算子的值
var data2=d=0 || console.log('haha');
console.log(data2);
輸出為'haha', 因為||左邊運算子的布爾值為false,所以輸出第二個運算子的值
var x=!!"Hello" + (!"world", !!"from here!!");
console.log(x)
輸出為2,因為X=true+(false, true)=2