1、JavaScript 定義了幾種數(shù)據(jù)類型? 哪些是原始類型?哪些是復雜類型?原始類型和復雜類型的區(qū)別是什么?
2、typeof和instanceof的作用和區(qū)別?
3、如何判斷一個變量是否是數(shù)字、字符串、布爾、函數(shù)
4、NaN是什么? 有什么特別之處?
5、如何把非數(shù)值轉(zhuǎn)化為數(shù)值?
6、==與===有什么區(qū)別
7、break與continue有什么區(qū)別
8、void 0 和 undefined在使用場景上有什么區(qū)別
9、以下代碼的輸出結(jié)果是?為什么?
1、
數(shù)據(jù)類型分類
JavaScript的數(shù)據(jù)類型,共有六種。
數(shù)值(number):整數(shù)和小數(shù)(比如1和3.14)
字符串(string):字符組成的文本(比如"Hello World")
布爾值(boolean):true(真)和false(假)兩個特定值
undefined:表示“未定義”或不存在,即此處目前沒有任何值
null:表示空缺,即此處應該有一個值,但目前為空
對象(object):各種值組成的集合
數(shù)值、字符串、布爾值稱為原始類型(primitive type)的值,即它們是最基本的數(shù)據(jù)類型,不能再細分了。
將對象稱為復雜類型(complex type)的值,因為一個對象往往是多個原始類型的值的合成,可以看作是一個存放各種值的容器。
至于undefined和null,一般將它們看成兩個特殊值。
對象的細分
狹義的對象(object)
數(shù)組(array)
函數(shù)(function)
正則表達式 (regexp)
2、
typeof 123 // "number"
typeof '123' // "string"
typeof false // "boolean"
function f() {} typeof f // "function"
typeof undefined // "undefined"
除此以外,其他情況都返回object。
typeof window // "object"
typeof {} // "object"
typeof [] // "object"
typeof null // "object"
區(qū)分數(shù)組和對象
var b = {};
var a = [];
b instanceof Array // false
a instanceof Array // true
3、
答:
var a = xxx;
if(typeof a === "number" || typeof a === "string" || typeof a === "boolean" || typeof a === "function")
{console.log(typeof a);}
就可以知道了.
4、
答:NaN stand for terms of "Not a Number" 即表示這個變量聲明的數(shù)據(jù)類型不是一個number類型的數(shù)據(jù),比如你可以用isNaN("blue");就可以發(fā)現(xiàn)返回的事一個true,當然對于其他的數(shù)據(jù)類型其解析規(guī)則和Number()差不多.
特別之處,首先,任何NaN的值進行操作都會返回一個NaN,其次,NaN與任何值都不相等即NaN === NaN也是false.
5、
- Number()
- parseInt()
- parseFloat()
6、
== 相等
=== 嚴格相等
兩等號判等會在比較時進行類型轉(zhuǎn)換;三等號判等不會進行類型轉(zhuǎn)換(如果類型不同會直接返回 false )
7、
break 用于強制退出循環(huán)體,執(zhí)行循環(huán)后面的語句 跳出循環(huán)體
continue 用于退出本次循環(huán),執(zhí)行下次循環(huán) 跳出單次循環(huán)
8、
undefined 不能被重寫。但是在局部作用域中,還是可以被重寫的。
所以undefined現(xiàn)常用于全局環(huán)境
void 運算符通常只用于獲取 undefined 的原始值,一般使用 void(0)(等同于 void 0)。在上述情況中,也可以使用全局變量undefined 來代替(假定其仍是默認值)。
而 void 可以給任何給定的表達式求值,并返回 undefined,并且 void 不可被重寫,因此void 0是在局部作用域中替代undefined的最佳選擇
9、
console.log(1+1);// 2 在兩個操作數(shù)都是數(shù)字的時候,會做加法運算
console.log("2"+"4");// 24 兩個參數(shù)都是字符串做字符串拼接
console.log(2+"4");// 24 在有一個參數(shù)是字符串的情況下會把另外一個參數(shù)轉(zhuǎn)換為字符串做字符串拼接
console.log(+"4");// 4 在只有一個字符串參數(shù)的時候會嘗試將其轉(zhuǎn)換為數(shù)字
10、
var a = 1;
a+++a; //輸出3,理解為a++ + a,++運算符比+運算優(yōu)先級更高,a++結(jié)果為1,但是a已經(jīng)變成了2,所以結(jié)果為1+2=3。
typeof a+2;//輸出"number2",typeof的優(yōu)先級高于+運算,所以輸出字符串number,字符串與數(shù)字相加時,數(shù)字轉(zhuǎn)換為字符串,然后字符串拼接就變成"number2"
11. 以下代碼的輸出結(jié)果是? 為什么
var a = 1;
var b = 3;
console.log( a+++b );
輸出是4,同上,a++仍是1,1+3=4;
12、遍歷數(shù)組
var arr = [3,4,5];
for(i=0;i<arr.length;i++) {
console.log(arr[i]*arr[i])
}
13、
遍歷 JSON, 打印里面的值
var obj = {
name: 'hunger',
sex: 'male',
age: 28
}
for(a in obj){
console.log(a+":"+obj[a])
}