1.JavaScript 定義了幾種數據類型? 哪些是原始類型?哪些是復雜類型?原始類型和復雜類型的區別是什么?
JavaScript語言的每一個值,都屬于某一種數據類型。JavaScript的數據類型,共有六種。
- 數值(number):整數和小數(比如1和3.14)
- 字符串(string):字符組成的文本(比如"Hello World")
- 布爾值(boolean):true(真)和false(假)兩個特定值
- undefined:表示“未定義”或不存在,即此處目前沒有任何值
- null:表示空缺,即此處應該有一個值,但目前為空
- 對象(object):各種值組成的集合
- symbol:一個symbol值能作為對象屬性的標識符;這是該數據類型僅有的目的。
數值、字符串、布爾值稱為原始類型(primitive type)的值,即它們是最基本的數據類型,不能再細分了。
將對象稱為復雜類型(complex type)的值,因為一個對象往往是多個原始類型的值的合成,可以看作是一個存放各種值的容器。
2.typeof和instanceof的作用和區別?
typeof
作用: 是一個一元運算,放在一個變量之前,變量可以是任意類型。
它返回值是一個字符串,該字符串說明變量的類型。typeof 一般只能返回如下幾個結果:number,boolean,string,function,object,undefined。
我們可以使用 typeof 來獲取一個變量是否存在,如 if(typeof a!="undefined"){alert("ok")},而不要去使用 if(a) 因為如果 a 不存在(未聲明)則會出錯。
區別: 對于 Array,Null 等特殊對象使用 typeof 一律返回 object,這正是 typeof 的局限性。
instanceof
作用返回的是一個布爾值,判斷該變量是否某一類型。如:
var a = {};
alert(a instanceof Object); //true
var b = [];
alert(b instanceof Array); //true
區別:需要注意的是,instanceof只能用來判斷對象和函數,不能用來判斷字符串和數字等.但是,用instanceof可以判斷變量是否為數組
3.如何判斷一個變量是否是數字、字符串、布爾、函數
用typeof操作符
alert(typeof(1));//number
alert(typeof("abc"));//string
alert(typeof(true));//boolean
alert(typeof function(){}); // 'function'
4.NaN是什么? 有什么特別之處?
NaN含義是Not a Number,表示非數字,NaN和任何值都不相等,包括自己
特別: 任何NaN的值進行操作都會返回一個NaN,其次,NaN與任何值都不相等即NaN === NaN也是false.
5.如何把非數值轉化為數值?
parseInt() 函數可解析一個字符串,并返回一個整數。
parseInt("10"); //返回 10
1. Number()函數
- 如果是 Boolean 值,true 和 false 將分別被轉換為 1 和0;
- 如果是數字值,只是簡單的傳入和返回;
- 如來是null 值,返回 0;
- 如果是 undefined,返回NaN ;
- 如果是字符串,遵循下列規則:
- 如果字符串中只包含數字,則將其轉換為十進制數值,即"1"會變成1 , "123"會變成123,而"011"會變成11(注意,前導的0被忽略了);
- 如果字符串中包含有效的浮點格式, 如"1.1",則將其轉換為對應的浮點數值(同樣,也會忽略前導零);
- 如果字符串中包含有效的十六進制格式,例如"0xf",則將其轉換為相同大小的十進制整數值;
如果字符串是空的(不包含任何字符) ,則將其轉換為0;
如果字符串中包含除上述格式之外的字符,則將其轉換為 NaN。 - 如果是對象,則調用對象的 valueOf() 方法,然后依照前面的規則轉換返回的值。如果轉換的結果是 NaN,則調用對象的 toString() 方法,然后再次依照前面的規則轉換返回的字符串值。
2. parseInt()
由于Number()函數在轉換字符串的時候比較復雜而且不夠合理,因此在處理整數的時候更常用的是parseInt()。
parselnt() 函數在轉換字符串時,更多的是看其是否符合數值模式,它會忽略字符串前面的空格,直至找到第一個非空格字符;
如果第一個字符不是數字字符或者負號,parseInt() 就會返回 NaN;也就是說,用parselnt() 轉換空字符時會返回 NaN(Nurnber() 對空字符返回 0);
如果第一個字符是數字字符,parselnt() 會繼續解析第二個字符,直到解析完所有后續字符或者遇到了一個非數字字符。
例如,"1234blue"會被轉換為1234 ,因為"blue"會被完全忽略;類似地,"'22.5"會被轉換為22 ,因為小數點并不是有效的數字字符。
3. parseFloat()
與 parseInt () 函數類似,parseFloat () 也是從第一個字符(位置0)開始解析每個字符。而且也是一直解析到字符串末尾,或者解析到遇見一個無效的浮點數字字符為止。
也就是說,字符串中的第一個小數點是有效的,而第二個小數點就是無效的了,因此它后面的字符串將被忽略。舉例來說,"22.34.5"將會被轉換為22.34 。
6.==與===有什么區別
== 相等
=== 嚴格相等
7.break與continue有什么區別
break 用于強制退出循環體,執行循環后面的語句
continue 用于退出本次循環,執行下次循環
8.void 0 和 undefined在使用場景上有什么區別
undefined在某些場景例如函數內是可以被賦值,而void 0 則只會返回undefined。
9.以下代碼的輸出結果是?為什么?
console.log(1+1); //2 (數值相加)
console.log("2"+"4"); //24 (2,4均為字符串,+連接字符串)
console.log(2+"4"); //24 (4為字符串,2為數值,此代碼會轉換2為字符串然后連接)
console.log(+"4"); //4 (+號強制轉換為數值)
10. 以下代碼的輸出結果是?
var a = 1;
a+++a;
typeof a+2; //number2
/* (a++)+a=1+2;
(typeof a)+2=number2 */
11. 以下代碼的輸出結果是? 為什么
var a = 1;
var b = 3;
console.log( a+++b ); //4
/ (a++)+b=1+3=4
12. 遍歷數組,把數組里的打印數組每一項的平方
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(key in obj){
console.log(key+":"+obj[key]);
}
14. 以下代碼輸出結果是? 為什么 (選做題目)
var a = 1, b = 2, c = 3; //number2
var val = typeof a + b || c >0
console.log(val)
/* val = (typeof a) + [ b || ( c > 0 ) ]
typeof a ==> number; c > 0 ==> true; 2 || true ==> true
*/
var d = 5; // bb
var data = d ==5 && console.log('bb')
console.log(data)
/* data = ( d == 5 ) && console.log("bb")
d == 5 ==> true ;
*/
var data2 = d = 0 || console.log('haha') //haha
console.log(data2)
/* data2 = [ d =( 0 || console.log('haha') ) ]
0 ==>false ; d=console.log("haha") ;data2 = d = haha
var x = !!"Hello" + (!"world", !!"from here!!"); //2
console.log(x)
/* x = (!!"Hello") + (!"world", !!"from here!!");
(!!"Hello") ==>true ; (!"world", !!"from here!!") ==> true ; x= true +true = 2