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

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/typeof

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

JavaScript語(yǔ)言的每一個(gè)值烘贴,都屬于某一種數(shù)據(jù)類(lèi)型。JavaScript的數(shù)據(jù)類(lèi)型老翘,共有六種铺峭。
數(shù)值(number):整數(shù)和小數(shù)(比如1和3.14)
字符串(string):字符組成的文本(比如"Hello World")
布爾值(boolean):true(真)和false(假)兩個(gè)特定值
undefined:表示“未定義”或不存在汽纠,即此處目前沒(méi)有任何值
null:表示空缺虱朵,即此處應(yīng)該有一個(gè)值,但目前為空
對(duì)象(object):各種值組成的集合

example:

var str = 'jirengu';
var isOk = true ;
var hello;  //undefined
var empty = null; 
var person = {
  name: '小明',
  age: 100
}
var arr = [1, 2, 3];
var sayName = function(){
  console.log('my name is jirengu')
}
var reg = /hello/;```

原始類(lèi)型(primitive type):包含數(shù)值絮宁、字符串翅敌、布爾值羞福。
復(fù)雜類(lèi)型(complex type):對(duì)象

兩者的區(qū)別:
原始類(lèi)型(primitive type)惕蹄,即它們是最基本的數(shù)據(jù)類(lèi)型蚯涮,不能再細(xì)分了治专。
而復(fù)雜類(lèi)型(complex type)(引用類(lèi)型)的值,因?yàn)橐粋€(gè)對(duì)象往往是多個(gè)原始類(lèi)型的值的合成遭顶,可以看作是一個(gè)存放各種值的容器张峰。
至于undefined和null,一般將它們看成兩個(gè)特殊值棒旗。
typeof  null
object

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

- typeof的作用:typeof是一元運(yùn)算符喘批,返回值為字符串铣揉,該字符串用來(lái)說(shuō)明運(yùn)算數(shù)的數(shù)據(jù)類(lèi)型饶深。而這個(gè)應(yīng)用卻不是來(lái)檢查對(duì)象的類(lèi)型。

- instanceof的作用:instanceof用于判斷某個(gè)變量是否是某個(gè)對(duì)象的實(shí)例逛拱,返回值為true或false敌厘。其語(yǔ)法是object instanceof constructor。

- 區(qū)別:因?yàn)閠ypeof遇到數(shù)組朽合、null都會(huì)返回object俱两,所以要判斷某個(gè)對(duì)象是否是數(shù)組或者某個(gè)變量是否是對(duì)象的實(shí)例時(shí)就要使用instanceof。

```var o = {};
var a = [];
o instanceof Array // false
a instanceof Array // true```

####3.如何判斷一個(gè)變量是否是數(shù)字曹步、字符串宪彩、布爾、函數(shù)
三種方法:

方法一:typeof運(yùn)算符
typeof運(yùn)算符可以返回一個(gè)值的數(shù)據(jù)類(lèi)型讲婚。返回值為number時(shí)是數(shù)字尿孔;返回值為string時(shí)是字符串;返回值為boolean時(shí)是布爾筹麸;返回值是function時(shí)是函數(shù)纳猫。
原始類(lèi)型:數(shù)值、字符串竹捉、布爾值分別返回number芜辕、string、boolean块差。
```typeof 123 // "number"
typeof '123' // "string"
typeof false // "boolean"```
函數(shù):函數(shù)返回function侵续。
```function f() {}
typeof f
// "function"```

undefined:返回undefined。
```typeof undefined
// "undefined"```
除此以外憨闰,其他情況都返回object状蜗。

方法二:instanceof運(yùn)算符
方法三:Object.prototype.toString方法
Object.prototype.toString.call()

####4.NaN是什么? 有什么特別之處?
NaN(Not a Number)表示非數(shù)字,NaN和任何值都不相等鹉动,包括自己轧坎。
`parseInt('abc'); //NaN`
0除以0也會(huì)得到NaN。`0 / 0 // NaN`
需要注意的是泽示,NaN不是一種獨(dú)立的數(shù)據(jù)類(lèi)型缸血,而是一種特殊數(shù)值蜜氨,它的數(shù)據(jù)類(lèi)型依然屬于Number,使用typeof運(yùn)算符可以看得很清楚捎泻。`typeof NaN // 'number'`
特別之處是:
任何NaN的值進(jìn)行操作都會(huì)返回一個(gè)NaN
NaN與任何值都不相等包括它自己
```NaN == NaN; //false
NaN !== NaN; //true```

####5.如何把非數(shù)值轉(zhuǎn)化為數(shù)值?
有三個(gè)函數(shù)可以把非數(shù)值轉(zhuǎn)換為數(shù)值:

1. Number()
Number() 函數(shù)把對(duì)象的值轉(zhuǎn)換為數(shù)字飒炎。
語(yǔ)法:Number(object)
如果參數(shù)是 Date 對(duì)象,Number() 返回從 1970 年 1 月 1 日至今的毫秒數(shù)笆豁。
如果對(duì)象的值無(wú)法轉(zhuǎn)換為數(shù)字郎汪,那么 Number() 函數(shù)返回 NaN。

