JavaScript 定義了幾種數(shù)據(jù)類型? 哪些是原始類型?哪些是復(fù)雜類型?原始類型和復(fù)雜類型的區(qū)別是什么?
- 數(shù)值(number):整數(shù)和小數(shù)(比如1和3.14)
- 字符串(string):字符組成的文本(比如"Hello World")
- 布爾值(boolean):true(真)和false(假)兩個特定值
- undefined:表示“未定義”或不存在,即此處目前沒有任何值
- null:表示空缺摊溶,即此處應(yīng)該有一個值莫换,但目前為空
- 對象(object):各種值組成的集合
數(shù)值、字符串拉岁、布爾值稱為原始類型(primitive type)的值,即它們是最基本的數(shù)據(jù)類型惫企,不能再細分了陵叽。
將對象稱為復(fù)雜類型(complex type)的值,因為一個對象往往是多個原始類型的值的合成沪么,可以看作是一個存放各種值的容器锌半。
typeof和instanceof的作用和區(qū)別?
- typeof 是一個一元運算,放在一個運算數(shù)之前刊殉,運算數(shù)可以是任意類型。
它返回值是一個字符串逸月,該字符串說明運算數(shù)的類型遍膜。typeof 一般只能返回如下幾個結(jié)果:
number,boolean,string,function,object,undefined。我們可以使用 typeof 來獲取一個變量是否存在恩尾,如 if(typeof a!="undefined"){alert("ok")}挽懦,而不要去使用 if(a) 因為如果 a 不存在(未聲明)則會出錯,對于 Array,Null 等特殊對象使用 typeof 一律返回 object信柿,這正是 typeof 的局限性渔嚷。 - instanceof 用于判斷一個變量是否某個對象的實例,如 var a=new Array();alert(a instanceof Array);
會返回 true形病,同時 alert(a instanceof Object) 也會返回 true;這是因為 Array 是 object
的子類窒朋。再如:function test(){};var a=new test();alert(a instanceof test) 會返回。
如何判斷一個變量是否是數(shù)字侥猩、字符串欺劳、布爾、函數(shù)?
typeof 1 === 'number' 判斷是否為數(shù)字
typeof '1' === 'string' 判斷是否為字符串
typeof true === 'boolean' 判斷是否為布爾值
typeof f === 'function' 判斷是否為函數(shù)
NaN是什么? 有什么特別之處?
NaN的含義是Not a Number糊秆,表示非數(shù)字,NaN和包括自己的任何值都不相等。NaN == NaN; //false
NaN != NaN; //true
如何把非數(shù)值轉(zhuǎn)化為數(shù)值?
- 強制類型轉(zhuǎn)換 Number():把給定的值轉(zhuǎn)換成數(shù)字(可以是整數(shù)或浮點數(shù))
- parseInt():把值轉(zhuǎn)換成整數(shù)款违,只有對String類型調(diào)用這些方法群凶,這兩個函數(shù)才能正確運行请梢。對其他類型返回的都是NaN(Not a Number)。
- parseFloat():把值轉(zhuǎn)換成浮點數(shù)毅弧,只有對String類型調(diào)用這些方法形真,這兩個函數(shù)才能正確運行。對其他類型返回的都是NaN(Not a Number)咆霜。
==與===有什么區(qū)別蛾坯?
- 對于string,number等基礎(chǔ)類型,==和===是有區(qū)別的
- 不同類型間比較救军,==之比較“轉(zhuǎn)化成同一類型后的值”看“值”是否相等倘零,===如果類型不同,其結(jié)果就是不等
- 同類型比較拷泽,直接進行“值”比較袖瞻,兩者結(jié)果一樣
- 對于Array,Object等高級類型聋迎,==和===是沒有區(qū)別的
- 進行“指針地址”比較
- 基礎(chǔ)類型與高級類型,==和===是有區(qū)別的
- 對于==庭再,將高級轉(zhuǎn)化為基礎(chǔ)類型,進行“值”比較
- 因為類型不同缝彬,=== 結(jié)果為false
break與continue有什么區(qū)別?
- break 用于強制退出循環(huán)體哺眯,執(zhí)行循環(huán)后面的語句
- continue 用于退出本次循環(huán)奶卓,執(zhí)行下次循環(huán)
void 0 和 undefined在使用場景上有什么區(qū)別?
- undefined是一個全局屬性撼玄,表示未定義或定義了沒有賦值掌猛。
- void 是個一元運算符,其的作用是執(zhí)行一個表達式(無論什么參數(shù))废膘,然后返回 undefined慕蔚。void 0 的值始終是undefined孔飒,而undefined的值隨著賦值不一定是undefined,也可能是別的值(人為修改的情況)桂对。使用場景如下:
if(a === void 0)
----- 判斷a的值是否為undefined
以下代碼的輸出結(jié)果是?為什么?
console.log(1+1)
輸出為:數(shù)字 2 ------ 純數(shù)字相加為數(shù)字相加
console.log("2"+"4")
輸出為:字符串 24 ------ 字符串相加拼接為字符串
console.log(2+"4")
輸出為:字符串 24 ------ 數(shù)字與字符串相加拼接為字符串
console.log(+"4")
輸出為數(shù)字 4 ------ 只有一個字符串參數(shù)的時候會嘗試將其轉(zhuǎn)換為數(shù)字
以下代碼的輸出結(jié)果是?
var a = 1;
a+++a; // ++比+優(yōu)先級高蕉斜,先a++狮崩,此時a的值為2睦柴,a++后的值仍然為1,1+2 = 3
typeof a+2; // typeof優(yōu)先級高于+號侣诵,所以先 typeof a 值為number再加2杜顺。拼接成為字符串number2。
以下代碼的輸出結(jié)果是? 為什么
var a = 1;
var b = 3;
console.log( a+++b ); //a+++b相當(dāng)于(a++)+b, a++ 先運算再賦值尖奔,也就是當(dāng)前的a++還是1提茁,那么1+3=4
遍歷數(shù)組馁菜,把數(shù)組里的打印數(shù)組每一項的平方
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(o in obj){
console.log(obj[o]);
}