1.JavaScript 定義了幾種數據類型? 哪些是原始類型?哪些是復雜類型?原始類型和復雜類型的區別是什么?
- 定義了數字、字符串、布爾值(boolean value)、undefined、null、對象等六種數據類型。
- 原始類型有數值、字符串、布爾值
- 復雜類型只有對象,對象的類型又可以分為下列種:
1.狹義的對象(object)
2.數組(array)
3.函數(function())
4.正則表達式(regexp) - undefined、null是特殊的數據類型
- 原始類型和復雜類型的區別:
1.原始類型是最基礎的數據類型,無法再細分,復雜類型是由原始類型的數據組合而來。
2.typeof和instanceof的作用和區別?
1.typeof的作用是返回右邊值的數據類型,比如說typeof 123
,返回一個number,但它是針對基礎的數據類型,它只能返回數值、字符串、布爾值、undefined、對象這五種類型,其中null也是返回對象。
2.instanceof的作用用來檢測左邊的值是否是右邊的構造函數的一個實例,比如[ ] instanceof Array
,返回值為true;
3.如何判斷一個變量是否是數字、字符串、布爾、函數
可以使用typeof來判斷,比如
var a = function () {
};
console.log(typeof a);
console輸出function 。
4.NaN是什么? 有什么特別之處?
- NaN是數字數據類型里面之中特殊的一種數字,它是由其他非數字類型數據強制轉化為數字而來。比如:
var a = "abc";
var b = Number(a);
console.log(b);
console輸出NaN,因為變量a是一個字符串,被強行轉化為數字的后果就是變成NaN。
- 它的特別之處在于它自身與自身不想等,因為它本身是一個不確定的值,NaN可以由各種各樣的非數字類型的數據轉化而來,所以它不等于自身也不是很難理解。例:
if(NaN === NaN){
console.log("我跟自身相等");
}else{
console.log("我跟自身不相等");
}
console端口輸出我跟自身不相等。
5.如何把非數值轉化為數值?
有三種方法:
1.強制轉換,Number(a)
2.轉化成整數,parseInt(a)
3.轉化成浮點數,parseFloat(a)
6.==與===有什么區別
“==”是數值相等,而“===”不僅要在數值上相等,還要在數據類型上相等,是完全的相等。而不是前者的近似相等。
7.break與continue有什么區別
break是中止循環體,continue是中斷當前這次的循環,然后接著繼續執行下一次循環。例如:
for(var i=0;i<10;i++){
if(i===5){
continue;
}
if(i===8){
break;
}
console(i);
}
當i等于5的時候,中止當前循環,然后繼續for循環。當i等于8的時候,直接中斷for循環。
8.void 0 和 undefined在使用場景上有什么區別
- void 0返回一個undefined,通常用來獲取undefined,后面的數字0也可以是別的數字,返回的都是undefined,我也不知道為什么一定要用0,也許大家覺得方便一些。
- undefined不是ES5中的保留字,所以是可以被修改的,所以通常我們用void 0來獲取undefined,而不是直接使用undefined。
9.以下代碼的輸出結果是?為什么?
輸出結果如上圖,運算符 " + " 總是傾向于把它左右的值都轉化為數字,或者作為字符串的連接字符。
第一個數字相加之和,沒什么好說的。第二個字符串連接,結果為 " 24 "。第三個左邊是數字,右邊是字符串,數字被轉化成字符串,然后進行字符串的連接。第四個左邊為空,右邊是字符串,字符串被 " + " 轉化為數字
10.以下代碼的輸出結果是?
var a = 1;
a+++a;
typeof a+2;
- 因為+的運算符優先級較低,所以a+++a可以看成(a++)+a,先計算a++然后再計算a,(a++)+a -> 1+2 -> 3。
- a的數據類型是number,因為+的運算符優先級較低,所以我們先計算typeof a,得到number,注意這里的number只是表明a的數據類型是number,但是number本身是個字符串,所以"number"+2等于“number2”。
11.以下代碼的輸出結果是? 為什么
var a = 1;
var b = 3;
console.log( a+++b );
因為+的運算符優先級較低,所以表達式實際上是(a++)+b,然后就是a被賦值為1,之后其他的a都加1,變成2,但是只有1個a,所以就變成了1+3等于4。輸出結果為4。
12.遍歷數組,把數組里的打印數組每一項的平方
13.遍歷 JSON, 打印里面的值
14.以下代碼輸出結果是? 為什么 (選做題目)
var a = 1, b = 2, c = 3;
var val = typeof a + b || c >0
console.log(val)
var d = 5;
var data = d ==5 && console.log('bb')
console.log(data)
var data2 = d = 0 || console.log('haha')
console.log(data2)
var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x)
1.邏輯或的運算規則是如果左側的值為true,那么右側的值就不計算了,再因為"typeof"優先級高于"+",所以val被賦值為"number2"。
2.邏輯且的運算規則是如果左側的值為true,那么就不計算左側的值,而是直接返回右側的值,輸出"bb",由于左側的值不計算,所以console.log(data)輸出undefined。
3.邏輯或的左側是false,那么就不計算左側的值,直接返回右側的值,所以輸出"haha",由于左側的值不計算,所以console.log(data2)輸出undefined。
4.邏輯非可以將數據的類型轉化為boolean,所以!!"Hello"為true,右側也是一個字符串取boolean,非空字符串為true,所以true + true等于2,x被賦值為2。console.log(x)輸出為2。