目錄
目标:
一、資料類型的分類
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認識的小數點,但僅僅隻認識一個小數點
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL3dGVOFTTE1UNNpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLykjMwQDOzYTMxEjNwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
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。