溫馨提示×

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

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

JavaScript數(shù)據(jù)類型是什么

發(fā)布時(shí)間:2020-12-02 13:41:57 來(lái)源:億速云 閱讀:106 作者:小新 欄目:web開(kāi)發(fā)

小編給大家分享一下JavaScript數(shù)據(jù)類型是什么,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

最近面試了三個(gè)開(kāi)發(fā),他們都沒(méi)有說(shuō)清楚JS的基本類型有哪些。而且往往錯(cuò)誤的說(shuō)了一些C語(yǔ)言的數(shù)據(jù)類型,例如int, float, double之類的數(shù)據(jù)類型。

無(wú)論什么語(yǔ)言,熟練掌握數(shù)據(jù)類型都是這門語(yǔ)言最根本的知識(shí)點(diǎn)

JS數(shù)據(jù)類型分為兩類,一類是基本類型,他們有

  • Number
  • String
  • Boolean
  • Undefined
  • Null
  • Symbol

js的基本類型就這么幾個(gè),除此之外,其他的類型都是對(duì)象。

Number類型

在JS沒(méi)有整型,float,或者double類型的數(shù)值,所有數(shù)值統(tǒng)一叫做Number類型。

JS使用IEEE754格式表示整數(shù)和浮點(diǎn)數(shù),一般來(lái)說(shuō)整數(shù)占用了32位,而浮點(diǎn)數(shù)數(shù)占用64位。因?yàn)楦↑c(diǎn)數(shù)占用的內(nèi)存空間是整數(shù)的兩倍,所以js會(huì)適當(dāng)?shù)陌迅↑c(diǎn)數(shù)轉(zhuǎn)化為整數(shù)儲(chǔ)存。

4.0 === 4 // true

數(shù)值類型都是有大小范圍的

Number.MAX_VALUE  // 1.7976931348623157e+308
Number.MIN_VALUE // 5e-324
Number.MAX_SAFE_INTEGER // 9007199254740991
Number.MIN_SAFE_INTEGER // -9007199254740991

浮點(diǎn)數(shù)一般都是計(jì)算結(jié)果不準(zhǔn)確的,這不是JS的問(wèn)題,所有語(yǔ)言中都有這個(gè)問(wèn)題。

計(jì)算0.1 + 0.2 === 0.3這個(gè)結(jié)果永遠(yuǎn)是false。

要比較浮點(diǎn)數(shù)是否相等,可以采用Number.EPSILON, Number.EPSILON是一個(gè)非常小的數(shù)值,如果兩個(gè)浮點(diǎn)數(shù)相減小于Number.EPSILON, 則可以為認(rèn)為是相等。

Math.abs(0.1 + 0.2 - 0.3) < Number.EPSILON // true

Number類型中有三個(gè)比較特殊的兄弟

  1. Infinity 當(dāng)數(shù)值超過(guò)Number類型的最大值,他就會(huì)變成正無(wú)窮
  2. -Infinity 當(dāng)數(shù)值類型小于Number類型的最小值,就會(huì)變成負(fù)無(wú)窮
  3. NaN NaN的意思是它不是一個(gè)數(shù)值,例如某個(gè)數(shù)值除以0,一般語(yǔ)言都會(huì)報(bào)錯(cuò),但是js不會(huì),而是該變量的值會(huì)變成NaN。

數(shù)值類型一旦變成這三個(gè)兄弟,就無(wú)法參與后續(xù)的數(shù)值運(yùn)算。

String類型

從靜態(tài)語(yǔ)言過(guò)來(lái)的同學(xué),遇到字符串就會(huì)問(wèn)個(gè)問(wèn)題:請(qǐng)問(wèn)你能裝多少個(gè)字符串呢?

字符串傻傻一笑,說(shuō):自從我誕生以來(lái),從來(lái)就沒(méi)被裝滿過(guò)!

ECMAScript 2016 (ed. 7) established a maximum length of 2^53 - 1 elements. Previously, no maximum length was specified. In Firefox, strings have a maximum length of 230 - 2 (~1GB). In versions prior to Firefox 65, the maximum length was 228 - 1 (~256MB).  --MDN

Boolean

Boolean值很簡(jiǎn)單,就false和true兩個(gè)值。但是很多人不能完全回答出,哪些值會(huì)被轉(zhuǎn)換成false。

除了下面幾個(gè)能夠被轉(zhuǎn)成false的值,其他都是true。

false
''
NaN
undefined
0, -0, +0
null

undefined 和 null

undefined表示一個(gè)變量被定義了,但是沒(méi)有被賦值。null表示這個(gè)變量根本沒(méi)被定義。總之,無(wú)論是undefined和null,他們基本上都是不能使用的值。

null類型有個(gè)特別的作用。比如有個(gè)對(duì)象,有很多屬性,這時(shí)候你想把這個(gè)變量給標(biāo)記為可以被垃圾回收了,那么就可以把它的值設(shè)置為null。

最熟悉的陌生人:  對(duì)象

我曾認(rèn)為對(duì)象在js中是最簡(jiǎn)單的,而實(shí)際上,是我太天真。
// 定義一個(gè)對(duì)象,so easy
var boy = {
  name: 'wangduanduan'
}
var boy = {}
Object.defineProperty(boy, 'name', {
 writable: false,
 value: 'wdd'
})
boy.name = 'ddw' // 設(shè)置不會(huì)生效,boy.name的值還是wdd

對(duì)象的數(shù)據(jù)屬性

數(shù)據(jù)屬性默認(rèn)值說(shuō)明
configurabletrue表示這個(gè)屬性能否用delete刪除
enumerabletrue表示這個(gè)屬性能否通過(guò)for in 循環(huán)遍歷
writabletrue表示這個(gè)屬性能否被修改
valueundefined表示這個(gè)屬性的數(shù)據(jù)值

如果調(diào)用Object.defineProperty沒(méi)有指定configurable, enumerable, writable,那么他們的默認(rèn)值都是false。

訪問(wèn)器屬性

訪問(wèn)器屬性就是get, set讓你可以在讀取或者寫入值時(shí),做一層攔截。

var man = {
    _sex: 1
}
Object.defineProperty(man, 'sex', {
 set: function (v) {
     this._sex = v === '男' ? 1 : 0
 },
 get: function () {
     return this._sex === 1 ? "男" : "女"
 }
})
nam.sex // 男

想一想如果把上面的_sex改成sex會(huì)有什么問(wèn)題?

// 這樣寫會(huì)有什么問(wèn)題
var man = {
    sex: 1
}
Object.defineProperty(man, 'sex', {
 set: function (v) {
     this.sex = v === '男' ? 1 : 0
 },
 get: function () {
     return this.sex === 1 ? "男" : "女"
 }
})

看完了這篇文章,相信你對(duì)JavaScript數(shù)據(jù)類型是什么有了一定的了解,想了解更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

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

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

AI