數(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):各種值組成的集合

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

數(shù)值露乏、字符串碧浊、布爾值稱為原始類型(primitive type)的值,即它們是最基本的數(shù)據(jù)類型瘟仿,不能再細(xì)分了箱锐。
將對(duì)象稱為復(fù)雜類型(complex type)的值,因?yàn)橐粋€(gè)對(duì)象往往是多個(gè)原始類型的值的合成猾骡,可以看作是一個(gè)存放各種值的容器瑞躺。
至于undefined和null敷搪,一般將它們看成兩個(gè)特殊值。

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

JavaScript有三種方法幢哨,可以確定一個(gè)值到底是什么類型赡勘。

  • typeof運(yùn)算符
  • instanceof運(yùn)算符
  • Object.prototype.toString方法

typeof 是一個(gè)一元運(yùn)算,放在一個(gè)運(yùn)算數(shù)之前捞镰,運(yùn)算數(shù)可以是任意類型闸与。
它返回值是一個(gè)字符串,該字符串說明運(yùn)算數(shù)的類型岸售。
數(shù)值践樱、字符串、布爾值分別返回number凸丸、string拷邢、boolean。
函數(shù)返回function屎慢。
undefined返回undefined瞭稼。

利用這一點(diǎn),typeof可以用來檢查一個(gè)沒有聲明的變量腻惠,而不報(bào)錯(cuò)环肘。

v  // ReferenceError: v is not defined
typeof v // "undefined"

實(shí)際編程中,這個(gè)特點(diǎn)通常用在判斷語句集灌。

// 錯(cuò)誤的寫法
if (v) { }  // ReferenceError: v is not defined

// 正確的寫法
if (typeof v === "undefined") { }

除此以外悔雹,其他情況都返回object。

在使用 typeof 運(yùn)算符時(shí)采用引用類型存儲(chǔ)值會(huì)出現(xiàn)一個(gè)問題欣喧,無論引用的是什么類型的對(duì)象腌零,它都返回 "object"。ECMAScript 引入了另一個(gè) Java 運(yùn)算符 instanceof 來解決這個(gè)問題续誉。

instanceof是一個(gè)二元操作符(運(yùn)算符)莱没,和==初肉,>酷鸦,<是同一類東西。由于它是由字母組成的牙咏,它的作用是判斷其左邊對(duì)象是否為其右邊類的實(shí)例臼隔,返回boolean類型的數(shù)據(jù)。

 expression  instanceof  class

如var a=new Array();alert(a instanceof Array);會(huì)返回true妄壶,同時(shí)alert(a instanceof Object)也會(huì)返回true;這是因?yàn)锳rray是object的子類摔握。

instanceof 運(yùn)算符與 typeof 運(yùn)算符相似,用于識(shí)別正在處理的對(duì)象的類型丁寄。與 typeof 方法不同的是氨淌,instanceof 方法要求開發(fā)者明確地確認(rèn)對(duì)象為某特定類型泊愧。例如:

var oStringObject = new String("hello world");
alert(oStringObject instanceof String); //輸出 "true"

這段代碼問的是“變量 oStringObject 是否為 String 對(duì)象的實(shí)例?”oStringObject 的確是 String 對(duì)象的實(shí)例盛正,因此結(jié)果是 "true"删咱。盡管不像 typeof 方法那樣靈活,但是在 typeof 方法返回 "object" 的情況下豪筝,instanceof 方法還是很有用的痰滋。

3.如何判斷一個(gè)變量是否是數(shù)字、字符串续崖、布爾敲街、函數(shù)

typeof運(yùn)算符
instanceof 運(yùn)算符
Object.prototype.toString方法


Paste_Image.png

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

NaN含義是Not a Number,表示非數(shù)字严望,NaN和任何值都不相等多艇,包括自己.

        NaN===NaN;//false

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

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

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

Number()

Number() 函數(shù)把對(duì)象的值轉(zhuǎn)換為數(shù)字。

如果是Boolean值像吻,true和false值將分別被轉(zhuǎn)換為1和0墩蔓。

如果是數(shù)字值,只是簡(jiǎn)單的傳入和返回萧豆。

如果是null值奸披,返回0。

如果是undefined涮雷,返回NaN阵面。

