進階任務2 數據類型運算符流程控制語句 作業

1. JavaScript 定義了幾種數據類型? 哪些是原始類型?哪些是復雜類型?原始類型和復雜類型的區別是什么?

  • 數值 number:整數和小數
  • 字符串 string:字符組成的文本
  • 布爾型 boolean:true 和 false 兩個特定值
  • undefined:表示“未定義”或“不存在”,即此處目前沒有任何值
  • null:表示空缺,即此處應該有一個值,但目前為空
  • 對象 object:各種值組成的集合,可以看為一個容器

數值、字符串、布爾值稱為原始類型(primitive type)的值,即它們是最基本的數據類型, 不能再拆分。

將對象稱為復雜類型(complex type)的值,因為一個對象往往是多個原始類型的值的合成,可以看作是一個存放各種值的容器。

undefined 和 null,一般被看作兩個特殊值。


2. typeof 和 instanceof 的作用和區別?

typeof 用以獲取一個變量或者表達式的類型,typeof 一般只能返回如下幾個結果:
number,boolean,string,function,undefined,object(包括 NULL,數組,對象)。

typeof (123); //返回"number"
typeof ("123"); //返回"string"

我們可以使用typeof來獲取一個變量是否存在,如 if ( typeof v != "undefined" ) { },而不要去使用if(v)因為如果v不存在(未聲明)則會出錯,錯誤顯示 v 沒有聲明。

由于 typeof 遇到 null、數組、對象時都會返回object類型,所以當我們要判斷一個對象是否是數組時、判斷某個變量是否是某個對象的實例時,要選擇使用另一個關鍵語法instanceof

instanceof 用于判斷一個變量是否某個對象的實例,如

var a=new Array();
console.log(a instanceof Array);

會返回 true,同時 alert(a instanceof Object) 也會返回true;這是因為 Array 是 object 的子類。
再如:

function test(){};
var a=new test();
console.log(a instanceof test);

會返回 true。


3. 如何判斷一個變量是否是數字、字符串、布爾、函數

利用 typeof( ) 操作符,其可以返回 undefined/boolean/number/string/function/object 等字符串,用以判斷變量類型。


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

NaN 是非數值(Not a number)的意思,其自身是一個特殊的數值,用于表示一個本來要返回數值的操作數未返回數值的情況,這樣子就可以避免拋出錯誤。
NaN 有兩個特點:

  • 任何設計 NaN 的操作都會返回 NaN;
  • NaN 與任何值都不相等,包括 NaN 本身,NaN==NaN 會返回 false

5. 如何把非數值轉化為數值?

有三個函數可以把非數值轉換為數值

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

利用+號也可以將非數值轉化為數值

6. ==與===有什么區別

===是嚴格意義的相等,只需注意 NaN 和 NaN 不等就行了。<span style="color:red">一般寫代碼都要用===。</span>而使用==的時候,javascript會幫我們做類型轉換,造成一些特別的結果:

  • 如果兩個值類型相同,則執行嚴格相等的運算
  • 如果兩個值的類型不同
  1. 如果一個是 null,一個是 undefined,那么相等
  2. 如果一個是數字,一個是字符串,先將字符串轉為數字,然后比較
  3. 如果一個值是 true/false 則將其轉為 1/0 比較
  4. 如果一個值是對象,一個是數字或字符串,則嘗試使用 valueOf 和 toString 轉換后比較

7. break與continue有什么區別

break 和 continue 語句用于在循環中精準的控制代碼的執行,其中 break 語句會立即退出循環,強制繼續執行循環后面的語句。而 continue 語句雖然也是立即退出循環,但退出循環后會從循環的頂部繼續執行。

var num = 0;
for(var i=0; i<10; i++) {
    if(i==5){
        break;
    }
    num++;
}
console.log(num);
 // 循環結束后,num 值為4,i 總共循環5次,第5次時 break 循環打斷,num++ 沒有再執行
var num = 0;
for(var i=0; i<10; i++) {
    if(i==5){
        continue;
    }
    num++;
}
console.log(num);
//循環結束后,num 值為9,i 循環10次,第5次時 continue 將下一步 num++ 跳過,直接進行下一次循環

8. void 0 和 undefined 在使用場景上有什么區別

undefined 并不是保留字,而是全局對象的一個屬性,在 ES5 之前的版本中可以被重寫,在某些極端情況下使用 undefined 會出現一些錯誤。

void 運算符能對給定的表達式進行求值,然后返回 undefined。也就是說,void 后面隨便跟上一個表達式,返回的都是 undefined,可以完美代替 undefined。其中最短的就是 void 0 了,其實 void 1,void (1+1),void (0) 或者 void “hello”,void (new Date()) 等都是一樣的。

最重要的是,void 是不能被重寫的(cannot be overidden)。并且在 ES5 大環境下,用 void 0 代替 undefined 能節省不少字節的大小。


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

console.log(1+1);   //2,普通的數值相加
console.log("2"+"4");  //"24",字符串相加結果是兩個字符串的拼接
console.log(2+"4");  // "24",數值和字符串相加,數值轉化為字符串,然后進行字符串拼接
console.log(+"4"); // 4,對字符串進行單純+運算,結果將字符串轉化為數值

10. 以下代碼的輸出結果是?

var a = 1; 
a+++a; //
typeof a+2; //number

輸出是 "number2",由于最后一行運算根據優先級,先進行 typeof a 運算得到字符串 "number",然后進行字符串和數值相加運算得到"number2"


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

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

輸出為4,因為 a+++b 先進行 a++ 運算,此時 a 的數值加1但是 a++ 的數值依然保持為1,然后與 b 做相加運算得到結果為4。


12. 遍歷數組,把數組里的打印數組每一項的平方

var arr = [3,4,5]
for (var item in arr) { 
    console.log(arr[item] * arr[item]);
}

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

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

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

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

var a = 1, b = 2, c = 3;
var val = typeof a + b || c >0;
console.log(val) ;
var d = 5;
var data = d ==5 && console.log('bb')
console.log(data)
var data2 = d = 0 || console.log('haha')
console.log(data2)

var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x)
var a = 1, b = 2, c = 3;
var val = typeof a + b || c >0;
// 運算順序為:var val = {[(typeof a) + b] || (c > 0)},
// 由于[(typeof a) + b]的值為 "number2",
// 被邏輯 || 判斷為真,所以全部運算式返回[(typeof a) + b] 的值
console.log(val) ;
// 此時顯示"number2"
var d = 5;
var data = d ==5 && console.log('bb')
// 運算順序為:var data = [(d == 5) && console.log('bb')]
// (d==5)為真,此時邏輯 && 運算返回 console.log('bb')的值即 undefined
// 同時會先顯示出'bb',然后 undefined 被賦值給 data
console.log(data)
// 顯示 undefined
var data2 = d = 0 || console.log('haha')
// 運算順序為:var data2 = [d = (0 || console.log('haha'))]
// 0 為假此時邏輯 || 運算返回 console.log('haha') 的值即為 undefined
// 同時會先顯示出 'haha',然后將 undefined 賦值給 data2
console.log(data2)
// 顯示 undefined
var x = !!"Hello" + (!"world", !!"from here!!");
// 運算順序為:var x = !!"Hello" + (!"world", !!"from here!!");
// 結果為2,空字符串為false,非空則為true,var x = true+(false+true)
// true為1,1+1=2。
console.log(x)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,431評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,637評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,555評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,900評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,629評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,976評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,976評論 3 448
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,139評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,686評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,411評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,641評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,129評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,820評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,233評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,567評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,362評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,604評論 2 380

推薦閱讀更多精彩內容