1.JavaScript 定義了幾種數(shù)據(jù)類型? 哪些是原始類型?哪些是復(fù)雜類型?原始類型和復(fù)雜類型的區(qū)別是什么?
- JS定義了6種數(shù)據(jù)類型,分別是:
- 數(shù)值(number):整數(shù)和小數(shù)(比如1和3.14)
- 字符串(string):字符組成的文本(比如"Hello World")
- 布爾值(boolean):true(真)和false(假)兩個特定值
- undefined:表示“未定義”或不存在,即此處目前沒有任何值
- null:表示空缺,即此處應(yīng)該有一個值,但目前為空
- 對象(object):各種值組成的集合
- 3種原始類型 (primitive type): 數(shù)值,字符串,布爾值
- 1種復(fù)雜類型:對象(object)
- 2種特殊值(complex type):undefined,null
原始類型和復(fù)雜類型的區(qū)別:原始類型是最基本的數(shù)據(jù)類型,不能再細(xì)分了。對象稱為復(fù)雜類型的值,因為一個對象往往是多個原始類型的值的合成,可以看作是一個存放各種值的容器。
2.typeof和instanceof的作用和區(qū)別?
- typeof是一個一元運(yùn)算符,運(yùn)算格式為
typeof a
,返回一個對象的類型,可能返回三種基本類型以及function,undefined,以及object(對象為arry,null等特殊值時一律返回object,這是typeof的局限性)。 - instanceof是一個二元運(yùn)算符,左邊連接需要判斷的變量,右邊連接預(yù)期的類型,如果相符則返回true,不符則返回false。instanceof可以判斷數(shù)組和對象。
3.如何判斷一個變量是否是數(shù)字、字符串、布爾、函數(shù)
- 使用typeof運(yùn)算符,是數(shù)字時返回number,是字符串時返回string,是布爾值時返回boolear,是函數(shù)時返回function。
4.NaN是什么? 有什么特別之處?
- Not a Number,表非數(shù)字
- 與任何值不相等,包括它自己
5.如何把非數(shù)值轉(zhuǎn)化為數(shù)值?
- 使用如下三個函數(shù)
- Number()
- parseInt()
- parseFloat()
-
parseInt()和parseFloat()
用法:- 忽略字符串前面的空白字符,找到第一個非空白字符
- 如果第一個字符不是-或者數(shù)字返回NaN
- 如果是繼續(xù)解析,直到非數(shù)值模式為止
- 0開頭會當(dāng)做八進(jìn)制,0x開頭會當(dāng)做十六進(jìn)制,但是可以指定第二個參數(shù)指定基數(shù)
-
parseInt('blue'); //NaN
parseInt('-23ABS'); // -23
parseInt('0xf1'); // 241
parseInt('101', 2); // 5
6.==與===有什么區(qū)別
- 它們的區(qū)別是相等運(yùn)算符(==)比較兩個值是否相等,嚴(yán)格相等運(yùn)算符(===)比較它們是否為“同一個值”。如果兩個值不是同一類型,嚴(yán)格相等運(yùn)算符(===)直接返回false,而相等運(yùn)算符(==)會將它們轉(zhuǎn)化成同一個類型,再用嚴(yán)格相等運(yùn)算符進(jìn)行比較。
- “==”包含了一個自動的隱式類型轉(zhuǎn)換,規(guī)則如下:
- 如果一個是null,一個是undefined,那么相等
- 如果一個是數(shù)字,一個是字符串,先將字符串轉(zhuǎn)為數(shù)字,然后比較
- 如果一個值是true/false則將其轉(zhuǎn)為1/0比較
- 如果一個值是對象,一個是數(shù)字或字符串,則嘗試使用valueOf和toString轉(zhuǎn)換后比較
- “===”則為嚴(yán)格相等,即類型與值必須全部相等。
應(yīng)盡量避免使用“==”。
7.break與continue有什么區(qū)別
- break為直接跳出循環(huán),不再繼續(xù)進(jìn)行下一次循環(huán)。
- continue為跳出本次循環(huán),直接開始進(jìn)行下一次循環(huán)。
8.void 0 和 undefined在使用場景上有什么區(qū)別
- void 會執(zhí)行后面的表達(dá)式并返回 undefined,通常 void 0 會用來獲取 undefined。
- undefined 可能會被重寫,但是 void 0 返回的值一定會是 undefined。
關(guān)于運(yùn)算符優(yōu)先級的幾個小例子
var a = 1, b = 2, c = 3;
var val = typeof a + b || c >0
console.log(val) //由于typeof的優(yōu)先級最高,所以typeof a為"number","number"+2為"number2",因為boolean("number2")為true,所以輸出"number2"
var d = 5;
var data = d ==5 && console.log('bb')
console.log(data)//d==5為true,conlose.log('bb')為bb,輸出為undefined,true&&undefined為undefined
var data2 = d = 0 || console.log('haha')
console.log(data2)//d=0為0,console.log('haha')為haha,輸出為undefined,0||undefined為undefined
var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x)//!!"hello"為true,(false,true)為true,true+true為2