天天看點

day02-javascript資料類型 目标:

目錄

 目标:

一、資料類型的分類

1.1、原始資料類型

1.2、引用資料類型

1.3、原始資料類型和引用資料類型的差別

二、原始資料類型

2.1、JavaScript 字元串

2.2、JavaScript 數字 number

2.3、JavaScript 布爾

2.4、 undefined類型

2.5、null類型

2.6、資料類型的轉化

2.7、數字 字元串 布爾(包裝類型)

三、引用資料類型

3.1、JavaScript 數組

3.2、JavaScript 對象

 目标:

  • 掌握資料類型的分類(重點)
  • 原始資料類型和引用設計類型的差別
  • 資料類型的轉換

一、資料類型的分類

javascript中有兩種資料類型,分别是基本資料類型和引用資料類型;

基本資料(原始資料)類型指的是簡單的資料段,而引用資料類型則指的是由多個值構成的對象。

typeof 運算符

JavaScript 的 typeof 來确定 JavaScript 變量的類型:typeof 運算符傳回變量或表達式的類型:

typeof ""                  // 傳回 "string"
typeof "Bill"              // 傳回 "string"
typeof "Bill Gates"          // 傳回 "string"      

1.1、原始資料類型

  • Number
  • string
  • boolean
  • null
  • underfined

1.2、引用資料類型

  • 對象 Object
  • 數組 Array
  • 函數 Function
  • Date 日期

1.3、原始資料類型和引用資料類型的差別

  • 聲明變量時的存儲配置設定
  • 不同的記憶體配置設定機制也帶來了不同的通路機制
  • 複制變量時的不同

二、原始資料類型

2.1、JavaScript 字元串

字元串是存儲字元(比如 "Bill Gates")的變量。

字元串可以是引号中的任意文本。您可以使用單引号或雙引号:

Var str=”xiaoming”      

字元串的變量内容一旦建立不可改變!如果要改變,隻能建立新的字元串,抛棄舊的字元串

面試題:

var str=“hello”;
 str=str+”world”      

請問這裡共建立了幾個字元串?

字元串模闆

//var text = `字元串字元串字${變量}符串字元串`      

2.2、JavaScript 數字 number

JavaScript 隻有一種數字類型。數字可以帶小數點,也可以不帶:

var x1=34.00;      //使用小數點來寫
var x2=34;         //不使用小數點來寫      

極大或極小的數字可以通過科學(指數)計數法來書寫:

var y=123e5;      // 12300000
var z=123e-5;     // 0.00123      

2.3、JavaScript 布爾

布爾(邏輯)隻能有兩個值:true 或 false。

var x=true;
var y=false;      

2.4、 undefined類型

表示一個變量隻有聲明,沒有指派,它的值預設就是undefined

2.5、null類型

怎麼去了解typeof null==>Object

  • 原理是這樣的,不同的對象在底層都表示為二進制,在 JavaScript 中二進制前三位都為 0 的話會被判斷為 object 類型,null 的二進制表示是全 0,自然前三位也是 0,是以執行 typeof 時會傳回“object”。
  • 現在比較普遍的認知是,typeof null傳回“object”是一個曆史錯誤(JS的發明者Brendan Eich自己也是這樣說的),隻是因為要保持語言的相容性而維持至今。從ES5制定開始就有動議将typeof null改為傳回“null”(如啟動node加上“--harmony_typeof”參數,即是如此),但是目前ES6标準草案仍然維持了原樣。  
  • 也可在某種程度上了解為null實為object類型的一個特殊值。在諸如Java這樣的語言中,一個變量若是primitive類型,均不可賦以null值,而若是 object,則均可賦以null值。因為在了解上來說,null實際是引用(reference)的特殊值(表示沒有指向任何實際對象)
  • ECMA是如何劃分概念,主要是依據ECMA的邏輯,而不是其他标準。是以從ECMA的邏輯看,類型系統是這樣劃分的,也是合理的 

可以通過将變量的值設定為 null 來清空變量。

Undefined 與 Null 的差別

Undefined 與 null 的值相等,但類型不相等:

目前,null和undefined基本是同義的。

undefined表示"缺少值",就是此處應該有一個值,但是還沒有定義。典型用法是:

(1)變量被聲明了,但沒有指派時,就等于undefined。

(2) 調用函數時,應該提供的參數沒有提供,該參數等于undefined。

(3)對象沒有指派的屬性,該屬性的值為undefined。

(4)函數沒有傳回值時,預設傳回undefined。

