數據類型

  • 針對原始類型數據,使用值傳遞方式;
  • 針對引用類型數據,使用址傳遞方式。

一、Undefined類型

Undefined只有一個值,即undefined。在使用var聲明變量,但沒有對其初始化時,這個變量的值就是undefined。

因爲沒有初始化的變量會隱時的(自動的)賦值undefined,因此我們沒有必要顯示的給一個變量賦值爲undefined

未初始化的變量未聲明的(不存在的)變量也是不一樣的:
var a;
alert(typeof a);
alert(typeof b); //都返回undefined,但從邏輯上思考,他們的值,一個是undefined,一個報錯;他們的類型都是undefined。所以,我們在定義變量時儘可能的不要只聲明,不不賦值。

二、Null類型

Null只有一個值,即null。表示一個空對象引用(指針),而typeof操作符會返回object。如果定義的變量準備在將來用於保存對象那麼最好將變量初始化爲null。這樣,當檢查null值就知道變量是否已經分配對象引用了。

var a = null;//表示還沒有創建對象,但先聲明瞭對象引用而必須初始化的結果(即還沒來得及創建對象,先聲明一個對象的變量放在那邊,默認初始化爲null)。
if(a != null) {        //a != null 說明不是空對象
alert("對象已經創建成功!");    //打印不出來
} 

例:
var a;
a = {
    1:1
};
alert(a);

當我們之後需要用到變量但又不知道給它初始化什麼值時:

var a = null;   //對象初始化,一般用null;
var a = "";     //創建一個字符串變量,但一開始不知道初始化什麼字符串,所以給他一個空字符串;
var a = 0;      //數值初始化,一般用0;
var a = false;  //布爾值初始化,一般一開始用false或者true;

需要注意的是:undefined是派生自null的,因此ECMA-262規定對他們的相等性測試返回true。

alert(undefined == null);   //true    undefined爲未定義,null爲空。都是爲空,所以它們是相等的。
alert(undefined === null);  //false   全等必須要數據類型也要相等纔可以。
alert(typeof undefined == typeof null);   //false 

三、Boolean類型

Boolean類型有兩個值(字面量):true和false。**true不一定等於1,false也不一定等於0。**JavaScript是區分大小寫的,True和False或者其他都不是Boolean類型的值。

console.log( true === 1); //false
console.log(typeof true == typeof 1); //false

雖然Boolean類型的字面量只有true和false兩種,但ECMAScript中所有類型的值都有雨這兩個Boolean等價的值。要將一個值轉換爲其對應的Boolean值,可以使用轉型函數Boolean()。

var a = "hi";
var a1 = Boolean(a);
console.log(a1); //true
console.log(typeof a1); //boolean

上面是一種顯示轉換,屬於強制性轉換。而實際應用中,還有一種隱式轉換。比如,在if條件語句裏面的條件判斷,就存在隱式轉換。

以下是其他類型轉換爲Boolean類型規則
數據類型 轉換爲true 轉換爲false
Boolean true false
String 任何非空字符串 空字符串
Number 任何非零數字值(包括無窮大) 0和NaN
Object 任何對象 null
Undefined undefined

四、Number類型

Number類型包含兩種數值:整型和浮點型(在某些語言中也稱爲雙精度數值)。爲了支持各種數值類型。ECMA-262定義了不同的數值字面量格式。

1、整型:

  • 最基本的數值字面量是十進制整數。
  • 八進制字面量,(以8爲基數),前導必須是0,八進制數字序列(0~7)。八進制字面量在嚴格模式下是無效的

    var a = 074;  //輸出十進制數值60
    var b = 079;  //無效八進制,輸出十進制數值79
    
  • 十六進制字面量,前兩位必須爲0x,後跟任何十六進制數字(0~9及A~F)
    在進行算術計算時,所有八進制和十六進制表示的數值最終都將被轉換爲十進制數值。

2、浮點型

數值中必須包含一個小數點。

var a = 0.7;
var a = .7; //有效,但不推薦
var b = 07.9;

由於保存浮點數值需要的內存空間比整型數值大兩倍,因此ECMAScript會不失時機地將浮點數值轉換爲整數。

var a = 7.; //小數點後面沒有值,轉換爲7
var a = 7.0; //小數點後面爲0,轉換爲7

對於那些過大或過小的數值,可以用e表示法(即科學計數法)表示的浮點數值表示。
用e表示發表示的數值等於e(大小寫都可)前面的數值乘以10的指數次冪。

var a = 4.12e9; //4120000000
var a = 0.00000421; //0.00000421
var a = 42.1e-10; //4.21e-9

雖然浮點數值的最高精度是17位小數,但算術運算中可能會不精確。(判斷時最好使用整型判斷)

