1.JavaScript 定義了幾種數(shù)據(jù)類型? 哪些是原始類型?哪些是復(fù)雜類型?原始類型和復(fù)雜類型的區(qū)別是什么?
六種數(shù)據(jù)類型锦溪。
- 原始類型:Boolean,Number,String,Symbol(ES6新數(shù)據(jù)類型)
- 復(fù)雜類型:Object
- 特殊值:Undefined,Null
原始類型:它們是最基本的數(shù)據(jù)類型,不能再細(xì)分了语盈。
復(fù)雜類型:一個(gè)對(duì)象往往是多個(gè)原始類型的值的合成迁沫,可以看作是一個(gè)存放各種值的容器鳍咱。
2.typeof和instanceof的作用和區(qū)別?
- typeof
用于檢測(cè)給定變量的數(shù)據(jù)類型嘴秸。
可以返回以下字符串
undefined, boolean,string,number,object,function. - instanceof
用于檢測(cè)某個(gè)對(duì)象是什么類型的對(duì)象伺帘。
只能返回布爾值
用法:result = variable instanceof constructor
- 區(qū)別
typeof只能用于檢測(cè)基本類型的值凑队。檢測(cè)復(fù)雜類型值時(shí)會(huì)返回object则果。
instanceof只能用于檢測(cè)復(fù)雜類型的值,檢測(cè)基本類型的值時(shí)始終返回false漩氨。
3.如何判斷一個(gè)變量是否是數(shù)字西壮、字符串、布爾叫惊、函數(shù)
使用typeof操作符判斷款青。
是數(shù)字則返回number,是字符串返回string霍狰,是布爾值返回boolean抡草,是函數(shù)返回function。
4.NaN是什么? 有什么特別之處?
NaN蔗坯,即非數(shù)值(Not a Number)是一個(gè)特殊的數(shù)值康震,這個(gè)數(shù)值用語表示一個(gè)本來要返回?cái)?shù)值的操作數(shù)未返回?cái)?shù)值的情況。(這樣就不會(huì)報(bào)錯(cuò)了)任何數(shù)值除以非數(shù)值會(huì)返回NaN宾濒。
任何涉及NaN的計(jì)算都會(huì)返回NaN腿短,NaN與任何值都不相等,包括NaN本身。
5.如何把非數(shù)值轉(zhuǎn)化為數(shù)值?
- Number()
適用于任何數(shù)據(jù)類型 - 使用一元加操作符“+”
效果與Number()相同 - parseInt()
適用于將字符串轉(zhuǎn)化為整數(shù)數(shù)值
可以制定參數(shù)表示輸出數(shù)值的進(jìn)制
輸入非字符串時(shí)返回NaN - parseFloat()
可輸出整數(shù)與浮點(diǎn)數(shù)答姥,但只支持十進(jìn)制
只認(rèn)字符串中第一個(gè)小數(shù)點(diǎn)
輸入非字符串時(shí)返回NaN
6.==與===有什么區(qū)別
==相等操作符,會(huì)先轉(zhuǎn)換值類型再進(jìn)行比較谚咬。===全等操作符鹦付,值類型不經(jīng)轉(zhuǎn)換就直接進(jìn)行比較。
7.break與continue有什么區(qū)別
break會(huì)跳出當(dāng)前循環(huán)不再進(jìn)行循環(huán)操作择卦,continue會(huì)結(jié)束本次循環(huán)敲长,然后馬上進(jìn)行下一次循環(huán)。
8.void 0 和 undefined在使用場(chǎng)景上有什么區(qū)別秉继。
有些情況下undefined可以被賦值祈噪,從而讓人不清楚當(dāng)前的undefined還是不是undefined。
通過void運(yùn)算符尚辑,可以精確的獲得undefined值辑鲤。void 后跟什么值都會(huì)返回undefined。
9.以下代碼的輸出結(jié)果是?為什么?
console.log(1+1);
console.log("2"+"4");
console.log(2+"4");
console.log(+"4");
console.log(1+1);
輸出2杠茬,先計(jì)算括號(hào)內(nèi)1+1月褥,再輸出結(jié)果2。
console.log("2"+"4");
輸出24瓢喉,兩個(gè)字符串先拼接后輸出結(jié)果宁赤。
console.log(2+"4");
輸出24,數(shù)字與字符串相加時(shí)數(shù)值會(huì)轉(zhuǎn)換為字符串進(jìn)行拼接栓票。
console.log(+"4");
輸出4决左,一元加操作符將字符串4轉(zhuǎn)換為數(shù)值輸出。
10.以下代碼的輸出結(jié)果是?
var a = 1;
a+++a;
typeof a+2;
輸出字符串number2
"++"優(yōu)先級(jí)比"+"高走贪,故a+++a相當(dāng)于(a++)+a佛猛。
計(jì)算后變量a自增,a=2厉斟。
typeof優(yōu)先級(jí)比+高挚躯,故先計(jì)算typeof a,輸出number擦秽。再與數(shù)值2拼接码荔,得到number2。
11.以下代碼的輸出結(jié)果是? 為什么
var a = 1;
var b = 3;
console.log( a+++b );
輸出4感挥。
a+++b相當(dāng)于(a++)+b缩搅。計(jì)算后得4。同時(shí)a=2触幼。
12.遍歷數(shù)組硼瓣,把數(shù)組里的打印數(shù)組每一項(xiàng)的平方
var arr = [3,4,5]
var arr = [3,4,5];
for(var i=0;i<arr.length;i++){
console.log(arr[i]*arr[i]);
}
13.遍歷 JSON, 打印里面的值
var obj = {
name: 'hunger',
sex: 'male',
age: 28
}
var obj = {
name: 'hunger',
sex: 'male',
age: 28
};
for(var a in obj){
console.log(obj[a]);
}
14.以下代碼輸出結(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)
var val = typeof a + b || c >0
先算typeof a,得number,再算number + b堂鲤,得字符串number2亿傅。
c>0得布爾值true。
“number2” || true由于“number2”字符串轉(zhuǎn)換為布爾值為true瘟栖,故不考慮右邊項(xiàng)直接輸出左邊項(xiàng)“number2”葵擎。
所以console.log(val) 輸出“number2”。
var data = d ==5 && console.log('bb')
==優(yōu)先級(jí)大于&&半哟。
(d==5)&& console.log('bb')
true && console.log('bb')
且語句左邊項(xiàng)為true故執(zhí)行右邊項(xiàng)酬滤,先輸出字符串bb,
又由于且語句整體返回undefined寓涨。故data=undefined盯串。再輸出undefined。
var data2 = d = 0 || console.log('haha')
0轉(zhuǎn)換為布爾值是false戒良。
或語句第一項(xiàng)為false時(shí)會(huì)執(zhí)行第二項(xiàng)体捏,故先輸出字符串haha。
或語句整體返回undefined蔬墩,并一路賦值給變量data2译打,故再輸出undefined。
var x = !!"Hello" + (!"world", !!"from here!!");
!優(yōu)先級(jí)在+之前拇颅。
奏司,優(yōu)先級(jí)最低,兩個(gè)值返回后一個(gè)值樟插。
true + ( false , true)
true + true
相加時(shí)布爾值true轉(zhuǎn)換為數(shù)值1韵洋,故上式得2。
2賦值給x黄锤。
故輸出2搪缨。