JavaScript定義了幾種數(shù)據(jù)類型?哪些是原始類型?哪些是復(fù)雜類型?原始類型和復(fù)雜類型的區(qū)別?
數(shù)據(jù)類型:
- 數(shù)值,number
- 字符串,string
- 布爾值,boolean,true or false
- 對象,object
- undefined,未定義,表示沒有值
- null,空缺,表示應(yīng)該有值,但為空
原始類型:數(shù)值,字符串,布爾值
復(fù)雜類型:對象
區(qū)別
原始類型是最基本的數(shù)據(jù)類型,不能再細分了,而復(fù)雜類型是若干個原始類型組合而成的。
typeof和instenceof的作用和區(qū)別?
作用:確定一個值的數(shù)據(jù)類型。
區(qū)別:
對于用typeof判斷數(shù)據(jù)類型的時候,對于任何對象類型都會返回object,遇到函數(shù)會返回function。
instenseof是用于判斷一個對象是不是另一個對象的實例。
如何判斷一個變量是否是數(shù)字,字符串,布爾值,函數(shù)。
直接用typeof判斷,例:
var a = 1
var b = '1'
var c = true
function f(){}
typeof a //number
typeof b //string
typeof c //boolean
typeof f //function
NaN是什么?有什么特別之處?
NaN,not a number,表示不是數(shù)字的數(shù)字。
NaN !== NaN
NaN與任何數(shù)的運算結(jié)果都為NaN
如何把非數(shù)值轉(zhuǎn)換為數(shù)值?
使用Number();parseInt();parseFloat()
==和===有什么區(qū)別?
==,相等運算符,在比較兩個值的時候,會進行類型轉(zhuǎn)換,然后在進行比較,所以會出現(xiàn):
1 == "1" //true
1 == true // true
'' == false //true
===,嚴(yán)格相等運算符,不會進行類型轉(zhuǎn)換,類型數(shù)值都相等才會返回true。
break 和 continue 有什么區(qū)別?
break,中斷,在循環(huán)中用于中斷循環(huán)
continue,跳過,在循環(huán)中,跳過當(dāng)前結(jié)果,繼續(xù)循環(huán)
void 0 和undefined在使用場景上有什么區(qū)別?
void,運算符,執(zhí)行一個表達式,返回undefined
undefined,用于存放JavaScript和undefined的值,表示值為不存在
void 0一定會返回一個undefined,而undefined可能會被賦值,而不為undefined。
以下代碼輸出的結(jié)果是?為什么?
console.log(1+1);
console.log("2"+"4");
console.log(2+"4");
console.log(+"4");
2 直接數(shù)字的數(shù)學(xué)運算
"24" 字符串的拼接
"24" 有字符串時,加號會把數(shù)字轉(zhuǎn)換成字符串,然后拼接
4 單一字符串時,加號會把字符串"4"轉(zhuǎn)換為數(shù)字4
以下輸出結(jié)果是?
var a = 1;
a+++a;
typeof a+2;
結(jié)果:3;"number2"
解釋:a++在運算過后自增1 ,所以a++為1,之后a為2,1+2=3;
typeof的優(yōu)先級比“+”高,先算typeof a ,得到"number",再運算加法。
以下代碼輸出的結(jié)果是?為什么?
var a = 1;
var b = 3;
console.log(a+++b);
結(jié)果:4
解釋:a++在計算之后才自增1,計算時仍為1。
遍歷數(shù)組,把數(shù)組里的打印數(shù)組每一項的平方
var arr = [3,4,5]
答:
for (i = 0;i<arr.length;i++){console.log(arr[i]*arr[i])}
遍歷JSON,打印里面的值
var obj = {
name: 'hunger',
sex: 'male',
age: 28
}
答:
for(var key in obj){console.log(obj[key])}
以下代碼輸出結(jié)果是什么?為什么?
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)
運算符優(yōu)先級(降序)
! typeof + == && || = ,
"number2",邏輯符運算符的“短路”特性,對于||,左邊為真,則后面不計算,返回左邊的值,字符串"number2"
'bb',對于&&,左邊為真,計算后面,并返回后面的值。
'haha',對于||,左邊為假,計算后面,并返回后面的值。
1,","忽略第一個操作數(shù),返回第二個操作數(shù)true,!"hello"為false,對于加號+,會將布爾值轉(zhuǎn)換成數(shù)字,true為1,false為0,0+1=1