3、數值範圍

Number.MIN_VALUE; 最大數值。

Number.MAX_VALUE; 最小數值。

console.log(Number.MIN_VALUE); //5e-324
console.log(Number.MAX_VALUE); //1.7976931348623157e+308

超出數值範圍時會返回:Infinity 和 -Infinity

console.log(100e10000000); //Infinity
console.log(-100e10000000); //-Infinity

查看正、負無窮Infinity 和 -Infinity值

Number.POSITIVE_INFINITY;

Number.NEGATIVE_INFINITY;

console.log(Number.POSITIVE_INFINITY); //Infinity
console.log(Number.NEGATIVE_INFINITY); //-Infinity

函數isFinite(),查看數值是否在範圍內

4、NaN

NaN表示一個本來要返回數值的操作數未返回數值的情況。任何值除以0都會返回NaN。

NaN有兩個特點:1、任何與NaN進行運算的結果都爲NaN;2、NaN與任何值都不想等,包括NaN本身。

ECMAScript提供了isNaN()函數,判斷是否是非數值。

isNaN()在接收到一個值後,會嘗試將這個之轉換爲數值。(true轉換爲1,false轉換爲0,數值字符串轉換爲數值)

5、數值轉換

非數值轉換爲數值(方法)
Number() 用於任何類型數據
parseInt() 只能用與字符串,其他都返回NaN
parseFloat()

Number()轉換規則:

  • 如果是Boolean值,ture和false將分別轉換爲1和0;
  • 如果是數字值,則只是簡單的傳入和返回。
  • 如果是null值,則返回0;
  • undefined,返回NaN;
  • 如果是字符串:

    只包含數字 —— 轉換爲十進制和十六進制(無八進制);

    “”空字符串——0;// parseInt()和parseFloat()轉換爲NaN

    其他——轉換爲NaN。

    parseInt(需判斷的字符串,基數):
    console.log(parseInt("110",2)); //6 (按二進制解析)
    console.log(parseInt("110",8)); //72 (按八進制解析)
    console.log(parseInt("110",10)); //110 (按十進制解析)
    console.log(parseInt("110",16)); //272 (按十六進制解析)
    

    不指定基數意味着讓parseInt()決定如何解析輸入的字符串,因此爲了避免錯誤的解析,建議無論在什麼情況下都明確指定基數

五、String類型

1、字符字面量(又稱轉義序列)

字面量 含義
\n 換行
\t 製表
\b 退格
\r 回車
\f 進紙
\\ 斜槓
\’ 單引號,在單引號表示的字符串中使用。例如:’He said,\’hey.\”
\” 雙引號,在雙引號表示的字符串中使用。例如:”He said,\”hey.\”“
\xnn 以十六進制代碼nn表示的一個字符(其中n爲0~F)。例如:\x41表示”A”
\unnn 以十六進制代碼nn表示的一個Unicode字符(其中n爲0~F),例如:\u03a3表示希臘字符Σ
var a = "s\u03a3";
console.log(a); //返回sΣ
console.log(a.length); //返回2【其中\u03a3被轉移爲一個字符】

2、轉換爲字符串

兩種方法:

  • 1、toString()方法

    幾乎每個值(除了null和undefined)都有的toString()方法
    使用此方法時,多不必傳參。但是,在調用數值的toString()方法時,可以傳數值輸出的基數(默認一十進制輸出)。

    var a = 456;
    console.log(a.toString(2)); //輸出111001000
    
  • 2、強制轉換 String()

    這個函數可以將任何類型的值轉回爲字符串。

六、Object類型

var foo = null;//表示還沒有創建對象,但先聲明瞭對象引用而必須初始化的結果(即還沒來得及創建對象,先聲明一個對象的變量放在那邊,默認初始化爲null)。
var foo = {};

屬性和方法:

  • constructor;保存用於創建當前對象的函數(原型對象都包含一個指向構造函數的指針(constructor屬性));
  • hasOwnProprety(prototypeName);用於檢查給定的屬性在當前對象實例中(而不是對象原型中)是否存在。(作爲參數的屬性名必須以字符串形式指定。)
  • isPrototypeOf(object);用於檢查傳入的對象是否是傳入對象的原型。
  • propertyIsEnumerable(propertyName);用於檢查給定的屬性是否能夠使用for-in語句來枚舉。
  • toLocaleString();返回對象的字符串表示,該字符串與執行環境的地區對應。
  • toString();返回對象的字符串表示。
  • valueOf();返回對象的字符串、數值、或布爾值表示。通常與toString()方法的返回值一樣。

由於在ECMAScript中Object是所有對象的基礎,因此所有對象都具有這些基本的屬性和方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章