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

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

  • JavaScript 定義了6種數(shù)據(jù)類型:
  1. 數(shù)值(number):整數(shù)和小數(shù);
  2. 字符串(string):字符組成的文本;
  3. 布爾值(boolean):true(真)和false(假);
  4. undefined:表示“未定義”或不存在,即此處目前沒有任何值;
  5. unll:表示空缺,即此處應(yīng)該有一個值,但目前為空;
  6. 對象(object):各種值組成的集合。對象有三個子類型狹義的對象(object),數(shù)組(array),函數(shù)(function)。
  • 數(shù)值、字符串、布爾值稱為原始類型(primitive type)的值,即它們是最基本的數(shù)據(jù)類型,不能再細(xì)分了。
  • 將對象稱為復(fù)雜類型(complex type)的值,因?yàn)橐粋€對象往往是多個原始類型的值的合成,可以看作是一個存放各種值的容器。
    至于undefined和null,一般將它們看成兩個特殊值。

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

  • typeof 是用于返回一個數(shù)據(jù)其原始的數(shù)據(jù)類型,對于常見的幾大數(shù)據(jù)類型都可以用typeof 數(shù)據(jù)類型的方式進(jìn)行判斷。
  • instance 是用于判斷某個對象是不是構(gòu)造函數(shù)的一個實(shí)例,返回一個布爾值。

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

console.log(typeof X);
  - 結(jié)果為number,則是數(shù)字;
  - 結(jié)果為string,則是字符串;
  - 結(jié)果為true/false,則是布爾值;
  - 結(jié)果為function,則是函數(shù)。

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

NaN(Not a Number),表示非數(shù)字。任何NaN的值進(jìn)行操作都會返回一個NaN,其次,NaN與任何值都不相等,即 NaN === NaN也是false。

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

  1. Number(mix)函數(shù),可以將任意類型的參數(shù)mix轉(zhuǎn)換為數(shù)值類型。其規(guī)則為:

  2. 如果是布爾值,true和false分別被轉(zhuǎn)換為1和0

  3. 如果是數(shù)字值,返回本身。

  4. 如果是null,返回0.

  5. 如果是undefined,返回NaN。

  6. 如果是字符串,遵循以下規(guī)則:

    • 如果字符串中只包含數(shù)字,則將其轉(zhuǎn)換為十進(jìn)制(忽略前導(dǎo)0)
    • 如果字符串中包含有效的浮點(diǎn)格式,將其轉(zhuǎn)換為浮點(diǎn)數(shù)值(忽略前導(dǎo)0)
    • 如果是空字符串,將其轉(zhuǎn)換為0
    • 如果字符串中包含非以上格式,則將其轉(zhuǎn)換為NaN
  7. 如果是對象,則調(diào)用對象的valueOf()方法,然后依據(jù)前面的規(guī)則轉(zhuǎn)換返回的值。如果轉(zhuǎn)換的結(jié)果是NaN,則調(diào)用對象的toString()方法,再次依照前面的規(guī)則轉(zhuǎn)換返回的字符串值。

  8. parseInt(string, radix)函數(shù),將字符串轉(zhuǎn)換為整數(shù)類型的數(shù)值。它也有一定的規(guī)則:

  9. 忽略字符串前面的空格,直至找到第一個非空字符

  10. 如果第一個字符不是數(shù)字符號或者負(fù)號,返回NaN

  11. 如果第一個字符是數(shù)字,則繼續(xù)解析直至字符串解析完畢或者遇到一個非數(shù)字符號為止

  12. 如果上步解析的結(jié)果以0開頭,則將其當(dāng)作八進(jìn)制來解析;如果以0x開頭,則將其當(dāng)作十六進(jìn)制來解析

  13. 如果指定radix參數(shù),則以radix為基數(shù)進(jìn)行解析

  14. parseFloat(string)函數(shù),將字符串轉(zhuǎn)換為浮點(diǎn)數(shù)類型的數(shù)值。

它的規(guī)則與parseInt基本相同,但也有點(diǎn)區(qū)別:字符串中第一個小數(shù)點(diǎn)符號是有效的,另外parseFloat會忽略所有前導(dǎo)0,如果字符串包含一個可解析為整數(shù)的數(shù),則返回整數(shù)值而不是浮點(diǎn)數(shù)值。

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

  • ==是值相等,javascript會幫我們做類型轉(zhuǎn)換;
  • ===是嚴(yán)格意義的相等,只需注意NaN和NaN不等就行了。

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

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

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

void 會執(zhí)行后面的表達(dá)式并返回 undefined,但是某些情境下undefined是可以被賦值的,比如在函數(shù)中,這樣的話就不能用undefined來進(jìn)行判斷了。所以用void 0返回undefined來進(jìn)行判斷。既減少了在原形鏈上查找 window.undefined 的時間,也避免了誤用被修改過的 undefined。

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

  console.log(1+1);    
  console.log("2"+"4");  
  console.log(2+"4"); 
  console.log(+"4");
2     //  兩個均為數(shù)字,+為運(yùn)算符。
24    //  兩個均帶引號,為字符串,+為連接符。
24    //  前一個為數(shù)字,后一個為字符串,+為連接符。
4     //  字符串。

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

var a = 1;  
a+++a;  
typeof a+2;
a+++a;   // 等于a++  +a,a++令a=2,但a++本身仍為1,所以結(jié)果為  3  。
typeof a+2;  // typeof a為number,連上2,所以結(jié)果為  number2  。

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

 var a = 1;
  var b = 3;
 console.log( a+++b );
a+++b;   // 等于a++  +b,a++令a=2,但a++本身仍為1,所以結(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(a in obj){
console.log(a+":"+obj[a])
}

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

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

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

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

4、
var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x)
1、number2
2、bb
   undefined
3、haha
   undefined
4、空字符串為false,非空則為true,var x = true+(false+true),true為1,1+1=2。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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