成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

33 個(gè) js 核心概念(二):數(shù)據(jù)類(lèi)型

QiShare / 2251人閱讀

摘要:舉個(gè)例子在上面的例子可以看到,我們聲明是一個(gè)數(shù)字,但是我們?cè)谥髮⒌闹涤指某闪俗址筒紶栔岛竺鏁?huì)講這些類(lèi)型。基本類(lèi)型字符串表示一個(gè)字符串,如。因此,我們可以寫(xiě)一個(gè)函數(shù),用來(lái)精確檢測(cè)類(lèi)型。

定義 1. 什么是數(shù)據(jù)類(lèi)型?

數(shù)據(jù)類(lèi)型,就是將數(shù)據(jù)按照某一規(guī)則進(jìn)行區(qū)別時(shí)所定義的分類(lèi)標(biāo)簽。比如說(shuō),同樣都是漢字組成的詞語(yǔ),要分動(dòng)詞、名詞、介詞等。

2. 為什么會(huì)有數(shù)據(jù)類(lèi)型?它出現(xiàn)的意義何在?

對(duì)數(shù)據(jù)分類(lèi),主要有兩個(gè)原因:

第一,是為了限制不同種類(lèi)數(shù)據(jù)的操作。比如說(shuō)當(dāng)你聲明一個(gè)變量是一個(gè)數(shù)字,那么,就只能對(duì)這個(gè)變量進(jìn)行數(shù)字能進(jìn)行的操作,這在編譯代碼及排查錯(cuò)誤時(shí)尤為重要。

第二,由于所有的數(shù)據(jù)都要存儲(chǔ)在計(jì)算機(jī)中,不同的數(shù)據(jù)的存儲(chǔ)位置及所需要的內(nèi)存大小也不一樣,而有了數(shù)據(jù)類(lèi)型,編程的時(shí)候需要用大數(shù)據(jù)的時(shí)候才需要申請(qǐng)大內(nèi)存,就可以充分利用內(nèi)存。

例如大胖子必須睡雙人床,就給他雙人床,瘦的人單人床就夠了。

JavaScript 中的數(shù)據(jù)類(lèi)型 1. 為什么稱(chēng) JavaScript 為弱類(lèi)型語(yǔ)言?

JavaScript 中變量是沒(méi)有類(lèi)型的,只有值才有。變量可以隨時(shí)持有任何類(lèi)型的值。

舉個(gè)例子:

// js
let a = 4;
a = "4";
a = false;

在上面的例子可以看到,我們聲明 a 是一個(gè)數(shù)字,但是我們?cè)谥髮?a 的值又改成了字符串和布爾值(后面會(huì)講這些類(lèi)型)。我們可以看到,變量 a 的類(lèi)型是隨意轉(zhuǎn)變的,這在強(qiáng)類(lèi)型語(yǔ)言里是不允許的。

因此,判斷一門(mén)語(yǔ)言是強(qiáng)類(lèi)型還是弱類(lèi)型,就看這門(mén)語(yǔ)言中一個(gè)變量是否可以賦不同數(shù)據(jù)類(lèi)型的值。

2. JavaScript 有哪些數(shù)據(jù)類(lèi)型?

在 JavaScript 中,共有七種數(shù)據(jù)類(lèi)型,其中,六種是基本/原始類(lèi)型,一種是對(duì)象/復(fù)合/引用類(lèi)型。

基本類(lèi)型:

字符串(String):表示一個(gè)字符串,如“find”。

數(shù)字(Number):表示一個(gè)數(shù)字,如 45 。

布爾(Boolean):布爾值,包括 false 和 true 。

未定義(undefined):只有一個(gè)值,undefined , 表示未給變量賦值。

空值(null):只有一個(gè)值, null , 表示空值得關(guān)鍵字。

Symbol(es6新增):表示一個(gè)唯一且不可改變的值。

引用類(lèi)型:

對(duì)象(object): 各種值組成的集合。

