溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

javascript中有哪些類型

發(fā)布時(shí)間:2022-09-30 16:05:50 來源:億速云 閱讀:115 作者:iii 欄目:web開發(fā)

這篇“javascript中有哪些類型”文章的知識點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“javascript中有哪些類型”文章吧。

有9種數(shù)據(jù)類型:1、字符串類型,是一段以引號包裹起來的文本;2、數(shù)值類型,用來定義數(shù)值;3、布爾類型,只有兩個(gè)值;4、Null類型,表示一個(gè)“空”值,即不存在任何值;5、Undefined類型,表示未定義;6、Symbol類型,表示獨(dú)一無二的值;7、對象類型,是一組由鍵、值組成的無序集合;8、數(shù)組類型,是一組按順序排列的數(shù)據(jù)的集合;9、函數(shù)類型,是一段具有特定功能的代碼塊。

本教程操作環(huán)境:windows7系統(tǒng)、javascript1.8.5版、Dell G3電腦。

數(shù)據(jù)類型指的是可以在程序中存儲和操作的值的類型,每種編程語言都有其支持的數(shù)據(jù)類型,不同的數(shù)據(jù)類型用來存儲不同的數(shù)據(jù),例如文本、數(shù)值、圖像等。

JavaScript 是一種動(dòng)態(tài)類型的語言,在定義變量時(shí)不需要提前指定變量的類型,變量的類型是在程序運(yùn)行過程中由 JavaScript 引擎動(dòng)態(tài)決定的,另外,您可以使用同一個(gè)變量來存儲不同類型的數(shù)據(jù),例如:

var a;  // 此時(shí) a 為 Undefined
a = "http://c.biancheng.net/"; // 此時(shí) a 為 String 類型
a = 123;  // 此時(shí) a 為 Number 類型

JavaScript 中的數(shù)據(jù)類型可以分為兩種類型:

  • 基本數(shù)據(jù)類型(值類型):字符串(String)、數(shù)字(Number)、布爾(Boolean)、空(Null)、未定義(Undefined)、Symbol;

  • 引用數(shù)據(jù)類型:對象(Object)、數(shù)組(Array)、函數(shù)(Function)。

提示:Symbol 是 ECMAScript6 中引入的一種新的數(shù)據(jù)類型,表示獨(dú)一無二的值。

1、String 類型

字符串(String)類型是一段以單引號''或雙引號""包裹起來的文本,例如 '123'、"abc"。需要注意的是,單引號和雙引號是定義字符串的不同方式,并不是字符串的一部分。

2、Number 類型

數(shù)值(Number)類型用來定義數(shù)值,JavaScript 中不區(qū)分整數(shù)和小數(shù)(浮點(diǎn)數(shù)),統(tǒng)一使用 Number 類型表示

注意:Number 類型所能定義的數(shù)值并不是無限的,JavaScript 中的 Number 類型只能表示 -(2∧53 - 1) 到 (2∧53 -1) 之間的數(shù)值。

3、Boolean 類型

布爾(Boolean)類型只有兩個(gè)值,true(真)或者 false(假),在做條件判斷時(shí)使用的比較多,您除了可以直接使用 true 或 false 來定義布爾類型的變量外,還可以通過一些表達(dá)式來得到布爾類型的值

4、Null 類型

Null 是一個(gè)只有一個(gè)值的特殊數(shù)據(jù)類型,表示一個(gè)“空”值,即不存在任何值,什么都沒有,用來定義空對象指針。

使用 typeof 操作符來查看 Null 的類型,會(huì)發(fā)現(xiàn) Null 的類型為 Object,說明 Null 其實(shí)使用屬于 Object(對象)的一個(gè)特殊值。因此通過將變量賦值為 Null 我們可以創(chuàng)建一個(gè)空的對象。

5、Undefined 類型

