- JavaScript 的數(shù)據(jù)類型
6種
number數(shù)值
string 字符串" "
boolean 布爾 true/false
underfined 未定義或不存在
null 有個值,為空
Object對象 多種值的集合(對象有:函數(shù) 數(shù)組 正則 對象)
Symbol (ECMAScript 6 新定義)
1.1 原始類型?復(fù)雜類型?
- 原始類型: number string bollean
基本數(shù)據(jù)類型,不能再細(xì)化了
- 復(fù)雜類型 : Object 對象
可以有多個原始類型組成,存放多種值的容器
- 其他 underfined 和 null 可以看成兩個特殊的值
1.2 原始類型和復(fù)雜類型的區(qū)別?
- 基本類型變量存的是值,復(fù)雜類型的變量存的是內(nèi)存地址。
- 基本類型在賦值的時候拷貝值,復(fù)雜類型在賦值的時候只拷貝地址,不拷貝值。
假設(shè)有如下 JS 代碼:
var a = 1.23
var b = 3.14

obj對象 復(fù)雜類型怎么存儲?看圖

- 檢查數(shù)據(jù)類型方法
typeof可以判斷 object number string underfined boolean,
array object function null 判斷不清晰,都為對象類型
所以typeof 一般多用于判斷基本類型
instanceof 可以判斷具體屬于哪一個數(shù)據(jù)類型,返回true false。
Object.prototype.toString 最好的一種方式,可以判斷一個變量的
具體類型
- 如何判斷一個變量是否是數(shù)字、字符串、布爾、函數(shù)
用typeof 判斷數(shù)據(jù)類型 是否是 數(shù)字 字符串 布爾 對象
然后用instanseof 判斷是否為函數(shù)
-
NaN是什么? 有什么特別之處?
not a number ,非數(shù)字,是number類型,但不表示任何一個有效數(shù)字
特別之處: NaN和任意值都不相等,包括自己。NaN == NaN // false ,不相等 NaN !== NaN ; //true 如何把非數(shù)值轉(zhuǎn)化為數(shù)值?
三個函數(shù): Number() parseInt() parseFloat()==與===有什么區(qū)別
==是近似相等,判斷值是否相等
=== 是絕對完全相等,判斷值和數(shù)據(jù)類型是否相等break與continue有什么區(qū)別
break continue 經(jīng)常在循環(huán)語句中出現(xiàn),循環(huán)終止,跳出循環(huán)
break 是循環(huán)終止,跳出循環(huán),不再執(zhí)行后面的循環(huán)
continue 是跳出循環(huán),繼續(xù)執(zhí)行下一個循環(huán)void 0 和 undefined在使用場景上有什么區(qū)別
undefined是一個全局屬性,表示未定義或定義了沒有賦值。
void是一個一元運算符,不管傳入什么參數(shù)都會返回undefined
void 是為了兼容老的瀏覽器,IE7-11及主流瀏覽器
underfined 不能兼容IE7 8,見下面代碼
void操作符是在ECMAScript v1中定義的,而undefined是在ECMAScript v5中定義的。
我們知道undefined不是javascript的保留字,所以我們可以用undefined作為變量名。這時,我們定義的undefined就會影響到使用undefined作為判斷的地方??聪旅胬樱?/p>
測試了主流瀏覽器IE7-IE11、opera、firefox、safati、chrome
undefined=123;
alert(undefined);
//IE7、IE8是123,其余:IE9-IE11、opera、firefox、safati、chrome都是undefined
alert(void 0);
//IE7-IE11、opera、firefox、safati、chrome都是undefined
- 以下代碼的輸出結(jié)果是?為什么?
console.log(1+1); //2
操作數(shù)都是數(shù)字的時候做加法運算
console.log("2"+"4"); //24
string+string 字符串拼接
console.log(2+"4"); //24 2轉(zhuǎn)換為字符串,字符串再拼接
兩個參數(shù)都是字符串或者一個參數(shù)是字符串的情況下,會把另一個參數(shù)轉(zhuǎn)換為字符串
console.log(+"4"); //4 4轉(zhuǎn)成數(shù)字
只有一個字符串參數(shù)時,嘗試將其轉(zhuǎn)換為數(shù)字
運算符的優(yōu)先級順序

以下代碼的輸出結(jié)果是?
var a = 1;
a+++a;
typeof a+2;
輸出 "number2"
計算過程:
1 .看優(yōu)先級 ,++ 優(yōu)先級高于+,根據(jù)優(yōu)先級先計算a++,再+a++ =2,但是a還是1,(a++)+a=3
typeof的優(yōu)先級比+ 高,先執(zhí)行 typeof a ,也就是typeof 3
返回"number", "number"+2 返回 "number2以下代碼的輸出結(jié)果是? 為什么
var a = 1;
var b = 3;
console.log( a+++b ); //輸出5
因為++ 的優(yōu)先級比+高,先計算a++,然后在計算+b,a++有返回2,
2+3=5遍歷數(shù)組,把數(shù)組里的打印數(shù)組每一項的平方
var arr = [3,4,5]
for(var i=0;i<arr.length; i++){
console.log(arr[i]* arr[i])
}
輸出結(jié)果:
9
16
25遍歷 JSON, 打印里面的值
var obj = {
name: 'hunger',
sex: 'male',
age: 28
}
for(var key in obj){
console.log(obj[key])
}
輸出結(jié)果:
hunger
male
28以下代碼輸出結(jié)果是? 為什么 (選做題目)
var a = 1, b = 2, c = 3;
var val = typeof a + b || c >0
console.log(val)
輸出: number2
考察到的點:優(yōu)先級順序: typeof > || + =
|| 邏輯運算符 有短路的功能 或運算時,一個為真就是真,則b是真,不需要再看第二個操作數(shù) ,所以 b=2, 輸出"2"
var d = 5;
var data = d ==5 && console.log('bb')
console.log(data)
輸出結(jié)果:console.log('bb') 輸出是“bb”, 但是返回的是undefined
true&& underfined ,根據(jù)與運算 ,返回第二個值underfined
1.&&運算規(guī)則
1.1 兩邊條件都為true時,結(jié)果才為true;
1.2 如果有一個為false,結(jié)果就為false;
1.3 當(dāng)?shù)谝粋€條件為false時,就不再判斷后面的條件
注意:當(dāng)數(shù)值參與邏輯與運算時,結(jié)果為true,那么會返回的會是第二個為真的值;
如果結(jié)果為false,返回的會是第一個為假的值。注意: data 和data2中的輸出結(jié)果都為underfined
var data2 = d = 0 || console.log('haha')
console.log(data2)
輸出結(jié)果: haha underfined
console.log('haha'),輸出是“haha”, 返回undefined
d=0 也是 underfined ,underfined或underfined, 輸出第一個undefined
var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x)
輸出結(jié)果 : 2
true+ (false + true )
1+ (0+1)=2