數(shù)據(jù)類型運(yùn)算符流程控制語句

1. JavaScript 定義了幾種數(shù)據(jù)類型? 哪些是原始類型?哪些是復(fù)雜類型?原始類型和復(fù)雜類型的區(qū)別是什么?

  • JavaScript語言的每一個(gè)值西壮,都屬于某一種數(shù)據(jù)類型磷籍。JavaScript的數(shù)據(jù)類型十气,共有六種嫁佳。

  • 數(shù)值(number):整數(shù)和小數(shù)(比如1和3.14)

  • 字符串(string):字符組成的文本(比如"Hello World")

  • 布爾值(boolean):true(真)和false(假)兩個(gè)特定值

  • undefined:表示“未定義”或不存在纸淮,即此處目前沒有任何值

  • null:表示空缺允趟,即此處應(yīng)該有一個(gè)值董栽,但目前為空

  • 對(duì)象(object):各種值組成的集合

  • Symbol :一種特殊的码倦、不可變的數(shù)據(jù)類型,可以作為對(duì)象屬性的標(biāo)識(shí)符使用锭碳。

  • 原始類型和復(fù)雜類型

  • 數(shù)值袁稽、字符串、布爾值稱為原始類型(primitive type)的值擒抛,即它們是最基本的數(shù)據(jù)類型推汽,不能再細(xì)分了补疑。

  • 對(duì)象稱為復(fù)雜類型(complex type)的值,因?yàn)橐粋€(gè)對(duì)象往往是多個(gè)原始類型的值的合成歹撒,可以看作是一個(gè)存放各種值的容器莲组。

  • 至于undefined和null,一般將它們看成兩個(gè)特殊值栈妆。

  • 對(duì)象又可以分成三個(gè)子類型胁编。
    狹義的對(duì)象(object)
    數(shù)組(array)
    函數(shù)(function)
    正則表達(dá)式 (regexp)

2. typeof和instanceof的作用和區(qū)別?

  • typeof
  • 用于判斷基本類型
    基本類型總共有六種,它們分別是
    number
    boolean
    string
    function
    object
    undefined
  • 是一元運(yùn)行符
    運(yùn)算格式:
    typeof xxx
    比如
    typeof 1
    會(huì)得到
    "number"
  • 返回結(jié)果是類型的字符串
    根據(jù)typeof 1的結(jié)果鳞尔,我們可以看到我們得到的是一個(gè)字符串嬉橙。
  • 一些簡單的例子
> typeof 1
 "number"
> typeof qcy
"undefined"
> typeof NaN
"number"
> typeof 0.1
"number"
> typeof true
"boolean"
> typeof false
"boolean"
> typeof 'aaa'
"string"
> typeof function() {}
"function"
> typeof {}
"object"
> typeof []
"object"
  • instanceof
  • 用于判斷對(duì)象的類型
    所以可以使用instanceof的都必須是對(duì)象。所以不屬于object類型的基本類型是無法應(yīng)用instanceof的寥假,或者無法得到你想要的結(jié)果市框。
    比如:
> 1 instanceof Number
false

你要想得到正確的結(jié)果,需要這樣做:

> new Number(1) instanceof Number
true

所以如果你的運(yùn)算內(nèi)容不是對(duì)象糕韧,你就無法得到正確的結(jié)果枫振。同樣的效果如下:

'string' instanceof String
false
new String('string') instanceof String
true
  • 二元運(yùn)算符
    instanceof 是一個(gè)二元運(yùn)算符,左邊a是被運(yùn)算的值萤彩,右邊b是運(yùn)算的類型粪滤。格式是這樣的
    a instanceof b

  • 返回結(jié)果是布爾值(Boolean):true/false
    所以instanceof是一個(gè)判斷,而typeof是求值雀扶。

  • 差異

  • 對(duì)自定義類型使用 instanceof :

var ClassFirst = function () {};
var ClassSecond = function () {};
var instance = new ClassFirst();
typeof instance; // object
typeof instance == 'ClassFirst'; //false
instance instanceof Object; //true
instance instanceof ClassFirst; //true
instance instanceof ClassSecond; //false 
  • 對(duì)原始類型使用 typeof :