Undefined 也是一個(gè)只有一個(gè)值的特殊數(shù)據(jù)類型,表示未定義。當(dāng)我們聲明一個(gè)變量但未給變量賦值時(shí),這個(gè)變量的默認(rèn)值就是 Undefined。

6、Symbol 類型

Symbol 是 ECMAScript6 中引入的一種新的數(shù)據(jù)類型,表示獨(dú)一無二的值。

Symbol值通過Symbol函數(shù)生成。對象的屬性名可以有兩種類型,一種是原來就有的字符串,另一種就是新增的 Symbol 類型。屬性名屬于 Symbol 類型的,都是獨(dú)一無二的,可以保證不會(huì)與其他屬性名產(chǎn)生沖突。

let s1=Symbol()
let s2=Symbol()
console.log(s1)
//Symbol()
console.log(s2)
//Symbol()
console.log(s1===s2)
//false

//Symbol函數(shù)能接受字符串作為參數(shù),表示對Symbol實(shí)例的描述
let s1=Symbol('xxx')
let s2=Symbol('hhh')
console.log(s1)
//Symbol(xxx)
console.log(s2)
//Symbol(hhh)
console.log(s1===s2)
//false復(fù)制代碼

Symbol函數(shù)前不能使用new命令,會(huì)報(bào)錯(cuò)。這是因?yàn)樯傻?Symbol 是一個(gè)原始類型的值,不是對象。也就是說,由于 Symbol 值不是對象,所以不能添加屬性。相當(dāng)于是一種特殊的字符串。

應(yīng)用場景

  • 作為屬性名

由于 Symbol 值都是不相等的,這意味著 Symbol 值可以作為標(biāo)識符,用在對象的屬性名,就能保證不會(huì)出現(xiàn)同名的屬性。這對于一個(gè)對象由多個(gè)模塊構(gòu)成的情況非常有用,防止某一個(gè)鍵被不小心改寫或覆蓋。

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值不能重復(fù) 如果有重復(fù) 后面的value值就會(huì)覆蓋前面的


//使用Symbol解決,相當(dāng)于一個(gè)獨(dú)一無二的字符串
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) 
}

  • 消除魔術(shù)字符串

魔術(shù)字符串指的是,在代碼中多次出現(xiàn)、與代碼形成強(qiáng)耦合的某一個(gè)具體的字符串或者數(shù)值。風(fēng)格良好的代碼,應(yīng)該盡量消除魔術(shù)字符串,改成一些含義清晰的變量代替。

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就是魔術(shù)字符串。多次出現(xiàn),與代碼形成了“強(qiáng)耦合”,不利于后面的修改和維護(hù)。

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數(shù)據(jù)類型,稱為對象,是一組由鍵、值組成的無序集合??梢杂胣ew操作符后跟要?jiǎng)?chuàng)建的對象類型的名稱來創(chuàng)建。也可以用字面量表示法創(chuàng)建。在其中添加不同名(包含空字符串在內(nèi)的任意字符串)的屬性。

1)構(gòu)造對象

使用 new 運(yùn)算符調(diào)用構(gòu)造函數(shù),可以構(gòu)造一個(gè)實(shí)例對象。具體用法如下:

var objectName = new functionName(args);

參數(shù)說明如下:

  • objectName:返回的實(shí)例對象。

  • functionName:構(gòu)造函數(shù),與普通函數(shù)基本相同,但是不需要 return 返回值,返回實(shí)例對象,在函數(shù)內(nèi)可以使用 this 預(yù)先訪問。

  • args:實(shí)例對象初始化配置參數(shù)列表。

示例

下面示例使用不同類型的構(gòu)造函數(shù)定義各種實(shí)例。

var o = new Object();  //定義一個(gè)空對象

var a = new Array();  //定義一個(gè)空數(shù)組

var f = new Function();  //定義一個(gè)空函數(shù)

2)對象直接量

使用直接量可以快速創(chuàng)建對象,也是最高效、最簡便的方法。具體用法如下:

