JS數據類型,運算符,流程控制語句

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

  • JavaScript定義了六種數據類型。

    • 數值(number):整數和小數(比如1和3.14)
    • 字符串(string):字符組成的文本(比如"Hello World")
    • 布爾值(boolean):true(真)和false(假)兩個特定值
    • undefined:表示“未定義”或不存在,即此處目前沒有任何值
    • null:表示空缺,即此處應該有一個值,但目前為空
    • 對象(object):各種值組成的集合,對象有三個子類型狹義的對象(object),數組(array),函數(function)。
    • Symbol 是一種特殊的、不可變的數據類型,可以作為對象屬性的標識符使用。(Symbol 生成一個全局唯一的值)
  • 原始類型

    • 數值
    • 字符串
    • 布爾值
    • Symbol
  • 復雜類型

    • 對象
  • 至于undefined和null,一般將它們看成兩個特殊值。

  • 區別

    • 數值、字符串、布爾值稱為原始類型(primitive type),即它們是最基本的數據類型,不能再細分了。
    • 對象稱為負載類型(complex type),因為一個對象往往是多個原始類型的值的合成,可以看作是一個存放各種值的容器。

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

  • typeof 是用于返回一個數據其原始的數據類型,對于常見的幾大數據類型都可以用typeof 數據類型的方式進行判斷。
typeof "ABC"           // string
typeof true            // boolean
typeof 112             // number 
typeof undefined       // undefined  
typeof null            // object  
typeof function (){}   // function
typeof {}             // object
typeof []              // object
  • instanceof 它用于判斷一個變量是否是某個對象的實例。
var o = {};
var a = [];

o instanceof Array      // false
o instanceof Object     //true  Array 是Object的子類,所以也是true
a instanceof Array      // true

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

var a = 變量;
console.log(typeof a);

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

  • NaN含義是Not a Number,表示非數字,NaN和任何值都不相等,包括自己
 NaN == NaN;         //false
 parseInt('abc');    //NaN

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

  • 有三個函數可以把非數值轉換為數值
    • Number()
    • parseInt()
    • parseFloat()
  • Number規則相當復雜而且不合理,幾乎不使用,常用的是后兩個,兩個規則類似
    1.忽略字符串前面的空白字符,找到第一個非空白字符
    2.如果第一個字符不是-或者數字返回NaN
    3.如果是繼續解析,直到非數值模式為止
    4.0開頭會當做八進制,0x開頭會當做十六進制,但是可以指定第二個參數指定基數
parseInt('blue'); //NaN
parseInt('-23ABS'); // -23
parseInt('0xf1'); // 241
parseInt('101', 2); // 5

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

  • 對于string,number等基礎類型,==和===是有區別的
    • 不同類型間比較,==比較轉化成同一類型后的值看“值”是否相等,===如果類型不同,其結果就是不等
    • 同類型比較,直接進行“值”比較,兩者結果一樣
  • 對于Array,Object等高級類型,==和===是沒有區別的
    • 進行“指針地址”比較

7.break與continue有什么區別

  • break關鍵字在switch語句中已經見過,這兩個關鍵字多用在循環語句中
    • break 用于強制退出循環體,執行循環后面的語句
    • continue 用于退出本次循環,執行下次循環

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

  • undefined在局部作用域內是會被覆蓋的,比如 var a,沒有賦值前a是undefined,經過一系列運算后,a有值了,就會被賦予新的值,a不再為undefined。
  • void 0,則是在void運算后,無論結果如何,都會返回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;                // a++ + a  ==>  1+2=3  ++的優先級比+高
typeof a+2;           // (typeof a) + 2  ==>  "number2"  typeof優先級高

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

var a = 1;
var b = 3;
console.log( a+++b );  //a++ + b  ==>  1+3=4  ++的優先級比+高

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

var arr = [3,4,5];
for(var i=0;i<arr.length;i++){
   console.log(arr[i] * arr[i]);
}
9
16
25

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

var obj = {
 name: 'hunger', 
 sex: 'male', 
 age: 28 
}
for (i in obj) {
  console.log(obj[i]);
}
hunger
male
28

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

var a = 1, b = 2, c = 3;
var val = typeof a + b || c >0
console.log(val) 
//"number2"
// (typeof a)+b 為 "number2"    c>0為false
//結果為 "number2"

var d = 5;
var data = d ==5 && console.log('bb')
console.log(data)
//bb undefined
//d ==5為true  typeof console.log('bb')的類型"undefined"為false 
//結果為輸出dd,data為undefined

var data2 = d = 0 || console.log('haha')
console.log(data2)
//haha undefined
//先 0 || console.log('haha')
// 0為false,typeof console.log('haha')的類型"undefined"為false
//結果為輸出haha,data2為undefined
 
var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x)
//2
//先 (!"world", !!"from here!!") 為(true,false), 由于(  1  ,  2 )忽略第一個操作數,返回第二個操作數,為false
// !!"Hello"為true
//true + true  同為布爾型相加轉換為數值相加
//結果為2
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容