'example string' instanceof String; // false
typeof 'example string' == 'string'; //true
'example string' instanceof Object; //false
typeof 'example string' == 'object'; //false
true instanceof Boolean; // false
typeof true == 'boolean'; //true
99.99 instanceof Number; // false
typeof 99.99 == 'number'; //true
function() {} instanceof Function; //true
typeof function() {} == 'function'; //true
  • 對(duì)復(fù)雜類型使用 instanceof :
/regularexpression/ instanceof RegExp; // true
typeof /regularexpression/; //object
[] instanceof Array; // true
typeof []; //object
{} instanceof Object; // true
typeof {}; //object

3. 如何判斷一個(gè)變量是否是數(shù)字杖小、字符串、布爾愚墓、函數(shù)

假設(shè)變量為x

  • 數(shù)字
    如果
    typeof (x) // "number"
    則變量為數(shù)字

  • NaN (Not-A-Number)
    NaN是JavaScript之中唯一不等于自身的值
    所以如果有
    x予权!==x // true
    或者
    isNaN(x) // true
    則變量為NaN

  • Infinity
    Infinity 屬性用于存放表示正無窮大的數(shù)值
    可以直接判斷
    x == Infinity // true
    則變量為Infinity

  • 字符串、布爾浪册、函數(shù)
    使用
    typeof(x) // string | boolean | function
    即可得到相應(yīng)結(jié)果

4. NaN是什么? 有什么特別之處?

全局屬性 NaN 表示 Not-A-Number 的值扫腺。
NaN 是一個(gè)全局對(duì)象的屬性。
NaN 屬性的初始值就是 NaN村象,和 Number.NaN 的值一樣笆环。在現(xiàn)代瀏覽器中(ES5中), NaN 屬性是一個(gè)不可配置(non-configurable)厚者,不可寫(non-writable)的屬性咧织。但在ES3中,這個(gè)屬性的值是可以被更改的籍救,但是也應(yīng)該避免覆蓋习绢。

在編碼很少直接使用到 NaN。通常都是在計(jì)算失敗時(shí),作為 Math 的某個(gè)方法的返回值出現(xiàn)的(例如:Math.sqrt(-1))或者嘗試將一個(gè)字符串解析成數(shù)字但失敗了的時(shí)候(例如:parseInt("blabla"))

typeof NaN   // "number"

也就是說 NaN 是一種特殊的 Number 類型值闪萄。
NaN是JavaScript之中唯一不等于自身的值

 NaN !== NaN  // true
 NaN === NaN  // false

嚴(yán)格判斷 NaN

 typeof value === 'number' && isNaN(value);

5. 如何把非數(shù)值轉(zhuǎn)化為數(shù)值?

有三個(gè)函數(shù)可以把非數(shù)值轉(zhuǎn)換為數(shù)值

1. Number()
2. parseInt()
3. parseFloat()

大量特殊情況

6. ==與===有什么區(qū)別

== equality 等同梧却,=== identity 恒等。
==败去, 兩邊值類型不同的時(shí)候放航,要先進(jìn)行類型轉(zhuǎn)換,再比較圆裕。
===广鳍,不做類型轉(zhuǎn)換,類型不同的一定不等吓妆。
特殊情況

[] == false  //  true
![] == false // true

解釋 - 擴(kuò)展閱讀

7. break與continue有什么區(qū)別

break 用于強(qiáng)制退出循環(huán)體赊时,執(zhí)行循環(huán)后面的語句
continue 用于退出本次循環(huán),執(zhí)行下次循環(huán)

8. void 0 和 undefined在使用場(chǎng)景上有什么區(qū)別

undefined可以在局部作用域中被覆寫行拢, void 0不可被重寫并且返回值是undefined祖秒,因此void 0是在局部作用域中替代undefined

9. 以下代碼的輸出結(jié)果是?為什么

