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

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

Javascript的數(shù)據(jù)類型精居,共有六種:

  • 數(shù)值(number):整數(shù)和小數(shù)
  • 字符串(string): 字符組成的文本
  • 布爾值(boolean): true和false
  • undefined: 表示“未定義”或不存在茶行,即此處沒有任何值
  • null:表示空缺,即此處應(yīng)有一個(gè)值楞慈,但目前為空
  • 對(duì)象(object): 各種值組成的集合。

通常囚戚,將數(shù)值氮唯,字符串褒侧,布爾值稱為原始類型良风,即它們是最基本的數(shù)據(jù)類型,不能再細(xì)分了闷供。而將對(duì)象稱為復(fù)雜類型的值烟央,因?yàn)橐粋€(gè)對(duì)象往往是多個(gè)原始類型的值得合成,可以看作是一個(gè)存放各種值得容器歪脏。至于undefinednull,一般將它們看成兩個(gè)特殊值疑俭。

基本類型和復(fù)雜類型的區(qū)別:

  • 基本類型變量存的是值,復(fù)雜類型的變量存的是內(nèi)存地址
  • 基本類型再賦值的時(shí)候拷貝值婿失,復(fù)雜類型再賦值的時(shí)候只拷貝地址钞艇,不拷貝值。

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

typeof是一元運(yùn)算符豪硅,用來返回操作類型的字符串哩照。typeof實(shí)際的應(yīng)用場(chǎng)景,就是用來檢測(cè)一個(gè)對(duì)象是否已經(jīng)定義或者是否已賦值懒浮,不是用來檢查對(duì)象的類型飘弧。為了檢測(cè)一個(gè)對(duì)象的類型,強(qiáng)烈推薦使用Object.prototype.toString方法,應(yīng)盡量避免使用?typeof操作符次伶。
instanceof運(yùn)算符用來測(cè)試一個(gè)對(duì)象是否在其原型鏈原型構(gòu)造函數(shù)的屬性痴昧,object instanceof constructor
instanceof操作符用來比較兩個(gè)操作數(shù)的構(gòu)造函數(shù)。只有在比較自定義的對(duì)象時(shí)才有意義冠王。如果用來比較內(nèi)置類型赶撰,將會(huì)和typeof操作符一樣用處不大。

3. 如何判斷一個(gè)變量是否是數(shù)字版确、字符串扣囊、布爾、函數(shù)