如果是字符串:

a. 如果字符串中只包含數(shù)字時(shí),將其轉(zhuǎn)換為十進(jìn)制數(shù)值洪鸭,忽略前導(dǎo)0

b. 如果字符串中包含有效浮點(diǎn)格式样刷,如“1.1”,將其轉(zhuǎn)換為對(duì)應(yīng)的浮點(diǎn)數(shù)字览爵,忽略前導(dǎo)0

c. 如果字符串中包含有效的十六進(jìn)制格式置鼻,如“0xf”,將其轉(zhuǎn)換為相同大小的十進(jìn)制數(shù)值

d. 如果字符串為空蜓竹,將其轉(zhuǎn)換為0

e. 如果字符串中包含除上述格式之外的字符箕母,則將其轉(zhuǎn)換為NaN

如果是對(duì)象,則調(diào)用對(duì)象的valueOf()方法俱济,然后依照前面的規(guī)則轉(zhuǎn)換返回的值嘶是。如果轉(zhuǎn)換的結(jié)果是NaN,則調(diào)用對(duì)象的toString()方法蛛碌,然后再依照前面的規(guī)則轉(zhuǎn)換返回的字符串值聂喇。

f.如果參數(shù)是 Date 對(duì)象,Number() 返回從 1970 年 1 月 1 日至今的毫秒數(shù)蔚携。
g.如果對(duì)象的值無法轉(zhuǎn)換為數(shù)字希太,那么 Number() 函數(shù)返回 NaN克饶。

<script type="text/javascript">
  var test1= new Boolean(true);
  var test2= new Boolean(false);
  var test3= new Date();
  var test4= new String("999");
  var test5= new String("999 888");

  document.write(Number(test1)+ "<br />");/*1*/
  document.write(Number(test2)+ "<br />");/*0*/
  document.write(Number(test3)+ "<br />");/*1501466061880*/
  document.write(Number(test4)+ "<br />");/*999*/
  document.write(Number(test5)+ "<br />");/*NaN*/

parseInt parseFloat

忽略字符串前面的空白字符,找到第一個(gè)非空白字符
如果第一個(gè)字符不是-或者數(shù)字返回NaN
如果是繼續(xù)解析誊辉,直到非數(shù)值模式為止
0開頭會(huì)當(dāng)做八進(jìn)制彤路,0x開頭會(huì)當(dāng)做十六進(jìn)制,但是可以指定第二個(gè)參數(shù)指定基數(shù)

parseInt('blue'); //NaN
parseInt('-23ABS'); // -23
parseInt('0xf1'); // 241
parseInt('101', 2); // 5

與parseInt() 函數(shù)類似芥映,parseFloat() 也是從第一個(gè)字符(位置0)開始解析每一個(gè)字符洲尊。也是一直解析到字符串末尾,或者解析到遇見一個(gè)無效的浮點(diǎn)數(shù)字字符為止奈偏。
也就是說坞嘀,字符串中第一個(gè)小數(shù)點(diǎn)是有效的,而第二個(gè)小數(shù)點(diǎn)就是無效的了惊来,它后面的字符串將被忽略丽涩。
parseFloat() 只解析十進(jìn)制,因此它沒有第二個(gè)參數(shù)指定基數(shù)的用法
如果字符串中包含的是一個(gè)可解析為正數(shù)的數(shù)(沒有小數(shù)點(diǎn)裁蚁,或者小數(shù)點(diǎn)后都是零)矢渊,parseFloat() 會(huì)返回整數(shù)。
例:

var num1 = parseFloat("123AF"); //123
var num2 = parseFloat("0xA"); //0
var num3 = parseFloat("22.5");  //22.5
var num4 = parseFloat("22.3.56");  //22.3
var num5 = parseFloat("0908.5"); //908.5

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