var i;
i // undefined
​
function f(x){console.log(x)}
f() // undefined
​
var  o = new Object();
o.p // undefined
​
var x = f();
x // undefined      
typeof undefined              // undefined
typeof null                   // object
null === undefined            // false
null == undefined             // true      

2.6、資料類型的轉化

  • 隐式轉換:程式自動轉換的資料類型
  • 強制轉換:通過js提供的方法去改變數類型(自己說了算)

2.6.1、隐式轉換:

如果隻考慮 + 的情況下:

  • 隻要有字元串參與的,一切都變成字元串
  • 如果沒有字元串參與,都轉為數字計算 (true--1 false---0)
    //除0之外的所有數字,轉換為布爾型都為true
            var x = 0;
            var y = 1;
            console.log(Boolean(x));//false
            console.log(Boolean(y))//true
    //除""之外的所有字元,都轉為布爾型都為true
            var stringWords = "welcome";
            var stringKong = "";//空的
            var kongge = " ";
            console.log(Boolean(stringKong));//false
            console.log(Boolean(stringWords))//true
            console.log(Boolean(kongge))//true  空格布爾型也是true
    //null和undefined轉換為布爾型為false
            var y;
            var x = null;
            console.log(Boolean(y))//false
            console.log(Boolean(x))//false      

2.6.2、強制轉化:自己說了算

概念:調用專門的函數手動的轉化類型(系統提供的 内置的函數)

  • String x.toString() 轉為字元串

    其中x可以是任何的資料類型

  • Number number(x):将任意類型轉為number
  • 轉為整數

    Var s=parseInt(“str”); 轉為整數,讀取字元串的整數部分

    從第一個字元往後面讀取

    如果碰到第一個數字字元,開始擷取數子,再次碰到不是數字的字元,停止讀取。

    var topVal = parseInt("28px");
    console.log(topVal);//28      

    如果開頭碰到空格 忽略

    如果碰到第一個非空格的字元,不是數字說明不能轉---NaN

    var z = parseInt("abc52");
    console.log(z);//NaN      
  • NaN:不是數字(内容)的數字(類型)
  • parseFloat(“str”); 轉為浮點型。用法和parseInt完全相同

    唯一的差别:parseFloat認識的小數點,但僅僅隻認識一個小數點

day02-javascript資料類型 目标:

2.7、數字 字元串 布爾(包裝類型)

var str = 'hello'; //string 基本類型
var s2 = str.charAt(0);
在執行到這一句的時候 背景會自動完成以下動作 :
( 
 var _str = new String('hello'); // 1 找到對應的包裝對象類型,然後通過包裝對象建立出一個和基本類型值相同的對象
 var s2 = _str.chaAt(0); // 2 然後這個對象就可以調用包裝對象下的方法,并且傳回結給s2.
 _str = null;  //    3 之後這個臨時建立的對象就被銷毀了, str =null; 
 ) 
​
alert(s2); // h      

上面的string是一個基本類型,但是它卻能召喚出一個 charAt() 的方法,主要是因為在基本類型中,有三個比較特殊的存在就是:String Number Boolean,這三個基本類型都有自己對應的包裝對象。包裝對象,其實就是對象,有相應的屬性和方法。調用方法的過程,是在背景偷偷發生的。

對于自動建立的基本包裝類型的對象,隻存在于一行代碼的執行瞬間,執行完畢就會立即被銷毀。 如下:

var str = 'test'
str.test = 'hhh'
console.log(str.test) //undefined      

上面第二行代碼給自動建立的 String 執行個體對象添加了 test 屬性,雖然此刻代碼執行時他是生效的,但是在這行代碼執行完畢後該 String 執行個體就會立刻被銷毀,String 執行個體的 test 屬性也就不存在了。 當執行第三行代碼時,由于是讀取模式, String 執行個體沒有 test 屬性,結果也就是 undefined。

三、引用資料類型

3.1、JavaScript 數組

JavaScript 數組用方括号書寫。

數組的項目由逗号分隔。

下面的代碼聲明(建立)了名為 cars 的數組,包含三個項目(汽車品牌):

執行個體

var cars = ["Porsche", "Volvo", "BMW"];      

數組索引基于零,這意味着第一個項目是 [0],第二個項目是 [1],以此類推。

3.2、JavaScript 對象

JavaScript 對象用花括号來書寫。

對象屬性是 name:value 對,由逗号分隔。

執行個體

var person = {
    Name:"張三", 
    age:62, 
    eyeColor:"black"
};      

上例中的對象(person)有三個屬性:Name、age 以及 eyeColor。

繼續閱讀