//判斷是否是數(shù)字
var a = 1;
typeof a === 'number';
//更加保險(xiǎn)的方式
Object.prototype.toString.call(a) === '[object Number]';
//判斷是否是字符串
var s = 'hello'
Object.prototype.toString.call(s) === '[object String]'
//判斷布爾
var b = false;
Object.prototype.toString.call(b) === '[object Boolean]';
//判斷函數(shù)
function fn(){}
Object.prototype.toString.call(fn) === '[object Function]';

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

  • NaN是全局屬性代表 Not-A-Number绒疗。
  • NaN屬性的初始值就是NaN,和Number.NaN的值一樣
  • 通常都是在計(jì)算失敗時(shí)侵歇,作為Math的某個(gè)方法的返回值出現(xiàn)或者嘗試將一個(gè)字符串解析成數(shù)字失敗了的時(shí)候。
  • typeof NaN //number也就是說NaN是一種特殊的Number類型值

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

  1. Number()函數(shù)

    • 如果是 Boolean 值吓蘑,true 和 false 將分別被轉(zhuǎn)換為 1 和0惕虑;
    • 如果是數(shù)字值,只是簡(jiǎn)單的傳入和返回磨镶;
    • 如來是null 值溃蔫,返回 0;
    • 如果是 undefined琳猫,返回NaN 伟叛;
    • 如果是字符串,遵循下列規(guī)則:
      • 如果字符串中只包含數(shù)字脐嫂,則將其轉(zhuǎn)換為十進(jìn)制數(shù)值统刮,即"1"會(huì)變成1 , "123"會(huì)變成123账千,而"011"會(huì)變成11(注意侥蒙,前導(dǎo)的0被忽略了);
      • 如果字符串中包含有效的浮點(diǎn)格式匀奏, 如"1.1"鞭衩,則將其轉(zhuǎn)換為對(duì)應(yīng)的浮點(diǎn)數(shù)值(同樣,也會(huì)忽略前導(dǎo)零)娃善;
      • 如果字符串中包含有效的十六進(jìn)制格式论衍,例如"0xf",則將其轉(zhuǎn)換為相同大小的十進(jìn)制整數(shù)值聚磺;
      • 如果字符串是空的(不包含任何字符) 坯台,則將其轉(zhuǎn)換為0;
      • 如果字符串中包含除上述格式之外的字符咧最,則將其轉(zhuǎn)換為 NaN捂人。
    • 如果是對(duì)象御雕,則調(diào)用對(duì)象的 valueOf() 方法,然后依照前面的規(guī)則轉(zhuǎn)換返回的值滥搭。如果轉(zhuǎn)換的結(jié)果是 NaN酸纲,則調(diào)用對(duì)象的 toString() 方法,然后再次依照前面的規(guī)則轉(zhuǎn)換返回的字符串值瑟匆。
  2. parseInt()
    由于Number()函數(shù)在轉(zhuǎn)換字符串的時(shí)候比較復(fù)雜而且不夠合理闽坡,因此在處理整數(shù)的時(shí)候更常用的是parseInt()
    parselnt() 函數(shù)在轉(zhuǎn)換字符串時(shí)愁溜,更多的是看其是否符合數(shù)值模式疾嗅,它會(huì)忽略字符串前面的空格,直至找到第一個(gè)非空格字符冕象;如果第一個(gè)字符不是數(shù)字字符或者負(fù)號(hào)代承,parseInt() 就會(huì)返回 NaN;也就是說渐扮,用parselnt() 轉(zhuǎn)換空字符時(shí)會(huì)返回 NaN(Nurnber() 對(duì)空字符返回 0)论悴; 如果第一個(gè)字符是數(shù)字字符,parselnt() 會(huì)繼續(xù)解析第二個(gè)字符墓律,直到解析完所有后續(xù)字符或者遇到了一個(gè)非數(shù)字字符膀估。例如,"1234blue"會(huì)被轉(zhuǎn)換為1234 耻讽,因?yàn)?blue"會(huì)被完全忽略察纯;類似地,"'22.5"會(huì)被轉(zhuǎn)換為22 针肥,因?yàn)樾?shù)點(diǎn)并不是有效的數(shù)字字符饼记。

  3. parseFloat()
    與 parseInt () 函數(shù)類似,parseFloat () 也是從第一個(gè)字符(位置0)開始解析每個(gè)字符祖驱。而且也是一直解析到字符串末尾握恳,或者解析到遇見一個(gè)無效的浮點(diǎn)數(shù)字字符為止瞒窒。也就是說捺僻,字符串中的
    第一個(gè)小數(shù)點(diǎn)是有效的,而第二個(gè)小數(shù)點(diǎn)就是無效的了崇裁,因此它后面的字符串將被忽略匕坯。舉例來說,"22.34.5"將會(huì)被轉(zhuǎn)換為22.34 拔稳。

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

  • 嚴(yán)格相等葛峻,使用===

    全等操作符比較兩個(gè)值是否相等,兩個(gè)被比較的值在比較前都不進(jìn)行隱式轉(zhuǎn)換巴比。如果兩個(gè)被比較的值具有不同的類型术奖,這兩個(gè)值是不全等的礁遵。在日常中使用全等操作幾乎是正確的選擇

  • 寬松相等,使用==

    相等操作符比較兩個(gè)值是否相等采记,在比較前將兩個(gè)被比較的值轉(zhuǎn)換為相同類型佣耐。在轉(zhuǎn)換后,最終的比較等于全等操作符===的比較方式唧龄。一般都會(huì)將 string,boolean類型轉(zhuǎn)換為number 進(jìn)行比較兼砖。如果一個(gè)值是對(duì)象,一個(gè)是數(shù)字或字符串既棺,則嘗試使用valueOftoString轉(zhuǎn)換后比較讽挟。

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);
}
// 輸出123

for(var i = 1; i< 10; i++){
    if(i % 4 === 0){
        continue;
    }

    console.log(i);
}
//輸出12356789

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

void運(yùn)算符對(duì)給定的表達(dá)式進(jìn)行求值耽梅,然后返回undefined。一般使用void(0)等同于void 0胖烛,來獲取undefined的原始值褐墅。void是不能 被重寫的。
常用的使用方法:

(function (undefined) {
  //...
  if (foo !== undefined) {
    // ...
  }
})();

9. 以下代碼輸出結(jié)果是什么洪己?為什么妥凳?

console.log(1+1);    // 2
console.log("2"+"4");  //24
console.log(2+"4");  //24
console.log(+"4");  //4

