JavaScript 類型

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

JavaScript語言的每一個值,都屬于某一種數據類型。JavaScript的數據類型,共有六種。

  1. 數值(number):整數和小數(比如1和3.14)
  2. 字符串(string):字符組成的文本(比如"Hello World")
  3. 布爾值(boolean):true(真)和false(假)兩個特定值
  4. undefined:表示“未定義”或不存在,即此處目前沒有任何值
  5. null:表示空缺,即此處應該有一個值,但目前為空
  6. 對象(object):各種值組成的集合
  7. symbol:一個symbol值能作為對象屬性的標識符;這是該數據類型僅有的目的。

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

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

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

typeof

作用: 是一個一元運算,放在一個變量之前,變量可以是任意類型。

它返回值是一個字符串,該字符串說明變量的類型。typeof 一般只能返回如下幾個結果:number,boolean,string,function,object,undefined。

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

區別: 對于 Array,Null 等特殊對象使用 typeof 一律返回 object,這正是 typeof 的局限性。

instanceof
作用返回的是一個布爾值,判斷該變量是否某一類型。如:
var a = {};
alert(a instanceof Object); //true
var b = [];
alert(b instanceof Array); //true
區別:需要注意的是,instanceof只能用來判斷對象和函數,不能用來判斷字符串和數字等.但是,用instanceof可以判斷變量是否為數組

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

用typeof操作符

alert(typeof(1));//number
alert(typeof("abc"));//string
alert(typeof(true));//boolean
alert(typeof function(){}); // 'function'

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

NaN含義是Not a Number,表示非數字,NaN和任何值都不相等,包括自己

特別: 任何NaN的值進行操作都會返回一個NaN,其次,NaN與任何值都不相等即NaN === NaN也是false.

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

parseInt() 函數可解析一個字符串,并返回一個整數。
parseInt("10"); //返回 10

1. Number()函數

  • 如果是 Boolean 值,true 和 false 將分別被轉換為 1 和0;
  • 如果是數字值,只是簡單的傳入和返回;
  • 如來是null 值,返回 0;
  • 如果是 undefined,返回NaN ;
  • 如果是字符串,遵循下列規則:
  • 如果字符串中只包含數字,則將其轉換為十進制數值,即"1"會變成1 , "123"會變成123,而"011"會變成11(注意,前導的0被忽略了);
  • 如果字符串中包含有效的浮點格式, 如"1.1",則將其轉換為對應的浮點數值(同樣,也會忽略前導零);
  • 如果字符串中包含有效的十六進制格式,例如"0xf",則將其轉換為相同大小的十進制整數值;
    如果字符串是空的(不包含任何字符) ,則將其轉換為0;
    如果字符串中包含除上述格式之外的字符,則將其轉換為 NaN。
  • 如果是對象,則調用對象的 valueOf() 方法,然后依照前面的規則轉換返回的值。如果轉換的結果是 NaN,則調用對象的 toString() 方法,然后再次依照前面的規則轉換返回的字符串值。

2. parseInt()

由于Number()函數在轉換字符串的時候比較復雜而且不夠合理,因此在處理整數的時候更常用的是parseInt()。

parselnt() 函數在轉換字符串時,更多的是看其是否符合數值模式,它會忽略字符串前面的空格,直至找到第一個非空格字符;

如果第一個字符不是數字字符或者負號,parseInt() 就會返回 NaN;也就是說,用parselnt() 轉換空字符時會返回 NaN(Nurnber() 對空字符返回 0);

如果第一個字符是數字字符,parselnt() 會繼續解析第二個字符,直到解析完所有后續字符或者遇到了一個非數字字符。

例如,"1234blue"會被轉換為1234 ,因為"blue"會被完全忽略;類似地,"'22.5"會被轉換為22 ,因為小數點并不是有效的數字字符。

3. parseFloat()

與 parseInt () 函數類似,parseFloat () 也是從第一個字符(位置0)開始解析每個字符。而且也是一直解析到字符串末尾,或者解析到遇見一個無效的浮點數字字符為止。

也就是說,字符串中的第一個小數點是有效的,而第二個小數點就是無效的了,因此它后面的字符串將被忽略。舉例來說,"22.34.5"將會被轉換為22.34 。

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

== 相等

=== 嚴格相等

詳細參考

7.break與continue有什么區別

break 用于強制退出循環體,執行循環后面的語句
continue 用于退出本次循環,執行下次循環

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

undefined在某些場景例如函數內是可以被賦值,而void 0 則只會返回undefined。

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

console.log(1+1);    //2    (數值相加)
console.log("2"+"4");  //24    (2,4均為字符串,+連接字符串)
console.log(2+"4");  //24  (4為字符串,2為數值,此代碼會轉換2為字符串然后連接)
console.log(+"4");  //4     (+號強制轉換為數值)

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

var a = 1;  
a+++a;  
typeof a+2;    //number2
/* (a++)+a=1+2;   
(typeof a)+2=number2  */

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

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

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

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

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

var a = 1, b = 2, c = 3;               //number2
var val = typeof a + b || c >0      
console.log(val)            
 /*  val = (typeof a) + [ b || ( c > 0 ) ]          
 typeof a ==> number;          c > 0 ==> true;      2 ||   true ==>  true
*/
var d = 5;                                             // bb
var data = d ==5 && console.log('bb')  
console.log(data)
/*   data =  ( d == 5 )  && console.log("bb")  
   d == 5  ==>  true ;       
*/
var data2 = d = 0 || console.log('haha')                   //haha
console.log(data2)
/*  data2 = [ d =(  0 || console.log('haha')   ) ]
0 ==>false   ;   d=console.log("haha")   ;data2 = d = haha
var x = !!"Hello" + (!"world", !!"from here!!");     //2
console.log(x)
/* x = (!!"Hello") + (!"world", !!"from here!!"); 
(!!"Hello")   ==>true ;      (!"world", !!"from here!!")  ==> true  ;  x=  true +true = 2

參考答案

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1.JavaScript 定義了幾種數據類型? 哪些是原始類型?哪些是復雜類型?原始類型和復雜類型的區別是什么? ...
    upup_dayday閱讀 293評論 0 1
  • 1. JavaScript 定義了幾種數據類型? 哪些是原始類型?哪些是復雜類型?原始類型和復雜類型的區別是什么?...
    曉風殘月1994閱讀 258評論 0 0
  • 1.JavaScript 定義了幾種數據類型? 哪些是原始類型?哪些是復雜類型?原始類型和復雜類型的區別是什么? ...
    FLYSASA閱讀 212評論 0 0
  • 1.JavaScript 定義了幾種數據類型? 哪些是原始類型?哪些是復雜類型?原始類型和復雜類型的區別是什么? ...
    取個名字都不行閱讀 318評論 0 1
  • 北方某市的初春,市政府宣傳部的公務員李大壯的父母打來電話,說家里的房子要拆遷,要來市里住兩年,等新房子蓋好...
    我的名字也叫紅閱讀 1,074評論 0 0