摘要:定義什么是數(shù)據(jù)類型數(shù)據(jù)類型,就是將數(shù)據(jù)按照某一規(guī)則進(jìn)行區(qū)別時所定義的分類標(biāo)簽。中的數(shù)據(jù)類型為什么稱為弱類型語言中變量是沒有類型的,只有值才有。有哪些數(shù)據(jù)類型在中,共有七種數(shù)據(jù)類型,其中,六種是基本原始類型,一種是對象復(fù)合引用類型。
定義 1. 什么是數(shù)據(jù)類型?
數(shù)據(jù)類型,就是將數(shù)據(jù)按照某一規(guī)則進(jìn)行區(qū)別時所定義的分類標(biāo)簽。比如說,同樣都是漢字組成的詞語,要分動詞、名詞、介詞等。
2. 為什么會有數(shù)據(jù)類型?它出現(xiàn)的意義何在?對數(shù)據(jù)分類,主要有兩個原因:
第一,是為了限制不同種類數(shù)據(jù)的操作。比如說當(dāng)你聲明一個變量是一個數(shù)字,那么,就只能對這個變量進(jìn)行數(shù)字能進(jìn)行的操作,這在編譯代碼及排查錯誤時尤為重要。
第二,由于所有的數(shù)據(jù)都要存儲在計算機(jī)中,不同數(shù)據(jù)的存儲位置及所需要的內(nèi)存大小也不一樣,而有了數(shù)據(jù)類型,編程的時候需要用大數(shù)據(jù)的時候才需要申請大內(nèi)存,就可以充分利用內(nèi)存。
例如大胖子必須睡雙人床,就給他雙人床,瘦的人單人床就夠了。
JavaScript 中的數(shù)據(jù)類型 1. 為什么稱 JavaScript 為弱類型語言?JavaScript 中變量是沒有類型的,只有值才有。變量可以隨時持有任何類型的值。
舉個例子:
// js let a = 4; a = "4"; a = false;
在上面的例子中可以看到:我們聲明 a 是一個數(shù)字,但是我們在之后將 a 的值又改成了字符串和布爾值(后面會講這些類型)也并沒有什么異常。我們可以看到,變量 a 的類型是隨意轉(zhuǎn)變的,這在強(qiáng)類型語言里是不允許的。
因此,判斷一門語言是強(qiáng)類型還是弱類型,就看這門語言中一個變量是否可以賦不同數(shù)據(jù)類型的值。
2. JavaScript 有哪些數(shù)據(jù)類型?在 JavaScript 中,共有七種數(shù)據(jù)類型,其中,六種是基本/原始類型,一種是對象/復(fù)合/引用類型。
基本類型:
字符串(String):表示一個字符串,如“find”。
數(shù)字(Number):表示一個數(shù)字,如 45 。
布爾(Boolean):布爾值,包括 false 和 true 。
未定義(undefined):只有一個值,undefined , 表示未給變量賦值。
空值(null):只有一個值, null , 表示空值得關(guān)鍵字。
Symbol(es6新增):表示一個唯一且不可改變的值。
引用類型:
對象(object): 各種值組成的集合。
其中,對象類型還有一些子類型,如數(shù)組,函數(shù),JavaScript 的內(nèi)建函數(shù)等。
3. 基本數(shù)據(jù)類型和復(fù)合數(shù)據(jù)類型有什么區(qū)別?主要有兩點:
基本類型的數(shù)據(jù)是不可再拆分的。 這也就是為什么稱他為基本類型,就像組成單詞的 26 個英文字母、組成數(shù)字的 0 -9;而復(fù)合類型的數(shù)據(jù),是由基本類型組成。比如一個單詞,可以由數(shù)個字母組成,一個句子,可以由數(shù)字、字母及標(biāo)點復(fù)合組成。
它們在計算機(jī)中的存儲方式不同。計算機(jī)存儲數(shù)據(jù)時為了內(nèi)存及運(yùn)行速度考慮,往往會對存儲做優(yōu)化,有的會將值本身存儲在棧內(nèi)存中,也有可能會在棧內(nèi)存中存儲一個值的引用,而把值本身存在堆內(nèi)存中。對于不同的語言,實現(xiàn)起來或許會有不一致,但思想都是如此。
4. JavaScript 中值類型和引用類型的存儲方式是怎樣的?對于 js 來講,是沒有棧內(nèi)存的概念的,但是 js 在編譯執(zhí)行代碼時,會首先進(jìn)入一個執(zhí)行上下文,在執(zhí)行上下文的創(chuàng)建階段,會開辟一片區(qū)域,用來存儲變量和它們的值,這個區(qū)域就叫做變量對象。
大概長這個樣子:
如上圖所示,對于基本類型的變量,他們的變量名和值都會存儲在這個變量對象中,而對于 d , 這個引用類型的值,則只是將這個變量的名字和地址存在變量對象中,變量的值是存儲在堆內(nèi)存空間的,這個區(qū)別將會在使用時產(chǎn)生很大的差異,我們后面再講。
5. 如何判斷一個數(shù)據(jù)的數(shù)據(jù)類型? - typeof 方法聲明一個變量,使用 使用 typeof 方法會返回一個唯一的數(shù)據(jù)類型字符串。但這個方法并不怎么靠譜。
值 | 類型 | typeof 值 |
---|---|---|
23 | number | "number" |
"abc" | string | "string" |
false | boolean | "boolean" |
undefined | undefined | "undefined" |
Symbol() | symbol | "symbol" |
{} | object | "object" |
null | null | "object" |
function(){} | object | "funciton" |
從上表中我們看到,有兩處地方和我們預(yù)期不一致。
typeof null 返回的是 "object" 而不是 "null"。這是 js 語言設(shè)計時的一個 bug, 并且在未來也不會更改。
想要爭取判斷 null 可以加一個條件:
function typeOf(a) { if(!a && typeof a === "object") return "null"; return typeof a; } typeOf({}); // "object" typeOf(null); // "null"
typeof function(){} === "function", 這是因為function 作為 js 的一等公民,是可以調(diào)用的對象,設(shè)計者認(rèn)為有必要將它和普通對象區(qū)別開來。
- Object.prototype.toString.call() 方法除了 typeof 方法外,調(diào)用 Object.prototype.toString.call() 方法 也可以返回一個包含數(shù)據(jù)類型的字符串,并且更為準(zhǔn)確。
值 | 類型 | Object.prototype.toString.call(值) |
---|---|---|
23 | number | "[object Number]" |
"abc" | string | "[object String]" |
false | boolean | "[object Boolean]" |
undefined | undefined | "[object Undefined]" |
Symbol() | symbol | "[object Symbol]" |
{} | object | "[object Object]" |
null | null | "[object Null]" |
function(){} | object | "[object Function]" |
[] | object | "[object Array]" |
從上面?zhèn)兛梢钥闯?,這方法對于類型的檢測更加精確。
因此,我們可以寫一個函數(shù),用來精確檢測類型。
function getClass (a) { const str = Object.prototype.toString.call(a) return /^[object (.*)]$/.exec(str)[1] } getClass(null) // "Null"; ...
關(guān)于數(shù)據(jù)類型,就先說到這里,并沒有深入到每一種類型中去講,感覺沒有必要,關(guān)于細(xì)節(jié)有很多教程。我要做的,是讓大家從整體上來看數(shù)據(jù)類型在 JavaScript 中的表現(xiàn),這將有助于大家理解后面更加復(fù)雜的知識。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/99629.html
摘要:的垃圾回收器,進(jìn)行回收。它們的數(shù)據(jù)就存放在堆內(nèi)存中,大小不一定,動態(tài)分配內(nèi)存,可隨時修改。引用類型的變量存的是其在堆內(nèi)存中的地址,值的讀取,就是讀取這個內(nèi)存地址中儲存的內(nèi)容。 這東西還是很重要的,你要是搞懂了,就會去除很多困惑,比如不知道大家在學(xué)習(xí)js 的時候,有沒有對 基礎(chǔ)類型 和 引用類型 感到困惑過,兩者之間 表現(xiàn)的不同之處。 js 不同其他編程語言,它是腳本語言。所以,它的數(shù)...
文章目錄 強(qiáng)烈推薦系列教程,建議學(xué)起來?。? 一.pycharm下載安裝二.python下載安裝三.pycharm上配置python四.配置鏡像源讓你下載嗖嗖的快4.1pycharm內(nèi)部配置 4.2手動添加鏡像源4.3永久配置鏡像源 五.插件安裝(比如漢化?)5.1自動補(bǔ)碼神器第一款5.2漢化pycharm5.3其它插件 六.美女背景七.自定義腳本開頭八、這個前言一定要看九、pyt...
摘要:中的數(shù)據(jù)類型為什么稱為弱類型語言中變量是沒有類型的,只有值才有。有哪些數(shù)據(jù)類型在中,共有七種數(shù)據(jù)類型,其中,六種是基本原始類型,一種是對象復(fù)合引用類型。因此,我們可以寫一個函數(shù),用來精確檢測類型。 showImg(http://upload-images.jianshu.io/upload_images/7803415-2bbe6fd5fdeebe0d.jpg?imageMogr2/a...
摘要:舉個例子在上面的例子可以看到,我們聲明是一個數(shù)字,但是我們在之后將的值又改成了字符串和布爾值后面會講這些類型?;绢愋妥址硎疽粋€字符串,如。因此,我們可以寫一個函數(shù),用來精確檢測類型。 showImg(https://segmentfault.com/img/remote/1460000017309509?w=850&h=572); 定義 1. 什么是數(shù)據(jù)類型? 數(shù)據(jù)類型,就是將...
閱讀 3538·2023-04-25 20:09
閱讀 3739·2022-06-28 19:00
閱讀 3060·2022-06-28 19:00
閱讀 3081·2022-06-28 19:00
閱讀 3175·2022-06-28 19:00
閱讀 2880·2022-06-28 19:00
閱讀 3047·2022-06-28 19:00
閱讀 2638·2022-06-28 19:00