var objectName = {
    屬性名1 : 屬性值1,
    屬性名2 : 屬性值2,
    ...
    屬性名n : 屬性值n
};

在對象直接量中,屬性名與屬性值之間通過冒號進(jìn)行分隔,屬性值可以是任意類型的數(shù)據(jù),屬性名可以是 JavaScript 標(biāo)識符,或者是字符串型表達(dá)式。屬性于屬性之間通過逗號進(jìn)行分隔,最后一個(gè)屬性末尾不需要逗號。

在 JavaScript 中,對象類型的鍵都是字符串類型的,值則可以是任意數(shù)據(jù)類型。要獲取對象中的某個(gè)值,可以使用對象名.鍵的形式,如下例所示:

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 類型

數(shù)組(Array)是一組按順序排列的數(shù)據(jù)的集合,數(shù)組中的每個(gè)值都稱為元素(Element),每個(gè)元素的名稱(鍵)被稱為數(shù)組下標(biāo)(Index)。數(shù)組的長度是彈性的、可讀寫的。

數(shù)組中可以包含任意類型的數(shù)據(jù)。

在 JavaScript 中定義(創(chuàng)建或者聲明)數(shù)組的方法有兩種:構(gòu)造數(shù)組和數(shù)組直接量。

1)構(gòu)造數(shù)組

使用 new 運(yùn)算符調(diào)用 Array() 類型函數(shù)時(shí),可以構(gòu)造一個(gè)新數(shù)組。

示例:

  • 直接調(diào)用 Array() 函數(shù),不傳遞參數(shù),可以創(chuàng)建一個(gè)空數(shù)組。

var a = new Array();  //空數(shù)組

  • 傳遞多個(gè)值,可以創(chuàng)建一個(gè)實(shí)數(shù)組。

var a = new Array(1, true, "string", [1,2], {x:1,y:2});  //實(shí)數(shù)組

每個(gè)參數(shù)指定一個(gè)元素的值,值得類型沒有限制。參數(shù)的順序也是數(shù)組元素的順序,數(shù)組的 length 屬性值等于所傳遞參數(shù)的個(gè)數(shù)。

  • 傳遞一個(gè)數(shù)值參數(shù),可以定義數(shù)組的長度,即包含元素的個(gè)數(shù)。

var a = new Array(5);  //指定長度的數(shù)組

參數(shù)值等于數(shù)組 length 的屬性值,每個(gè)元素的值默認(rèn)值為 undefined。

  • 如果傳遞一個(gè)參數(shù),值為 1,則 JavaScript 將定義一個(gè)長度為 1 的數(shù)組,而不是包含一個(gè)元素,其值為 1 的數(shù)組。

var a = new Array(1);
console.log(a[0]);

2)數(shù)組直接量

數(shù)組直接量的語法格式:在中括號中包含多個(gè)值列表,值之間用逗號分隔。

下面代碼使用數(shù)組直接量定義數(shù)組。

var a = [];  //空數(shù)組
var a = [1, true, "0", [1,0], {x:1,y:0}];  //包含具體元素的數(shù)組

推薦使用數(shù)組直接量定義數(shù)組,因?yàn)閿?shù)組直接量是定義數(shù)組最簡便、最高效的方法。

9、Function 類型

函數(shù)(Function)是一段具有特定功能的代碼塊,函數(shù)并不會(huì)自動(dòng)運(yùn)行,需要通過函數(shù)名調(diào)用才能運(yùn)行,如下例所示:

function sayHello(name){
    return "Hello, " + name;
}
var res = sayHello("Peter");
console.log(res);  // 輸出 Hello, Peter

此外,函數(shù)還可以存儲在變量、對象、數(shù)組中,而且函數(shù)還可以作為參數(shù)傳遞給其它函數(shù),或則從其它函數(shù)返回,如下例所示:

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

以上就是關(guān)于“javascript中有哪些類型”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI