1. JavaScript 定義了幾種數(shù)據(jù)類型? 哪些是原始類型?哪些是復(fù)雜類型?原始類型和復(fù)雜類型的區(qū)別是什么?
- JavaScript 定義了6種數(shù)據(jù)類型:
- 數(shù)值(number):整數(shù)和小數(shù);
- 字符串(string):字符組成的文本;
- 布爾值(boolean):true(真)和false(假);
- undefined:表示“未定義”或不存在,即此處目前沒有任何值;
- unll:表示空缺,即此處應(yīng)該有一個值,但目前為空;
- 對象(object):各種值組成的集合。對象有三個子類型狹義的對象(object),數(shù)組(array),函數(shù)(function)。
- 數(shù)值、字符串、布爾值稱為原始類型(primitive type)的值,即它們是最基本的數(shù)據(jù)類型,不能再細(xì)分了。
- 將對象稱為復(fù)雜類型(complex type)的值,因?yàn)橐粋€對象往往是多個原始類型的值的合成,可以看作是一個存放各種值的容器。
至于undefined和null,一般將它們看成兩個特殊值。
2. typeof和instanceof的作用和區(qū)別?
- typeof 是用于返回一個數(shù)據(jù)其原始的數(shù)據(jù)類型,對于常見的幾大數(shù)據(jù)類型都可以用typeof 數(shù)據(jù)類型的方式進(jìn)行判斷。
- instance 是用于判斷某個對象是不是構(gòu)造函數(shù)的一個實(shí)例,返回一個布爾值。
3. 如何判斷一個變量是否是數(shù)字、字符串、布爾、函數(shù)
console.log(typeof X);
- 結(jié)果為number,則是數(shù)字;
- 結(jié)果為string,則是字符串;
- 結(jié)果為true/false,則是布爾值;
- 結(jié)果為function,則是函數(shù)。
4. NaN是什么? 有什么特別之處?
NaN(Not a Number),表示非數(shù)字。任何NaN的值進(jìn)行操作都會返回一個NaN,其次,NaN與任何值都不相等,即 NaN === NaN
也是false。
5. 如何把非數(shù)值轉(zhuǎn)化為數(shù)值?
Number(mix)函數(shù),可以將任意類型的參數(shù)mix轉(zhuǎn)換為數(shù)值類型。其規(guī)則為:
如果是布爾值,true和false分別被轉(zhuǎn)換為1和0
如果是數(shù)字值,返回本身。
如果是null,返回0.
如果是undefined,返回NaN。
如果是字符串,遵循以下規(guī)則:
- 如果字符串中只包含數(shù)字,則將其轉(zhuǎn)換為十進(jìn)制(忽略前導(dǎo)0)
- 如果字符串中包含有效的浮點(diǎn)格式,將其轉(zhuǎn)換為浮點(diǎn)數(shù)值(忽略前導(dǎo)0)
- 如果是空字符串,將其轉(zhuǎn)換為0
- 如果字符串中包含非以上格式,則將其轉(zhuǎn)換為NaN
如果是對象,則調(diào)用對象的valueOf()方法,然后依據(jù)前面的規(guī)則轉(zhuǎn)換返回的值。如果轉(zhuǎn)換的結(jié)果是NaN,則調(diào)用對象的toString()方法,再次依照前面的規(guī)則轉(zhuǎn)換返回的字符串值。
parseInt(string, radix)函數(shù),將字符串轉(zhuǎn)換為整數(shù)類型的數(shù)值。它也有一定的規(guī)則:
忽略字符串前面的空格,直至找到第一個非空字符
如果第一個字符不是數(shù)字符號或者負(fù)號,返回NaN
如果第一個字符是數(shù)字,則繼續(xù)解析直至字符串解析完畢或者遇到一個非數(shù)字符號為止
如果上步解析的結(jié)果以0開頭,則將其當(dāng)作八進(jìn)制來解析;如果以0x開頭,則將其當(dāng)作十六進(jìn)制來解析
如果指定radix參數(shù),則以radix為基數(shù)進(jìn)行解析
parseFloat(string)函數(shù),將字符串轉(zhuǎn)換為浮點(diǎn)數(shù)類型的數(shù)值。
它的規(guī)則與parseInt基本相同,但也有點(diǎn)區(qū)別:字符串中第一個小數(shù)點(diǎn)符號是有效的,另外parseFloat會忽略所有前導(dǎo)0,如果字符串包含一個可解析為整數(shù)的數(shù),則返回整數(shù)值而不是浮點(diǎn)數(shù)值。
6. ==與===有什么區(qū)別
- ==是值相等,javascript會幫我們做類型轉(zhuǎn)換;
- ===是嚴(yán)格意義的相等,只需注意NaN和NaN不等就行了。
7. break與continue有什么區(qū)別
- break 用于強(qiáng)制退出循環(huán)體,執(zhí)行循環(huán)后面的語句;
- continue 用于退出本次循環(huán),執(zhí)行下次循環(huán)。
8. void 0 和 undefined在使用場景上有什么區(qū)別
void 會執(zhí)行后面的表達(dá)式并返回 undefined,但是某些情境下undefined是可以被賦值的,比如在函數(shù)中,這樣的話就不能用undefined來進(jìn)行判斷了。所以用void 0返回undefined來進(jìn)行判斷。既減少了在原形鏈上查找 window.undefined 的時間,也避免了誤用被修改過的 undefined。
9. 以下代碼的輸出結(jié)果是?為什么?
console.log(1+1);
console.log("2"+"4");
console.log(2+"4");
console.log(+"4");
2 // 兩個均為數(shù)字,+為運(yùn)算符。
24 // 兩個均帶引號,為字符串,+為連接符。
24 // 前一個為數(shù)字,后一個為字符串,+為連接符。
4 // 字符串。
10. 以下代碼的輸出結(jié)果是?
var a = 1;
a+++a;
typeof a+2;
a+++a; // 等于a++ +a,a++令a=2,但a++本身仍為1,所以結(jié)果為 3 。
typeof a+2; // typeof a為number,連上2,所以結(jié)果為 number2 。
11. 以下代碼的輸出結(jié)果是? 為什么
var a = 1;
var b = 3;
console.log( a+++b );
a+++b; // 等于a++ +b,a++令a=2,但a++本身仍為1,所以結(jié)果為 4 。
12. 遍歷數(shù)組,把數(shù)組里的打印數(shù)組每一項(xiàng)的平方
var arr = [3,4,5]
for(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é)果是? 為什么 (選做題目)
1、
var a = 1, b = 2, c = 3;
var val = typeof a + b || c >0
console.log(val)
2、
var d = 5;
var data = d ==5 && console.log('bb')
console.log(data)
3、
var data2 = d = 0 || console.log('haha')
console.log(data2)
4、
var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x)
1、number2
2、bb
undefined
3、haha
undefined
4、空字符串為false,非空則為true,var x = true+(false+true),true為1,1+1=2。