數(shù)據(jù)類型運算符流程控制語句
JavaScript 定義了幾種數(shù)據(jù)類型? 哪些是原始類型?哪些是復(fù)雜類型?原始類型和復(fù)雜類型的區(qū)別是什么?
- JavaScript 定義6種數(shù)據(jù)類型
- 數(shù)值(number):整數(shù)和小數(shù)(比如1和3.14)
- 字符串(string):字符組成的文本(比如"Hello World")
- 布爾值(boolean):true(真)和false(假)兩個特定值
- undefined:表示“未定義”或不存在阱穗,即此處目前沒有任何值
- null:表示空缺桩撮,即此處應(yīng)該有一個值,但目前為空
- 對象(object):各種值組成的集合
- 原始類型:數(shù)值(number)欺抗、字符串(string)池户、布爾值(boolean)
- 復(fù)雜類型:對象(object)
- 至于undefined和null黎比,一般將它們看成兩個特殊值
- 原始類型和復(fù)雜類型的區(qū)別:
- 基本類型變量存的是值斩郎,復(fù)雜類型的變量存的是內(nèi)存地址
- 基本類型在賦值的時候拷貝值第步,復(fù)雜類型在賦值的時候只拷貝地址疮装,不拷貝值
typeof和instanceof的作用和區(qū)別?
- typeof可以檢測給定變量的數(shù)據(jù)類型,typeof一般只能返回如下幾個結(jié)果: number ,boolean ,string, function, object, undefined,是有局限性,對于Array粘都、Null等特殊對象使用typeof一律返回object;此外我們可以使用typeof來獲取一個變量是否存在廓推,如if(typeof a!="undefined"){},而不用去使用if(a)因為如果a 不存在(未聲明)就會出錯
- instanceof用于判斷一個變量是否某個對象的實例翩隧,運算符返回一個布爾值樊展。instanceof只能用來判斷對象和函數(shù),不能用來判斷字符串和數(shù)字等
如何判斷一個變量是否是數(shù)字、字符串专缠、布爾雷酪、函數(shù)

判斷數(shù)據(jù)類型
NaN是什么? 有什么特別之處?
- NaN含義是Not a Number,即非數(shù)值涝婉,是一個特殊的數(shù)值哥力,用于表示一個本來要返回數(shù)值的操作數(shù)未返回數(shù)值的情況
- 特別之處:
- 任何涉及NaN的操作(例如NaN+10)都會返回NaN
- NaN和任何值都不相等,包括NaN本身
如何把非數(shù)值轉(zhuǎn)化為數(shù)值?
- number()函數(shù)轉(zhuǎn)化
- paseInt()轉(zhuǎn)化墩弯;轉(zhuǎn)換規(guī)律:
- 忽略字符串前面的空白字符吩跋,找到第一個非空白字符
- 如果第一個字符不是"-"或者數(shù)字則返回NaN
- 如果是,繼續(xù)解析渔工,直到非數(shù)值模式為止
- 0開頭會當(dāng)做八進制锌钮,0X開頭會當(dāng)做十六進制,可以指定第二個參數(shù)指定基數(shù)
parseInt('101' ,2)
,其中2就是二進制
==與===有什么區(qū)別
- == equality 相等涨缚,"== "兩邊值類型不同的時候轧粟,要先進行類型轉(zhuǎn)換,再比較
例:
5 == '5' //使用相等比較運算符的時候脓魏,會將string '5'兰吟,自動轉(zhuǎn)換成number 5,進行比較茂翔,從而可以滿足比較條件混蔼,因為 5 == 5
- === identity 嚴(yán)格相等,不做類型轉(zhuǎn)換,類型不同的一定不等
例:
5 === '5' //使用 === 嚴(yán)格相等 的比較運算符時珊燎, 則不會自動做轉(zhuǎn)換處理惭嚣,顯然 number 5 ,是不會和 string '5',相等的悔政。因此晚吞,返回boolean的 false值
break與continue有什么區(qū)別
- break 的作用是跳出當(dāng)前循環(huán)體語句
- continue 的作用是跳出當(dāng)前次數(shù)循環(huán)進行下一次循環(huán)
void 0 和 undefined在使用場景上有什么區(qū)別
- void操作符會執(zhí)行后面的表達式并返回undefined。由于undefined在函數(shù)中可以賦值谋国,所以進行判斷某一變量是否未定義時常使用void 0
以下代碼的輸出結(jié)果是?為什么?
console.log(1+1); //輸出為"2" 槽地,對兩個數(shù)字做加法運算
console.log("2"+"4"); // 輸出為"24" ,對兩個字符串進行拼接運算
console.log(2+"4"); // 輸出為"24",有一個為字符串芦瘾,會將數(shù)字轉(zhuǎn)化為字符串然后做字符串拼接運算
console.log(+"4"); //輸出為"4"捌蚊,在只有一個字符串時會強制轉(zhuǎn)化為數(shù)字
以下代碼的輸出結(jié)果是?
var a = 1;
a+++a; //輸出為 "3" ;先a++得到結(jié)果為1近弟,[可看為(a++)+a的運算]
typeof a+2; //輸出為"number2" 缅糟;typeof a的運算優(yōu)先級高于"+",所以typeof a得到number,"number+2" 運算則變?yōu)樽址唇舆\算
以下代碼的輸出結(jié)果是? 為什么
var a = 1; //
var b = 3; //
console.log( a+++b ); // 輸出為"4" 祷愉;等同于(a++)+b,即就是1+3
遍歷數(shù)組窗宦,把數(shù)組里的打印數(shù)組每一項的平方
var arr = [3,4,5]

打印數(shù)組每一項的平方
遍歷 JSON, 打印里面的值
var obj = {
name: 'hunger',
sex: 'male',
age: 28
}

打印JSON的值
以下代碼輸出結(jié)果是? 為什么
var a = 1, b = 2, c = 3;
var val = typeof a + b || c >0
console.log(val) //typeof a優(yōu)先級最高赦颇,先計算typeof a得到number,之后在進行字符串拼接運算得到number2
var d = 5;
var data = d ==5 && console.log('bb')
console.log(data) //先運算console.log('bb')得到bb赴涵,然后在運算 d ==5 && 沐扳,console.log返回值為undefined,所以輸出為undefined
var data2 = d = 0 || console.log('haha')
console.log(data2) //先運算console.log('haha')輸出haha句占,然后進行“||”,因為0的布爾值是false躯嫉,console.log('haha')返回值為undefined纱烘,最后data2的值為undefined
var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x) //輸出結(jié)果是2。!!"Hello"的結(jié)果為true祈餐,(!"world", !!"from here!!") 逗號運算符用于對兩個表達式求值擂啥,并返回后一個表達式的值,!!"from here!!"的結(jié)果為true帆阳,因此(!"world", !!"from here!!")返回true哺壶,所以var x = true + true。當(dāng)數(shù)字和布爾值或布爾值與布爾值進行+蜒谤、-山宾、*、/操作時鳍徽,會將布爾值轉(zhuǎn)換為數(shù)字资锰,true轉(zhuǎn)換為1,false轉(zhuǎn)換為0阶祭。所以var x = true + true轉(zhuǎn)換為var x = 1 + 1,因此最終結(jié)果為2

輸出結(jié)果