2. parseInt()
parseInt方法用于將字符串轉(zhuǎn)為整數(shù)闯狱。parseInt的返回值只有兩種可能煞赢,不是一個(gè)十進(jìn)制整數(shù),就是NaN哄孤。
忽略字符串前面的空白字符耕驰,找到第一個(gè)非空白字符;
如果第一個(gè)字符不是-或者數(shù)字返回NaN录豺;
如果是繼續(xù)解析朦肘,直到非數(shù)值模式為止;
parseInt方法還可以接受第二個(gè)參數(shù)(2到36之間)双饥,表示被解析的值的進(jìn)制媒抠,返回該值對(duì)應(yīng)的十進(jìn)制數(shù)。默認(rèn)情況下咏花,parseInt的第二個(gè)參數(shù)為10趴生,即默認(rèn)是十進(jìn)制轉(zhuǎn)十進(jìn)制。
```parseInt('1000') // 1000
// 等同于
parseInt('1000', 10) // 1000```
0開(kāi)頭會(huì)當(dāng)做八進(jìn)制昏翰,0x開(kāi)頭會(huì)當(dāng)做十六進(jìn)制苍匆,但是可以指定第二個(gè)參數(shù)指定基數(shù);
```parseInt('blue'); //NaN
parseInt('-23ABS'); // -23
parseInt('0xf1'); // 241
parseInt('101', 2); // 5```

3. parseFloat()
parseFloat方法用于將一個(gè)字符串轉(zhuǎn)為浮點(diǎn)數(shù)棚菊。如果字符串符合科學(xué)計(jì)數(shù)法浸踩,則會(huì)進(jìn)行相應(yīng)的轉(zhuǎn)換。
如果字符串包含不能轉(zhuǎn)為浮點(diǎn)數(shù)的字符统求,則不再進(jìn)行往后轉(zhuǎn)換检碗,返回已經(jīng)轉(zhuǎn)好的部分。
如果參數(shù)不是字符串码邻,或者字符串的第一個(gè)字符不能轉(zhuǎn)化為浮點(diǎn)數(shù)折剃,則返回NaN。
parseFloat會(huì)將空字符串轉(zhuǎn)為NaN像屋。`parseFloat('') // NaN `
這些特點(diǎn)使得parseFloat的轉(zhuǎn)換結(jié)果不同于Number函數(shù)怕犁。
```parseFloat(true)  // NaN
Number(true) // 1
parseFloat(null) // NaN
Number(null) // 0
parseFloat('') // NaN
Number('') // 0
parseFloat('123.45#') // 123.45
Number('123.45#') // NaN```

####6.==與===有什么區(qū)別
- ==(equality 等同)兩邊值類(lèi)型不同的時(shí)候,要先進(jìn)行類(lèi)型轉(zhuǎn)換,再比較奏甫。 
如果兩個(gè)值類(lèi)型相同戈轿,則執(zhí)行嚴(yán)格相等的運(yùn)算。
如果兩個(gè)值的類(lèi)型不同:
如果一個(gè)是null扶檐,一個(gè)是undefined凶杖,那么相等胁艰;
如果一個(gè)是數(shù)字款筑,一個(gè)是字符串,先將字符串轉(zhuǎn)為數(shù)字腾么,然后比較奈梳;
如果一個(gè)值是true/false則將其轉(zhuǎn)為1/0比較;
如果一個(gè)值是對(duì)象解虱,一個(gè)是數(shù)字或字符串攘须,則嘗試使用valueOf和toString轉(zhuǎn)換后比較;
其它就不相等了殴泰。
```null==undefined;
NaN==NaN
"1"==true```

- ===(identity 恒等)是嚴(yán)格意義的相等于宙,不做類(lèi)型轉(zhuǎn)換,類(lèi)型不同的一定不等悍汛。 需注意NaN和NaN不等捞魁。

####7.break與continue有什么區(qū)別
- break 用于強(qiáng)制退出循環(huán)體,執(zhí)行循環(huán)后面的語(yǔ)句离咐。
- continue 用于退出本次循環(huán)谱俭,執(zhí)行下次循環(huán)。

```for(var i = 1; i< 10; i++){
    if(i % 4 === 0){
        break;
    }
    console.log(i);
}```
輸出結(jié)果為1 2 3 宵蛀,當(dāng)i=4時(shí)昆著,執(zhí)行if語(yǔ)句,遇到break會(huì)跳出整個(gè)循環(huán)术陶,結(jié)束凑懂。

```for(var i = 1; i< 10; i++){
    if(i % 4 === 0){
        continue;
    }
    console.log(i);
}```
輸出結(jié)果為1 2 3 5 6 7 8 9,當(dāng)i=4時(shí)梧宫,執(zhí)行if語(yǔ)句征候,遇到continue會(huì)接著循環(huán),當(dāng)i=10時(shí)才結(jié)束祟敛。

