1.JavaScript 定義了幾種數(shù)據(jù)類型? 哪些是原始類型?哪些是復(fù)雜類型?原始類型和復(fù)雜類型的區(qū)別是什么?
- JavaScript 定義了六種數(shù)據(jù)類型疤苹。
原始類型:數(shù)值、布爾值蚯妇、字符串岖常;
復(fù)雜類型:對(duì)象歧寺;
特殊值:undefined
翅雏、null
。 - 區(qū)別:原始類型是最基本的數(shù)據(jù)類型梳码,不能再細(xì)分隐圾;而復(fù)雜類型的一個(gè)對(duì)象往往是多個(gè)原始類型的值的合成,可以看作是一個(gè)存放各種值的容器边翁。
2.typeof
和instanceof
的作用和區(qū)別?
作用:判斷一個(gè)值的類型翎承。
區(qū)別:typeof
運(yùn)算符可以返回一個(gè)值的數(shù)據(jù)類型,如number
符匾、string
叨咖、boolean
;
instanceof
主要用來(lái)區(qū)分?jǐn)?shù)組和對(duì)象。
3.如何判斷一個(gè)變量是否是數(shù)字甸各、字符串垛贤、布爾、函數(shù)
用typeof
運(yùn)算符來(lái)判斷趣倾。
typeof 123 // "number"
typeof '123' // "string"
typeof false // "boolean"
function f() {}
typeof f
// "function"
4.NaN是什么? 有什么特別之處?
NaN聘惦,Not a Number,表示非數(shù)字儒恋。
特別之處善绎,NaN和任何值都不想等,包括自己诫尽。
5.如何把非數(shù)值轉(zhuǎn)化為數(shù)值?
Number()
parseInt()
parseFloat()
6.==與===有什么區(qū)別
“===”嚴(yán)格運(yùn)算符禀酱,“==”相等運(yùn)算符。
區(qū)別:它們的區(qū)別是相等運(yùn)算符(==)比較兩個(gè)值是否相等牧嫉,嚴(yán)格相等運(yùn)算符(===)比較它們是否為“同一個(gè)值”剂跟。如果兩個(gè)值不是同一類型,嚴(yán)格相等運(yùn)算符(===)直接返回false酣藻,而相等運(yùn)算符(==)會(huì)將它們轉(zhuǎn)化成同一個(gè)類型曹洽,再用嚴(yán)格相等運(yùn)算符進(jìn)行比較。
7.break
與continue
有什么區(qū)別
break
:用于強(qiáng)制退出循環(huán)體辽剧,執(zhí)行循環(huán)后面的語(yǔ)句送淆;
continue
:用于退出本次循環(huán),執(zhí)行下次循環(huán)抖仅。
8.void 0 和 undefined在使用場(chǎng)景上有什么區(qū)別
undefined 不能被重寫坊夫。但是在局部作用域中,還是可以被重寫的撤卢。
所以u(píng)ndefined現(xiàn)常用于全局環(huán)境。
void 運(yùn)算符通常只用于獲取 undefined 的原始值梧兼,一般使用 void(0)(等同于 void 0)放吩。在上述情況中,也可以使用全局變量undefined 來(lái)代替(假定其仍是默認(rèn)值)羽杰。
而 void 可以給任何給定的表達(dá)式求值渡紫,并返回 undefined,并且 void 不可被重寫,因此void 0是在局部作用域中替代undefined的最佳選擇考赛。
9.以下代碼的輸出結(jié)果是?為什么?
console.log(1+1); //2 兩個(gè)操作數(shù)都是數(shù)字惕澎,執(zhí)行加法運(yùn)算
console.log("2"+"4"); //"24" 兩個(gè)參數(shù)都是字符串,執(zhí)行字符串拼接
console.log(2+"4"); //"24" 其中一個(gè)參數(shù)為字符串颜骤,將另一個(gè)參數(shù)轉(zhuǎn)換成字符串做字符串拼接
console.log(+"4");//4 只有一個(gè)字符串參數(shù)會(huì)嘗試將其轉(zhuǎn)換為數(shù)字
10.以下代碼的輸出結(jié)果是?
var a = 1;
a+++a;
typeof a+2;
結(jié)果:
"number2" //a+++a>2 typeof 2>number
所以將2轉(zhuǎn)換成字符串與number做參數(shù)拼接
11. 以下代碼的輸出結(jié)果是? 為什么
var a = 1;
var b = 3;
console.log( a+++b );
結(jié)果:
4 //根據(jù)運(yùn)算符優(yōu)先級(jí)執(zhí)行a++ 然后與b相加得4
12. 遍歷數(shù)組唧喉,把數(shù)組里的打印數(shù)組每一項(xiàng)的平方
var arr = [3,4,5]
for(i=0;i<arr.length;i++){
console.log(Math.pow(arr[i],2));}
13.遍歷 JSON, 打印里面的值。
var obj = {
name: 'hunger',
sex: 'male',
age: 28
}
for (var 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 根據(jù)運(yùn)算符優(yōu)先級(jí)先得出typeof a為number,b||c>0為2
然后兩個(gè)參數(shù)拼接得出number2
var d = 5;
var data = d ==5 && console.log('bb')
console.log(data) //"bb" 根據(jù)運(yùn)算符優(yōu)先級(jí)得出d ==5 && console.log('bb')為bb
所以data = bb 所以結(jié)果為bb
var data2 = d = 0 || console.log('haha')
console.log(data2) //haha 根據(jù)運(yùn)算符優(yōu)先級(jí)得出0|| console.log('haha')八孝,
因?yàn)橹灰獆|前面為false董朝,則返回||后面的值,所以返回haha干跛,所以結(jié)果為haha
var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x)//2 空字符串為false 非空為true子姜,false=0,true=1楼入;所以var x=1+1=2