您好,登錄后才能下訂單哦!
這篇“javascript中有哪些類型”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“javascript中有哪些類型”文章吧。
有9種數據類型:1、字符串類型,是一段以引號包裹起來的文本;2、數值類型,用來定義數值;3、布爾類型,只有兩個值;4、Null類型,表示一個“空”值,即不存在任何值;5、Undefined類型,表示未定義;6、Symbol類型,表示獨一無二的值;7、對象類型,是一組由鍵、值組成的無序集合;8、數組類型,是一組按順序排列的數據的集合;9、函數類型,是一段具有特定功能的代碼塊。
本教程操作環境:windows7系統、javascript1.8.5版、Dell G3電腦。
數據類型指的是可以在程序中存儲和操作的值的類型,每種編程語言都有其支持的數據類型,不同的數據類型用來存儲不同的數據,例如文本、數值、圖像等。
JavaScript 是一種動態類型的語言,在定義變量時不需要提前指定變量的類型,變量的類型是在程序運行過程中由 JavaScript 引擎動態決定的,另外,您可以使用同一個變量來存儲不同類型的數據,例如:
var a; // 此時 a 為 Undefined
a = "http://c.biancheng.net/"; // 此時 a 為 String 類型
a = 123; // 此時 a 為 Number 類型
JavaScript 中的數據類型可以分為兩種類型:
基本數據類型(值類型):字符串(String)、數字(Number)、布爾(Boolean)、空(Null)、未定義(Undefined)、Symbol;
引用數據類型:對象(Object)、數組(Array)、函數(Function)。
提示:Symbol 是 ECMAScript6 中引入的一種新的數據類型,表示獨一無二的值。
1、String 類型
字符串(String)類型是一段以單引號''或雙引號""包裹起來的文本,例如 '123'、"abc"。需要注意的是,單引號和雙引號是定義字符串的不同方式,并不是字符串的一部分。
2、Number 類型
數值(Number)類型用來定義數值,JavaScript 中不區分整數和小數(浮點數),統一使用 Number 類型表示
注意:Number 類型所能定義的數值并不是無限的,JavaScript 中的 Number 類型只能表示 -(2∧53 - 1) 到 (2∧53 -1) 之間的數值。
3、Boolean 類型
布爾(Boolean)類型只有兩個值,true(真)或者 false(假),在做條件判斷時使用的比較多,您除了可以直接使用 true 或 false 來定義布爾類型的變量外,還可以通過一些表達式來得到布爾類型的值
4、Null 類型
Null 是一個只有一個值的特殊數據類型,表示一個“空”值,即不存在任何值,什么都沒有,用來定義空對象指針。
使用 typeof 操作符來查看 Null 的類型,會發現 Null 的類型為 Object,說明 Null 其實使用屬于 Object(對象)的一個特殊值。因此通過將變量賦值為 Null 我們可以創建一個空的對象。
5、Undefined 類型
Undefined 也是一個只有一個值的特殊數據類型,表示未定義。當我們聲明一個變量但未給變量賦值時,這個變量的默認值就是 Undefined。
6、Symbol 類型
Symbol 是 ECMAScript6 中引入的一種新的數據類型,表示獨一無二的值。
Symbol值通過Symbol函數生成。對象的屬性名可以有兩種類型,一種是原來就有的字符串,另一種就是新增的 Symbol 類型。屬性名屬于 Symbol 類型的,都是獨一無二的,可以保證不會與其他屬性名產生沖突。
let s1=Symbol()
let s2=Symbol()
console.log(s1)
//Symbol()
console.log(s2)
//Symbol()
console.log(s1===s2)
//false
//Symbol函數能接受字符串作為參數,表示對Symbol實例的描述
let s1=Symbol('xxx')
let s2=Symbol('hhh')
console.log(s1)
//Symbol(xxx)
console.log(s2)
//Symbol(hhh)
console.log(s1===s2)
//false復制代碼
Symbol函數前不能使用new命令,會報錯。這是因為生成的 Symbol 是一個原始類型的值,不是對象。也就是說,由于 Symbol 值不是對象,所以不能添加屬性。相當于是一種特殊的字符串。
應用場景
作為屬性名
由于 Symbol 值都是不相等的,這意味著 Symbol 值可以作為標識符,用在對象的屬性名,就能保證不會出現同名的屬性。這對于一個對象由多個模塊構成的情況非常有用,防止某一個鍵被不小心改寫或覆蓋。
const grade={
張三:{address:'qqq',tel:'111'},
李四:{address:'aaa',tel:'222'},
李四:{address:'sss',tel:'333'},
}
console.log(grade)
//張三: {address: "qqq", tel: "111"} 李四: {address: "sss", tel: "333"}
//對象的key值不能重復 如果有重復 后面的value值就會覆蓋前面的
//使用Symbol解決,相當于一個獨一無二的字符串
const stu1=Symbol('李四')
const stu2=Symbol('李四')
console.log(stu1===stu2)
//false
const grade={
[stu1]:{address:'aaa',tel:'222'},
[stu2]:{address:'sss',tel:'333'},
}
console.log(grade)
//李四:{address:'sss',tel:'222'} 李四:{address:'sss',tel:'333'}
console.log(grade[stu1])
//李四:{address:'sss',tel:'222'}
console.log(grade[stu2])
//李四:{address:'sss',tel:'333'}
屬性遍歷
const sym=Symbol('imooc')
class User{
constructor(name){
this.name=name
this[sym]='imooc.com'
}
getName(){
return this.name+this[sym]
}
}
const user=new User('www')
//for in的方法不能遍歷到Symbol屬性 像被隱藏了
for(let key in user){
console.log(key)//name
}
//Object.keys(obj)方法也不能遍歷到Symbol屬性
for(let key of Object.keys(user)){
console.log(key)//name
}
//Object.getOwnPropertySymbols(obj)只能獲取到Symbol屬性
for(let key of Object.getOwnPropertySymbols(user)){
console.log(key)//Symbol(imooc)
}
//Reflect.ownKeys(obj)對象的屬性都能獲取到
for(let key of Reflect.ownKeys(user)){
console.log(key)
//name
//Symbol(imooc)
}
消除魔術字符串
魔術字符串指的是,在代碼中多次出現、與代碼形成強耦合的某一個具體的字符串或者數值。風格良好的代碼,應該盡量消除魔術字符串,改成一些含義清晰的變量代替。
function getArea(shape) {
let area = 0
switch (shape) {
case 'Triangle':
area = 1
break
case 'Circle':
area = 2
break
}
return area
}
console.log(getArea('Triangle'))
//Triangle和Circle就是魔術字符串。多次出現,與代碼形成了“強耦合”,不利于后面的修改和維護。
const shapeType = {
triangle: Symbol(),
circle: Symbol()
}
function getArea(shape) {
let area = 0
switch (shape) {
case shapeType.triangle:
area = 1
break
case shapeType.circle:
area = 2
break
}
return area
}
console.log(getArea(shapeType.triangle))
7、Object 類型
Object數據類型,稱為對象,是一組由鍵、值組成的無序集合。可以用new操作符后跟要創建的對象類型的名稱來創建。也可以用字面量表示法創建。在其中添加不同名(包含空字符串在內的任意字符串)的屬性。
1)構造對象
使用 new 運算符調用構造函數,可以構造一個實例對象。具體用法如下:
var objectName = new functionName(args);
參數說明如下:
objectName:返回的實例對象。
functionName:構造函數,與普通函數基本相同,但是不需要 return 返回值,返回實例對象,在函數內可以使用 this 預先訪問。
args:實例對象初始化配置參數列表。
示例
下面示例使用不同類型的構造函數定義各種實例。
var o = new Object(); //定義一個空對象
var a = new Array(); //定義一個空數組
var f = new Function(); //定義一個空函數
2)對象直接量
使用直接量可以快速創建對象,也是最高效、最簡便的方法。具體用法如下:
var objectName = {
屬性名1 : 屬性值1,
屬性名2 : 屬性值2,
...
屬性名n : 屬性值n
};
在對象直接量中,屬性名與屬性值之間通過冒號進行分隔,屬性值可以是任意類型的數據,屬性名可以是 JavaScript 標識符,或者是字符串型表達式。屬性于屬性之間通過逗號進行分隔,最后一個屬性末尾不需要逗號。
在 JavaScript 中,對象類型的鍵都是字符串類型的,值則可以是任意數據類型。要獲取對象中的某個值,可以使用對象名.鍵的形式,如下例所示:
var person = {
name: 'Bob',
age: 20,
tags: ['js', 'web', 'mobile'],
city: 'Beijing',
hasCar: true,
zipcode: null
};
console.log(person.name); // 輸出 Bob
console.log(person.age); // 輸出 20
8、Array 類型
數組(Array)是一組按順序排列的數據的集合,數組中的每個值都稱為元素(Element),每個元素的名稱(鍵)被稱為數組下標(Index)。數組的長度是彈性的、可讀寫的。
數組中可以包含任意類型的數據。
在 JavaScript 中定義(創建或者聲明)數組的方法有兩種:構造數組和數組直接量。
1)構造數組
使用 new 運算符調用 Array() 類型函數時,可以構造一個新數組。
示例:
直接調用 Array() 函數,不傳遞參數,可以創建一個空數組。
var a = new Array(); //空數組
傳遞多個值,可以創建一個實數組。
var a = new Array(1, true, "string", [1,2], {x:1,y:2}); //實數組
每個參數指定一個元素的值,值得類型沒有限制。參數的順序也是數組元素的順序,數組的 length 屬性值等于所傳遞參數的個數。
傳遞一個數值參數,可以定義數組的長度,即包含元素的個數。
var a = new Array(5); //指定長度的數組
參數值等于數組 length 的屬性值,每個元素的值默認值為 undefined。
如果傳遞一個參數,值為 1,則 JavaScript 將定義一個長度為 1 的數組,而不是包含一個元素,其值為 1 的數組。
var a = new Array(1);
console.log(a[0]);
2)數組直接量
數組直接量的語法格式:在中括號中包含多個值列表,值之間用逗號分隔。
下面代碼使用數組直接量定義數組。
var a = []; //空數組
var a = [1, true, "0", [1,0], {x:1,y:0}]; //包含具體元素的數組
推薦使用數組直接量定義數組,因為數組直接量是定義數組最簡便、最高效的方法。
9、Function 類型
函數(Function)是一段具有特定功能的代碼塊,函數并不會自動運行,需要通過函數名調用才能運行,如下例所示:
function sayHello(name){
return "Hello, " + name;
}
var res = sayHello("Peter");
console.log(res); // 輸出 Hello, Peter
此外,函數還可以存儲在變量、對象、數組中,而且函數還可以作為參數傳遞給其它函數,或則從其它函數返回,如下例所示:
var fun = function(){
console.log("http://c.biancheng.net/js/");
}
function createGreeting(name){
return "Hello, " + name;
}
function displayGreeting(greetingFunction, userName){
return greetingFunction(userName);
}
var result = displayGreeting(createGreeting, "Peter");
console.log(result); // 輸出 Hello, Peter
以上就是關于“javascript中有哪些類型”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。