一.JavaScript 定義了幾種數(shù)據(jù)類型? 哪些是原始類型?哪些是復(fù)雜類型?原始類型和復(fù)雜類型的區(qū)別是什么?
6種:string、boolean、number、underfine、null、object
原始類型:string、boolean、number、underfine、null
復(fù)雜類型:object
區(qū)別是原始類型只是最基本的數(shù)據(jù)類型不能再細(xì)分,而復(fù)雜類型可以由幾種數(shù)據(jù)類型組合而成,可以再細(xì)分。
二.typeof和instanceof的作用和區(qū)別?
typeof是一元運(yùn)算符,返回值為字符串,該字符串用來說明運(yùn)算數(shù)的數(shù)據(jù)類型
用來獲取運(yùn)算數(shù)的數(shù)據(jù)類型。返回的值有number、boolean、undefined、function、object、string
instanceof用于判斷某個(gè)變量是否是某個(gè)對(duì)象的實(shí)例,返回值為true或false
三.如何判斷一個(gè)變量是否是數(shù)字、字符串、布爾、函數(shù)
可以使用typeof來返回變量的類型,來判斷其數(shù)據(jù)類型
四.NaN是什么? 有什么特別之處?
NaN是指非數(shù)字值的特殊值,該屬性用于指示某個(gè)值不是數(shù)字。可以把 Number 對(duì)象設(shè)置為該值,來指示其不是數(shù)字值。NaN和任何數(shù)字都不相等 包括他自己
五.如何把非數(shù)值轉(zhuǎn)化為數(shù)值?
parseInt()
number()
parseFloat()
六.==與===有什么區(qū)別
==是相對(duì)等于,也就是說==號(hào)兩邊的數(shù)據(jù)它會(huì)先轉(zhuǎn)化為相同的數(shù)據(jù)類型再比較,例如false==0,它會(huì)把false轉(zhuǎn)化成0再和0對(duì)比。
===則是絕對(duì)相等,===號(hào)兩邊的數(shù)據(jù)不會(huì)轉(zhuǎn)化數(shù)據(jù)類型再比較,所以在===號(hào)兩邊只有相同數(shù)據(jù)類型的相同值這命題才正確。false===0是錯(cuò)誤的,0===0才是正確的
七.break與continue有什么區(qū)別
break是退出循環(huán),
continue則是不參加本次循環(huán),繼續(xù)參加下一次循環(huán)
八.void 0 和 undefined在使用場(chǎng)景上有什么區(qū)別
void 會(huì)執(zhí)行后面的表達(dá)式并返回 undefined,但是某些情境下undefined是可以被賦值的,比如在函數(shù)中,這樣的話就不能用undefined來進(jìn)行判斷了。所以用void 0返回undefined來進(jìn)行判斷。既減少了在原形鏈上查找 window.undefined 的時(shí)間,也避免了誤用被修改過的 undefined。
九.以下代碼的輸出結(jié)果是?為什么?
console.log(1+1); 2 兩個(gè)數(shù)字加法運(yùn)算
console.log("2"+"4"); “24” 兩個(gè)字符串相加相拼
console.log(2+"4"); “24” 一個(gè)字符串一個(gè)數(shù)字,數(shù)字被轉(zhuǎn)化為字符串后和字符串相拼接
console.log(+"4"); 4 一個(gè)字符串會(huì)轉(zhuǎn)化為number輸出
十. 以下代碼的輸出結(jié)果是?
var a = 1;
a+++a; 2 ++的運(yùn)算優(yōu)先級(jí)高于+所以相當(dāng)于(a++)+a,a++在式中等于1,所以最終結(jié)果為2
typeof a+2; “number2“” typeof 額優(yōu)先級(jí)高于+所以typeof a+2相當(dāng)于(typeof a)+2,typeof a為number,所以算術(shù)相當(dāng)于number+2的字符串拼接
十一.以下代碼的輸出結(jié)果是? 為什么
var a = 1;
var b = 3;
console.log( a+++b );
輸出結(jié)果為4,因?yàn)槔ㄌ?hào)優(yōu)先級(jí)是最高的,所以先計(jì)算a+++b,而++的優(yōu)先級(jí)大于+號(hào)所以為(a++)+b所得值為4
十二. 遍歷數(shù)組,把數(shù)組里的打印數(shù)組每一項(xiàng)的平方
var arr = [3,4,5]
for(var i=0;i<arr.length;i++){
console.log(arr[i]*arr[i])
}
十三.遍歷 JSON, 打印里面的值
var obj = {
name: 'hunger',
sex: 'male',
age: 28
}
for(var key in obj){
console(obj[key])
}
十四.. 以下代碼輸出結(jié)果是? 為什么 (選做題目)
var a = 1, b = 2, c = 3;
var val = typeof a + b || c >0
console.log(val)
結(jié)果為number2,根據(jù)運(yùn)算符優(yōu)先級(jí),typeof的優(yōu)先級(jí)最高,+和>次之,最后是||,所以var val = number+2 || c > 0,因?yàn)閨|號(hào)中有一個(gè)命題為真,則整個(gè)命題就是true,所以如果第一個(gè)命題是真,就不會(huì)去計(jì)算第二個(gè)命題,所以number+2結(jié)果是number2為真,所以就不去計(jì)算后面的c>0,所以輸出number2
var d = 5;
var data = d ==5 && console.log('bb')
console.log(data)
輸出結(jié)果為bb,data為underfine,兩個(gè)命題都正確,返回后面的命題bb
var data2 = d = 0 || console.log('haha')
console.log(data2)
輸出結(jié)果為haha,因?yàn)榈谝粋€(gè)命題為false所以返回第二個(gè)正確的命題haha
var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x)
輸出結(jié)果為2,!!"Hello"為1,!"world"為0, !!"from here!!"為1,(0,1)返回后面的1,所以1+1=2