JavaScript 定義了幾種數(shù)據(jù)類型? 哪些是原始類型?哪些是復(fù)雜類型?原始類型和復(fù)雜類型的區(qū)別是什么?
共有6種數(shù)據(jù)類型
原始數(shù)據(jù)類型:有number,string,null,undefined,boolean。
復(fù)雜類型:有object,array,function
區(qū)別:原始數(shù)據(jù)類型保存在棧內(nèi)存中,保存的是原始數(shù)據(jù)的數(shù)據(jù)段,復(fù)雜數(shù)據(jù)類型保存在堆內(nèi)存中,保存在堆內(nèi)存中,存的是“地址坐標(biāo)”,因?yàn)閮烧卟煌谋4娣绞?,在?shù)據(jù)復(fù)制上有所差異。
typeof和instanceof的作用和區(qū)別?
基礎(chǔ)類型用typeof來檢測數(shù)據(jù)類型,返回具體是那個(gè)原始數(shù)據(jù)類型
復(fù)雜類型的用instanceof來檢測,返回一個(gè)布爾值,判斷是否是某個(gè)類的實(shí)例。
如何判斷一個(gè)變量是否是數(shù)字、字符串、布爾、函數(shù)
function testData(data){
if(typeof data === "number" ||
typeof data === "string" ||
typeof data === "boolean" ||
typeof data === "function") {
return typeof data
}
}
NaN是什么? 有什么特別之處?
NaN:not a number,表明數(shù)據(jù)類型不是數(shù)字,常見于要把字符串轉(zhuǎn)換為數(shù)字時(shí),比如parseInt('a')得到的結(jié)果是NaN
特別之處在于NaN != NaN,自己和自己不相等
如何把非數(shù)值轉(zhuǎn)化為數(shù)值?
Number()
parseInt()
parseFloat()
==與===有什么區(qū)別
===嚴(yán)格意義上的相等,不光值要相等,數(shù)據(jù)類型也要一樣。
==普通相等,確保值相等。
比較的簡單規(guī)則:
如果兩個(gè)值類型相同,則執(zhí)行嚴(yán)格相等的運(yùn)算
如果兩個(gè)值的類型不同
如果一個(gè)是null,一個(gè)是undefined,那么相等
如果一個(gè)是數(shù)字,一個(gè)是字符串,先將字符串轉(zhuǎn)為數(shù)字,然后比較
如果一個(gè)值是true/false則將其轉(zhuǎn)為1/0比較
如果一個(gè)值是對象,一個(gè)是數(shù)字或字符串,則嘗試使用valueOf和toString轉(zhuǎn)換后比較
break與continue有什么區(qū)別
break 用于強(qiáng)制退出循環(huán)體,執(zhí)行循環(huán)體后面的語句
continue 用于退出本次循環(huán),執(zhí)行下次循環(huán)
void 0 和 undefined在使用場景上有什么區(qū)別
void 0 的值永遠(yuǎn)都是undefined,而undefined在某些時(shí)候可以被賦值,如果需要判斷一個(gè)變量的值是否為undefined,用void 0 比較有保證
以下代碼的輸出結(jié)果是?為什么?
console.log(1+1); // 2 普通數(shù)字相加
console.log("2"+"4"); //24 字符串拼接
console.log(2+"4"); // 24 會(huì)把數(shù)字轉(zhuǎn)化成字符串
console.log(+"4");// 4 只有一個(gè)值 把字符串轉(zhuǎn)化成了數(shù)字
以下代碼的輸出結(jié)果是?為什么?
//運(yùn)算符優(yōu)先級(jí)的問題
var a = 1;
a+++a; //瀏覽器是這樣讀碼的 (a++)+a 相當(dāng)于(1++)+1 最后就是2了
typeof a+2; 最后是number2 瀏覽器 是這樣讀碼的( typeof a)+2 = “number”+2 = “number2”
備忘“a++的時(shí)候,a值暫時(shí)不變。++a的時(shí)候a的值馬上就會(huì)變化”
以下代碼的輸出結(jié)果是? 為什么
var a = 1;
var b = 3;
console.log( a+++b );//4 原因 瀏覽器讀碼 (a++)+b (1++)+3=4
遍歷數(shù)組,把數(shù)組里的打印數(shù)組每一項(xiàng)的平方
var arr = [3,4,5]
function square(arr){
for(var i = 0;i<arr.length;i++){
var result = arr[i]*arr[i]
console.log(result)
}
}
square(arr)
遍歷 JSON, 打印里面的值
var obj = {
name: 'hunger',
sex: 'male',
age: 28
}
//淺拷貝方法解決
var obj = {
name: 'hunger',
sex: 'male',
age: 28
}
function shallowCopy(sourceObj){
var targetObj = []
for(var key in sourceObj){
targetObj[key] = sourceObj[key]
}
return targetObj
}
shallowCopy(obj)