####8.void 0 和 undefined在使用場(chǎng)景上有什么區(qū)別
- undefined 不能被重寫(xiě)疤坝。但是在局部作用域中,還是可以被重寫(xiě)的馆铁,所以u(píng)ndefined現(xiàn)常用于全局環(huán)境跑揉。
- void 運(yùn)算符通常只用于獲取 undefined 的原始值,一般使用 void(0),在上述情況中历谍,也可以使用全局變量undefined 來(lái)代替(假定其仍是默認(rèn)值)现拒。
而 void 可以給任何給定的表達(dá)式求值,并返回 undefined,并且 void 不能被重寫(xiě)望侈,因此void 0是在局部作用域中替代undefined的最佳選擇印蔬。

####9.以下代碼的輸出結(jié)果是?為什么?
```console.log(1+1);//2 兩個(gè)值都為number故直接計(jì)算結(jié)果為2
console.log("2"+"4"); //24 "2"與"4"都為字符串,相加的結(jié)果也是字符串"24"
console.log(2+"4"); //24 "4"為字符串脱衙,2則轉(zhuǎn)換為字符串才能相加侥猬,結(jié)果為"24"
console.log(+"4");//4 只有一個(gè)字符串會(huì)轉(zhuǎn)換成數(shù)字輸出,4```

####10. 以下代碼的輸出結(jié)果是?
```var a = 1;  
a+++a;//3 ++的優(yōu)先級(jí)大于+捐韩,先執(zhí)行a++退唠,a++為1,a的值變?yōu)?荤胁,故a++加上a的值為3  
typeof a+2;//number2```

typeof的優(yōu)先級(jí)高于+瞧预,故順序?yàn)椋╰ypeof a)+2,typeof a的結(jié)果為number仅政,number+2的結(jié)果為字符串number2

####11. 以下代碼的輸出結(jié)果是? 為什么
 ```var a = 1;
 var b = 3;
 console.log( a+++b );//4```
++的優(yōu)先級(jí)高于+垢油,故順序?yàn)椋╝++)+b,a++為1圆丹,b為3滩愁,故結(jié)果為4

####12. 遍歷數(shù)組,把數(shù)組里的打印數(shù)組每一項(xiàng)的平方
 ```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(var prop in obj){
    console.log(prop);
}```

####14. 以下代碼輸出結(jié)果是? 為什么 (選做題目)
```var a = 1, b = 2, c = 3;
var val = typeof a + b || c >0
console.log(val) //number2```

按照優(yōu)先級(jí)运褪,首先是typeof a為number
number+b惊楼,b的值為2,故結(jié)果為字符串number2
c>0為true秸讹,最后number2 || true為number2

```var d = 5;
var data = d ==5 && console.log('bb')
console.log(data)//bb```

按照優(yōu)先級(jí)檀咙,console.log('bb')為bb,d==5為true
true&&bb為bb璃诀,賦值給data

```var data2 = d = 0 || console.log('haha')
console.log(data2)//haha```
按照優(yōu)先級(jí)弧可,console.log('haha')為haha,把0賦值給d
false || haha為haha劣欢,賦值給data2
 
```var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x)//2```
兩次邏輯非抵消棕诵,字符串空為false非空為true,var=true+(false+true)凿将,1+1=2
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末校套,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子笛匙,更是在濱河造成了極大的恐慌侨把,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妹孙,死亡現(xiàn)場(chǎng)離奇詭異秋柄,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)蠢正,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)骇笔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人嚣崭,你說(shuō)我怎么就攤上這事笨触。” “怎么了有鹿?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵旭旭,是天一觀的道長(zhǎng)谎脯。 經(jīng)常有香客問(wèn)我葱跋,道長(zhǎng),這世上最難降的妖魔是什么源梭? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任娱俺,我火速辦了婚禮,結(jié)果婚禮上废麻,老公的妹妹穿的比我還像新娘荠卷。我一直安慰自己,他們只是感情好烛愧,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布油宜。 她就那樣靜靜地躺著,像睡著了一般怜姿。 火紅的嫁衣襯著肌膚如雪慎冤。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,036評(píng)論 1 285
  • 那天沧卢,我揣著相機(jī)與錄音蚁堤,去河邊找鬼。 笑死但狭,一個(gè)胖子當(dāng)著我的面吹牛披诗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播立磁,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼呈队,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了唱歧?” 一聲冷哼從身側(cè)響起宪摧,我...
    開(kāi)封第一講書(shū)人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后绍刮,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體温圆,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年孩革,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了岁歉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锅移。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡饱搏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出推沸,到底是詐尸還是另有隱情,我是刑警寧澤肺素,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布宇驾,位于F島的核電站,受9級(jí)特大地震影響课舍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜筝尾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望栖忠。 院中可真熱鬧贸街,春花似錦、人聲如沸薛匪。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至岩齿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間盹沈,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工做裙, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肃晚,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓拧廊,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親卦绣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子飞蚓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

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