==相等
===嚴(yán)格相等
===是嚴(yán)格意義的相等枉证,只需注意NaN和NaN不等就行
使用==的時(shí)候矮男,javascript會(huì)幫我們做類型轉(zhuǎn)換,

  • 1.如果兩個(gè)值類型相同室谚,則執(zhí)行嚴(yán)格相等的運(yùn)算

  • 2.如果兩個(gè)值的類型不同

  • 3.如果一個(gè)是null毡鉴,一個(gè)是undefined,那么相等

  • 4.如果一個(gè)是數(shù)字秒赤,一個(gè)是字符串猪瞬,先將字符串轉(zhuǎn)為數(shù)字,然后比較

  • 5.如果一個(gè)值是true/false則將其轉(zhuǎn)為1/0比較

  • 6.如果一個(gè)值是對(duì)象入篮,一個(gè)是數(shù)字或字符串陈瘦,則嘗試使用valueOf和toString轉(zhuǎn)換后比較

  • 7.其它就不相等了

    null==undefined;
    NaN==NaN
    "1"==true

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 在 ES5 中已經(jīng)是全局對(duì)象的一個(gè)只讀(read-only)屬性了痊项,它不能被重寫。但是在局部作用域中饲做,還是可以被重寫的线婚。
所以u(píng)ndefined現(xiàn)常用于全局環(huán)境

void (expression)只計(jì)算表達(dá)式遏弱,而無返回值

void 運(yùn)算符通常只用于獲取 undefined 的原始值盆均,一般使用 void(0)(等同于 void 0)。在上述情況中漱逸,也可以使用全局變量undefined 來代替(假定其仍是默認(rèn)值)泪姨。
而 void 可以給任何給定的表達(dá)式求值,并返回 undefined,并且 void 不可被重寫,因此void 0是在局部作用域中替代undefined的最佳選擇

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

console.log(1+1);    //2
console.log("2"+"4");  //字符串“24”
console.log(2+"4"); //“24”數(shù)字轉(zhuǎn)換為字符串拼接奢啥,但是如果是減法就是字符串轉(zhuǎn)換為數(shù)字再相減
console.log(+"4");4

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

var a = 1;  
a+++a;  //因?yàn)?+的優(yōu)先級(jí)比+高所以相當(dāng)于(a++)+a; 1+2=3
typeof a+2;"http://number2" typeof優(yōu)先級(jí)相當(dāng)高此時(shí)就相當(dāng)于先typeof a再加上2髓抑,"number"+2="number2"。一般要對(duì)typeof后的表達(dá)式加上括號(hào)仗处。

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

 var a = 1;
 var b = 3;
 console.log( a+++b );//(a++)+b 結(jié)果為4(a先用再自加)

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

 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(obj[key]);
  }

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

var a = 1, b = 2, c = 3;
var val = typeof a + b || c >0
console.log(val) ;

number2

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

bb
undefined

var data2 = d = 0 || console.log('haha')
console.log(data2)

haha
undefined

var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x)

2
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市婆誓,隨后出現(xiàn)的幾起案子吃环,更是在濱河造成了極大的恐慌,老刑警劉巖洋幻,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件郁轻,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡文留,警方通過查閱死者的電腦和手機(jī)好唯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來燥翅,“玉大人骑篙,你說我怎么就攤上這事∩椋” “怎么了替蛉?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)拄氯。 經(jīng)常有香客問我躲查,道長(zhǎng),這世上最難降的妖魔是什么译柏? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任镣煮,我火速辦了婚禮,結(jié)果婚禮上鄙麦,老公的妹妹穿的比我還像新娘典唇。我一直安慰自己,他們只是感情好胯府,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布介衔。 她就那樣靜靜地躺著,像睡著了一般骂因。 火紅的嫁衣襯著肌膚如雪炎咖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音乘盼,去河邊找鬼升熊。 笑死,一個(gè)胖子當(dāng)著我的面吹牛绸栅,可吹牛的內(nèi)容都是我干的级野。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼粹胯,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼蓖柔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起风纠,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤渊抽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后议忽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體懒闷,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年栈幸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了愤估。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡速址,死狀恐怖玩焰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情芍锚,我是刑警寧澤昔园,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站并炮,受9級(jí)特大地震影響默刚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜逃魄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一荤西、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧伍俘,春花似錦邪锌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至妨退,卻和暖如春妇萄,著一層夾襖步出監(jiān)牢的瞬間蜕企,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工嚣伐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留糖赔,地道東北人萍丐。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓轩端,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親逝变。 傳聞我的和親對(duì)象是個(gè)殘疾皇子基茵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

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