加號(hào)

  • 在兩個(gè)操作數(shù)都是數(shù)字的時(shí)候,會(huì)做加法運(yùn)算
  • 兩個(gè)參數(shù)都是字符串或在有一個(gè)參數(shù)是字符串的情況下會(huì)把另外一個(gè)參數(shù)轉(zhuǎn)換為字符串做字符串拼接
  • 在參數(shù)有對(duì)象的情況下會(huì)調(diào)用其valueOf()或toString
  • 在只有一個(gè)字符串參數(shù)的時(shí)候會(huì)嘗試將其轉(zhuǎn)換為數(shù)字
  • 在只有一個(gè)數(shù)字參數(shù)的時(shí)候返回其正數(shù)值

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

var a = 1;  
a+++a;  //3
typeof a+2; //'number2'

11. 以下代碼的輸出結(jié)果

 var a = 1;
var b = 3;
console.log( a+++b ); //4 

a++ 先賦值再自增 a+++b = 1+3

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

 var arr = [3,4,5];
 //基本
 for(var i=0; i<arr.length; i++) {
  arr[i] = arr[i] * arr[i];
}

console.log(arr);
//map
arr = arr.map(function(value) {
  return value * value;
});

console.log(arr);

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

var obj = {
 name: 'hunger', 
 sex: 'male', 
 age: 28 
}

for(property in obj){
  console.log(obj[property]);
}

console.log(Object.values(obj));

14. 以下代碼輸出結(jié)果是什么逝钥?

var a = 1, b = 2, c = 3;
var val = typeof a + b || c >0
console.log(val) 
//number2
//邏輯與的短路計(jì)算 number2||true 打印出前一個(gè)字符串

var d = 5;
var data = d ==5 && console.log('bb')
console.log(data)
//bb 
//首先計(jì)算 d ==5 && console.log('bb') 輸出 true&&bb, 答應(yīng)bb

var data2 = d = 0 || console.log('haha')
console.log(data2)
//haha
// d = 0 || console.log('haha'), d 被賦值haha 再賦值給data2
 
var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x)
// 2
// true + true
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市拱镐,隨后出現(xiàn)的幾起案子艘款,更是在濱河造成了極大的恐慌,老刑警劉巖沃琅,帶你破解...
    沈念sama閱讀 222,378評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哗咆,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡益眉,警方通過查閱死者的電腦和手機(jī)晌柬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來郭脂,“玉大人年碘,你說我怎么就攤上這事≌辜Γ” “怎么了屿衅?”我有些...
    開封第一講書人閱讀 168,983評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)莹弊。 經(jīng)常有香客問我涤久,道長(zhǎng)涡尘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,938評(píng)論 1 299
  • 正文 為了忘掉前任响迂,我火速辦了婚禮悟衩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘栓拜。我一直安慰自己座泳,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評(píng)論 6 398
  • 文/花漫 我一把揭開白布幕与。 她就那樣靜靜地躺著挑势,像睡著了一般。 火紅的嫁衣襯著肌膚如雪啦鸣。 梳的紋絲不亂的頭發(fā)上潮饱,一...
    開封第一講書人閱讀 52,549評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音诫给,去河邊找鬼香拉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛中狂,可吹牛的內(nèi)容都是我干的凫碌。 我是一名探鬼主播,決...
    沈念sama閱讀 41,063評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼胃榕,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼盛险!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起勋又,我...
    開封第一講書人閱讀 39,991評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤苦掘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后楔壤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鹤啡,經(jīng)...
    沈念sama閱讀 46,522評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評(píng)論 3 342
  • 正文 我和宋清朗相戀三年蹲嚣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了递瑰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,742評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡端铛,死狀恐怖泣矛,靈堂內(nèi)的尸體忽然破棺而出疲眷,到底是詐尸還是另有隱情禾蚕,我是刑警寧澤,帶...
    沈念sama閱讀 36,413評(píng)論 5 351
  • 正文 年R本政府宣布狂丝,位于F島的核電站换淆,受9級(jí)特大地震影響哗总,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜倍试,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評(píng)論 3 335
  • 文/蒙蒙 一讯屈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧县习,春花似錦涮母、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至彤钟,卻和暖如春来候,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背逸雹。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工营搅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人梆砸。 一個(gè)月前我還...
    沈念sama閱讀 49,159評(píng)論 3 378
  • 正文 我出身青樓转质,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親帖世。 傳聞我的和親對(duì)象是個(gè)殘疾皇子峭拘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評(píng)論 2 361

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