JavaScript的數(shù)據(jù)類型
- Number類型
- String類型
- Boolean類型
- Object類型
- Array數(shù)組
- Function函數(shù)
- Regexp正則表達式
- Null類型
- Undefined類型
- 原始類型(Number咪辱、String、Boolean)
最基礎的數(shù)據(jù)類型,不可再分割 - 復雜類型(Object)
一個對象里會存在多種基本數(shù)據(jù)類型杏糙,是一個容器 - 特殊值 (Undefined梧宫、Null)
typeof與instanceof的作用及區(qū)別
- typeof
作為檢測變量數(shù)據(jù)類型的一種操作符典鸡,可以返回一個值的數(shù)據(jù)類型澄成,如:number鲜棠、string暖哨、boolean赌朋、function等。我們可以利用其這一特性來檢測一個變量有沒有被聲明篇裁,但是不足的是對于復雜類型的數(shù)據(jù)類型只會返回object沛慢,所以為了區(qū)分復雜類型中的數(shù)據(jù)類型,我們可以使用instanceof - instanceof
由于上述的原因达布,我們可以通過instanceof檢測某個對象是否是一種對象的實例团甲。
如何判斷一個變量是否是數(shù)字、字符串黍聂、布爾躺苦、函數(shù)
自然是使用typeof啦,如:
var message = "hello world";
alert (typeof message); //"string"
NaN
NaN(Not a Number)是一個特殊的數(shù)值产还,這個數(shù)值用來表示一個本要返回數(shù)值的操作數(shù)未返回數(shù)值的情況匹厘。它有兩個非同尋常的特點,
- 任何涉及NaN的操作都會返回NaN脐区;
- NaN與任何值都不相等愈诚,包括它自身;
數(shù)值的轉換
這三個函數(shù)可以實現(xiàn)非數(shù)值轉換數(shù)值(Number() 、parseInt() 扰路、parseFloat())
- Number() 適用于所有數(shù)據(jù)類型
- parseInt()和parseFloat()適用于把字符串轉換成數(shù)值
全等和不全等
二者的區(qū)別除了在比較之前不裝換操作數(shù)之外尤溜,沒有其他區(qū)別,全等===在兩個操作數(shù)未轉換就相等的情況下返回true汗唱,不全等==在兩個操作數(shù)裝換后相等則返回true宫莱。由于相等和不相等操作符存在類型轉換的問題,為了保持代碼中數(shù)據(jù)類型的完整性哩罪,我們建議使用全等和不全等授霸。
break和continue的區(qū)別
- break 用于強制退出循環(huán)體,執(zhí)行循環(huán)后的語句
- continue 則是退出當次循環(huán)际插,執(zhí)行下次循環(huán)
void 0 和 undefined在使用場景上有什么區(qū)別
undefined 可以在局部作用域中被覆寫void 運算返回值始終都是 undefine
練習
-
以下代碼的輸出結果及原因
1
2 //簡單的數(shù)字相加
"24" //字符串拼接
"24" //數(shù)字轉換為字符串后拼接
4 //字符串變?yōu)閿?shù)字
- 以下代碼輸出結果
var a = 1;
a+++a; //a++=1,a+++a=3;
typeof a+2; //由于優(yōu)先級的原因typeof a="number",所以結果是"number2"
- 以下代碼的輸出結果及原因
var a = 1;
var b = 3;
console.log( a+++b ); //4,a++優(yōu)先級高的原因
- 遍歷數(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(i in obj){
console.log(obj[a]);
}
- 以下代碼輸出結果是? 為什么
var a = 1, b = 2, c = 3;
var val = typeof a + b || c >0
console.log(val) //"number2",根據(jù)優(yōu)先級得到"number2"||c>0,所以為“number2”
var d = 5;
var data = d ==5 && console.log('bb')
console.log(data) // bb, undefined true&&bb,所以為console.log(console.log('bb')),所以是undefined.
var data2 = d = 0 || console.log('haha')
console.log(data2) // haha,undefined,0||console.log('haha')得到haha,然后再賦值給d,再賦值給data2,于是console.log(data2)就是console.log(console.log('haha'))框弛,為undefined
var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x) //2, 原式相當于 var x = true + true;