console.log(1+1);    
>  2  //  輸出1+1的結(jié)果
console.log("2"+"4");  
>  24  //  此處 + 號(hào)意義為字符串拼接
console.log(2+"4"); 
>  24  //  + 號(hào)兩邊類型不同,先把number類型轉(zhuǎn)換為string再進(jìn)行字符串拼接
console.log(+"4");
> 4 此處 + 號(hào)作用相當(dāng)于轉(zhuǎn)化 string 為 number

10. 以下代碼的輸出結(jié)果是?

var a = 1;  
a+++a;  
>  3  //  a++ 優(yōu)先級(jí)比 + 高舟奠,相當(dāng)于 (a++) + a 竭缝,a++在自增之前返回值 1 再與a自增后的值 2 相加,結(jié)果為3
typeof a+2;
> number2  //  typeof 優(yōu)先級(jí)比 + 高沼瘫,所以返回字符串number抬纸,再通過 + 號(hào)與2拼接

11. 以下代碼的輸出結(jié)果是? 為什么

var a = 1;
var b = 3;
console.log( a+++b );
>  4  //  ++ 優(yōu)先級(jí)比 + 高,相當(dāng)于 (a++) + b 耿戚,a++在自增之前返回值 1 再與b的值 3 相加湿故,結(jié)果為 4

12. 遍歷數(shù)組,把數(shù)組里的打印數(shù)組每一項(xiàng)的平方

var arr = [3,4,5]
for (var i=0;i<arr.length;i++)
    console.log(arr[i]*arr[i])
>  9
   16
   25

13. 遍歷 JSON, 打印里面的值

var obj = {
 name: 'hunger', 
 sex: 'male', 
 age: 28 
}
for (prop in obj)
    console.log(prop,":",obj[prop])
>  name : hunger
   sex : male
   age : 28

14. 以下代碼輸出結(jié)果是? 為什么 (選做題目)

var a = 1, b = 2, c = 3;
var val = typeof a + b || c >0
console.log(val) 
>  number2  //  先計(jì)算 typeof a 為 number溅话,再+b為 number2 ,且能轉(zhuǎn)換為true歌焦,所以直接返回number2

var d = 5;
var data = d ==5 && console.log('bb')
console.log(data)
>   bb
    undefined
依據(jù)優(yōu)先級(jí)
data = ((d == 5) && (console.log('bb')))
data = undefined


var data2 = d = 0 || console.log('haha')
console.log(data2)
 >  haha
    undefined
依據(jù)優(yōu)先級(jí)
data2 = (d = ((0) || (console.log('haha'))))
data2 = undefined

var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x)
>  2
括號(hào)里的值為true
"Hello"也為true
true+true = 1+1 =2
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末飞几,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子独撇,更是在濱河造成了極大的恐慌屑墨,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纷铣,死亡現(xiàn)場(chǎng)離奇詭異卵史,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)搜立,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門以躯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事忧设〉蟊辏” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵址晕,是天一觀的道長膀懈。 經(jīng)常有香客問我,道長谨垃,這世上最難降的妖魔是什么启搂? 我笑而不...
    開封第一講書人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮刘陶,結(jié)果婚禮上胳赌,老公的妹妹穿的比我還像新娘。我一直安慰自己易核,他們只是感情好匈织,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著牡直,像睡著了一般缀匕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上碰逸,一...
    開封第一講書人閱讀 52,328評(píng)論 1 310
  • 那天乡小,我揣著相機(jī)與錄音,去河邊找鬼饵史。 笑死满钟,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的胳喷。 我是一名探鬼主播湃番,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼吭露!你這毒婦竟也來了吠撮?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤讲竿,失蹤者是張志新(化名)和其女友劉穎泥兰,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體题禀,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鞋诗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了迈嘹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片削彬。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出吃警,到底是詐尸還是另有隱情糕篇,我是刑警寧澤,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布酌心,位于F島的核電站拌消,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏安券。R本人自食惡果不足惜墩崩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望侯勉。 院中可真熱鬧鹦筹,春花似錦、人聲如沸址貌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽练对。三九已至遍蟋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間螟凭,已是汗流浹背虚青。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留螺男,地道東北人棒厘。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像下隧,于是被迫代替她去往敵國和親奢人。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容