其中,對(duì)象類(lèi)型還有一些子類(lèi)型,如數(shù)組,函數(shù),JavaScript 的內(nèi)建函數(shù)等。

3. 基本數(shù)據(jù)類(lèi)型和復(fù)合數(shù)據(jù)類(lèi)型有什么區(qū)別?

主要有兩點(diǎn):

基本類(lèi)型的數(shù)據(jù)是不可再拆分的。 這也就是為什么稱(chēng)他為基本類(lèi)型,就像組成單詞的 26 個(gè)英文字母、組成數(shù)字的 0 -9;而復(fù)合類(lèi)型的數(shù)據(jù),是由基本類(lèi)型組成。比如一個(gè)單詞,可以由數(shù)個(gè)字母組成,一個(gè)句子,可以由數(shù)字、字母及標(biāo)點(diǎn)復(fù)合組成。

它們?cè)谟?jì)算機(jī)中的存儲(chǔ)方式不同。計(jì)算機(jī)存儲(chǔ)數(shù)據(jù)時(shí)為了內(nèi)存及運(yùn)行速度考慮,往往會(huì)對(duì)存儲(chǔ)做優(yōu)化,有的會(huì)將值本身存儲(chǔ)在棧內(nèi)存中,也有可能會(huì)在棧內(nèi)存中存儲(chǔ)一個(gè)值的引用,而把值本身存在堆內(nèi)存中。對(duì)于不同的語(yǔ)言,實(shí)現(xiàn)起來(lái)或許會(huì)有不一致,但思想都是如此。

4. js 中值類(lèi)型和引用類(lèi)型的存儲(chǔ)方式是怎樣的?

對(duì)于 js 來(lái)講,是沒(méi)有棧內(nèi)存的概念的,但是 js 在編譯執(zhí)行代碼時(shí),會(huì)首先進(jìn)入一個(gè)執(zhí)行上下文,在執(zhí)行上下文的創(chuàng)建階段,會(huì)開(kāi)辟一片區(qū)域,用來(lái)存儲(chǔ)變量和它們的值,這個(gè)區(qū)域就叫做變量對(duì)象。

大概長(zhǎng)這個(gè)樣子:

如上圖所示,對(duì)于基本類(lèi)型的變量,他們的變量名和值都會(huì)存儲(chǔ)在這個(gè)變量對(duì)象中,而對(duì)于 d ,這個(gè)引用類(lèi)型的值,則只是將這個(gè)變量的名字和地址存在變量對(duì)象中,變量的值是存儲(chǔ)在堆內(nèi)存空間的。

結(jié)合我們上一節(jié)所講的 函數(shù)調(diào)用棧和執(zhí)行上下文,體會(huì)一下下面的代碼在進(jìn)入運(yùn)行前和運(yùn)行時(shí),執(zhí)行上下文內(nèi)部的變化。

const a = 124;
const b = "deg";
function bar() {
    const c = false;
    function foo() {
        console.log(c)
    }
    foo();
}

下面給出我的解答。

5. 如何判斷一個(gè)數(shù)據(jù)的數(shù)據(jù)類(lèi)型? - typeof 方法

聲明一個(gè)變量,使用 使用 typeof 方法會(huì)返回一個(gè)唯一的數(shù)據(jù)類(lèi)型字符串。但這個(gè)方法并不怎么靠譜。

類(lèi)型 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 語(yǔ)言設(shè)計(jì)時(shí)的一個(gè) bug, 并且在未來(lái)也不會(huì)更改。

想要爭(zhēng)取判斷 null 可以加一個(gè)條件:

function typeOf(a) {
    if(!a && typeof a === "object") return "null";
    return typeof a;
}
typeOf({}); // "object"
typeOf(null); // "null"

typeof function(){} === "function", 這是因?yàn)?b>function 作為 js 的一等公民,是可以調(diào)用的對(duì)象,設(shè)計(jì)者認(rèn)為有必要將它和普通對(duì)象區(qū)別開(kāi)來(lái)。

- Object.prototype.toString.call() 方法

