1.JavaScript 定義了幾種數(shù)據(jù)類型? 哪些是原始類型?哪些是復(fù)雜類型?原始類型和復(fù)雜類型的區(qū)別是什么?
javascript定義了6種數(shù)據(jù)類型,分別是number(數(shù)值)、string(字符串)、boolean(布爾值)、underfind(未定義或不存在,沒(méi)有值)、null(應(yīng)該有值目前沒(méi)有)、object(對(duì)象)
原始類型(基本類型):string、number、Boolean
復(fù)雜類型:object
underfind和null是兩個(gè)特殊類型
原始類型和復(fù)雜類型的區(qū)別:原始類型是基本的數(shù)據(jù)類型,不能再細(xì)分了;復(fù)雜類型是多個(gè)原始類型的合成,可以看成是一個(gè)存放各種值的容器。
2.typeof和instanceof的作用和區(qū)別?
typeof用于判斷一個(gè)變量的類型;
instanceof判斷一個(gè)變量是否是某個(gè)對(duì)象的實(shí)例
區(qū)別:typeof一般檢測(cè)基本類型,instanceof一般檢測(cè)復(fù)雜類型
/regularexpression/ instanceof RegExp; // true
typeof /regularexpression/; //object
[] instanceof Array; // true
typeof []; //object
{} instanceof Object; // true
typeof {}; //object
3.如何判斷一個(gè)變量是否是數(shù)字、字符串、布爾、函數(shù)?
用typeof操作符可以判斷:
typeof a; //"number" 變量a為數(shù)字
typeof a; //"string" 變量a為字符串
typeof a; //"boolean" 變量a為布爾值
typeof a; //"function" 變量a為函數(shù)
/*其他類型*/
typeof underfind //"underfind"
typeof null //"object"
typeof [] //"object"
typeof {} //"object"
4.NaN是什么? 有什么特別之處?
NaN表示非數(shù)字(Not a Number),NaN是一個(gè)特殊的數(shù)值,與任何值都不相等,包括自己。
NaN==NaN; //flase
5.如何把非數(shù)值轉(zhuǎn)化為數(shù)值?
有三個(gè)函數(shù)可以把非數(shù)值轉(zhuǎn)換為數(shù)值:
1.number()
- 如果是Boolean值,true和false將分別轉(zhuǎn)化為1和0;
- 如果是數(shù)字,直接傳入數(shù)字;
- 如果是null,返回0;
- 如果是underfind,返回NaN;
- 如果是對(duì)象,則調(diào)用對(duì)象的valueOf()方法,然后按照前面的規(guī)則轉(zhuǎn)換返回的值,如果轉(zhuǎn)換的結(jié)果是NaN,則調(diào)用toString()方法,然后再次依照前面的規(guī)則轉(zhuǎn)換。
number()函數(shù)轉(zhuǎn)換字符串時(shí)比較麻煩而且不合理,因此常用parseInt()和parseFloat()函數(shù)
2.parseInt()
在轉(zhuǎn)換字符串時(shí),會(huì)忽略字符串前面的空格,找到第一個(gè)非空格字符,如果第一個(gè)字符不是數(shù)字或者負(fù)號(hào),parseInt()會(huì)返回NaN,如果是繼續(xù)解析,知道解析完或者碰到第一個(gè)非數(shù)字字符;可以傳遞參數(shù)指定幾進(jìn)制解析。
parseInt("123abc"); //123
parseInt(""); //NaN
parseInt("0xA"); //10
parseInt("123abc"); //123
parseInt("22.2"); //22
parseInt("070"); //56(八進(jìn)制)
parseInt("true"); //NaN
3.parseFloat()
與parseInt()類似,轉(zhuǎn)換浮點(diǎn)數(shù)時(shí),遇到的第一個(gè)小數(shù)點(diǎn)有效,第二個(gè)之后的就無(wú)效,只解析十進(jìn)制,解析十六進(jìn)制字符串時(shí)會(huì)轉(zhuǎn)換成0;
parseFloat("22.5"); //22.5
parseFloat("22.5.4"); //22.5
parseFloat("3.125e7"); //31250000
parseFloat("0xA"); //0
6.==與===有什么區(qū)別
==(相等)操作符會(huì)先轉(zhuǎn)換在比較,null和underfind不能轉(zhuǎn)換;===(全等)操作符是僅比較不轉(zhuǎn)換;
null==underfind; //true
null===underfind; //false
"23"==23; //true
"23"===23; //false
true==1; //true
true===1; //false
null==0; //false
"NaN"==Nan; //false
7.break與continue有什么區(qū)別
break和continue都可以用來(lái)結(jié)束循環(huán)
- break是強(qiáng)制跳出循環(huán)體執(zhí)行循環(huán)體外面的語(yǔ)句,
- continue跳出當(dāng)前循環(huán),繼續(xù)執(zhí)行下次循環(huán)。
8.void 0 和 undefined在使用場(chǎng)景上有什么區(qū)別
underfind可以作為一個(gè)變量給它賦值,在需要判斷一個(gè)變量是否等于underfind時(shí),不確定underfind值時(shí)可以用void 0。
9.以下代碼的輸出結(jié)果是?為什么?
console.log(1+1); //2,
console.log("2"+"4"); //"24",兩個(gè)字符串相加把兩個(gè)字符串拼接
console.log(2+"4"); //"24",有一個(gè)是字符串,把另一個(gè)轉(zhuǎn)換成字符串再拼接
console.log(+"4"); //4,字符串轉(zhuǎn)換成數(shù)值
10.以下代碼的輸出結(jié)果是?
var a = 1;
a+++a; //輸出3,(a++)+a,a++優(yōu)先級(jí)高,a已經(jīng)變?yōu)?
typeof a+2; //"number2",typeof a 先執(zhí)行返回"number"
11.以下代碼的輸出結(jié)果是? 為什么
var a = 1;
var b = 3;
console.log( a+++b ); //4,后置遞增是在包含他的運(yùn)算求值之后執(zhí)行
12.遍歷數(shù)組,把數(shù)組里的打印數(shù)組每一項(xiàng)的平方
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(var key in obj){
console.log(key+":"+obj[key])
}
14.以下代碼輸出結(jié)果是? 為什么 (選做題目)
var a = 1, b = 2, c = 3;
var val = typeof a + b || c >0;
console.log(val); //number2,typeof a+b返回"number2"為true,不對(duì)第二個(gè)求值
var d = 5;
var data = d ==5 && console.log('bb');
console.log(data); //underfind,邏輯與運(yùn)算符,d==5為真,返回第二個(gè)值,console.log()返回值是underfind
var data2 = d = 0 || console.log('haha');
console.log(data2); //underfind,邏輯或運(yùn)算符,第一個(gè)d=0為false返回第二個(gè)操作數(shù)onsole.log()返回值是underfind
var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x); //2,!!相當(dāng)于取變量對(duì)應(yīng)的布爾值,括號(hào)里逗號(hào)操作符取最后一個(gè)值