除了 typeof 方法外,調(diào)用 Object.prototype.toString.call() 方法 也可以返回一個(gè)包含數(shù)據(jù)類(lèi)型的字符串,并且更為準(zhǔn)確。

類(lèi)型 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)兛梢钥闯?,這方法對(duì)于類(lèi)型的檢測(cè)更加精確。

因此,我們可以寫(xiě)一個(gè)函數(shù),用來(lái)精確檢測(cè)類(lèi)型。

function getClass (a) {
  const str = Object.prototype.toString.call(a)
  return /^[object (.*)]$/.exec(str)[1]
}
getClass(null) // "Null";
...
原文地址:阿木木的博客

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/99822.html

相關(guān)文章

  • 33 個(gè) js 核心概念(三):值類(lèi)型與引用類(lèi)型

    摘要:它們的區(qū)別之一就是在計(jì)算機(jī)中的存儲(chǔ)方式不同基本類(lèi)型數(shù)據(jù)是將變量名及值存儲(chǔ)在變量對(duì)象中,而引用類(lèi)型的數(shù)據(jù)是將變量名和地址存儲(chǔ)在變量對(duì)象中,真正的值是存儲(chǔ)在堆內(nèi)存中。 showImg(https://segmentfault.com/img/remote/1460000017151449); 說(shuō)點(diǎn)別的 這是《關(guān)于 JavaScript 你必須要知道的 33 個(gè)概念 》系列的第三篇文章,今天...

    everfight 評(píng)論0 收藏0
  • 33 個(gè) js 核心概念(四):顯式 (名義) 與 隱式 (鴨子)類(lèi)型轉(zhuǎn)換

    摘要:相對(duì)于顯式使用,隱式轉(zhuǎn)換則更加簡(jiǎn)潔。隱式轉(zhuǎn)換為布爾值將其他類(lèi)型值隱式轉(zhuǎn)換為布爾值是我們最常用的一種轉(zhuǎn)換。在以下場(chǎng)景中,都是進(jìn)行判斷,而只要傳入的值不是布爾值,都會(huì)通過(guò)隱式類(lèi)型轉(zhuǎn)換轉(zhuǎn)為布爾值。原文地址阿木木的博客與隱式鴨子類(lèi)型轉(zhuǎn)換 showImg(https://segmentfault.com/img/remote/1460000017309581); 前言 說(shuō)實(shí)話,JavaScrip...

    hoohack 評(píng)論0 收藏0
  • 33 個(gè) js 核心概念(一):函數(shù)調(diào)用棧,執(zhí)行上下文與變量對(duì)象

    摘要:最先執(zhí)行完畢的一定是最里面的函數(shù),執(zhí)行過(guò)后彈出調(diào)用棧,接著執(zhí)行上一層函數(shù),直至所有函數(shù)執(zhí)行完,調(diào)用棧清空。到這里你應(yīng)該就會(huì)明白,上面函數(shù)調(diào)用棧,就是生成了一個(gè)函數(shù)的執(zhí)行上下文。 showImg(http://upload-images.jianshu.io/upload_images/7803415-36e8e7d048f63524.jpg?imageMogr2/auto-orient...

    ZHAO_ 評(píng)論0 收藏0
  • 『 Spark 』6. 深入研究 spark 運(yùn)行原理之 job, stage, task

    摘要:原文地址深入研究運(yùn)行原理之寫(xiě)在前面本系列是綜合了自己在學(xué)習(xí)過(guò)程中的理解記錄對(duì)參考文章中的一些理解個(gè)人實(shí)踐過(guò)程中的一些心得而來(lái)。值得深究的是,這個(gè)由兩個(gè)完成,這兩個(gè)一共有個(gè)。 原文地址:『 Spark 』6. 深入研究 spark 運(yùn)行原理之 job, stage, task 寫(xiě)在前面 本系列是綜合了自己在學(xué)習(xí)spark過(guò)程中的理解記錄 + 對(duì)參考文章中的一些理解 + 個(gè)人實(shí)踐spark...

    Me_Kun 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<