摘要:使用格式表示整數(shù)和浮點(diǎn)數(shù),一般來(lái)說(shuō)整數(shù)占用了位,而浮點(diǎn)數(shù)數(shù)占用位。要比較浮點(diǎn)數(shù)是否相等,可以采用是一個(gè)非常小的數(shù)值,如果兩個(gè)浮點(diǎn)數(shù)相減小于,則可以為認(rèn)為是相等。
最近面試了三個(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è)比較特殊的兄弟
Infinity 當(dāng)數(shù)值超過(guò)Number類型的最大值,他就會(huì)變成正無(wú)窮
-Infinity 當(dāng)數(shù)值類型小于Number類型的最小值,就會(huì)變成負(fù)無(wú)窮
NaN NaN的意思是它不是一個(gè)數(shù)值,例如某個(gè)字符串除以0,一般語(yǔ)言都會(huì)報(bào)錯(cuò),但是js不會(huì),而是該變量的值會(huì)變成NaN。
// Infinity與NaN的區(qū)別 "90"/4 // 22.5 "90n"/4 // NaN "90"/0 // Infinity "90n"/0 // NaN "90N"/"a" // NaN
數(shù)值類型一旦變成這三個(gè)兄弟,就無(wú)法參與后續(xù)的數(shù)值運(yùn)算。
數(shù)值計(jì)算數(shù)值計(jì)算操作符有很多,常見(jiàn)的有加減乘除,自增,自減。
變量在參與數(shù)值計(jì)算時(shí),變量值會(huì)被轉(zhuǎn)換成基本包裝類型Number參與表達(dá)式求值。如果某個(gè)變量值轉(zhuǎn)換的結(jié)果是NaN, 那么整個(gè)表達(dá)式的結(jié)果就為NaN
Number("90n") // NaN Number("90") // 90 "90"/4 // 22.5 "90n"/4 // NaN "90"/0 // Infinity "90n"/0 // NaN "90N"/"a" // NaN NaN + Infinity // NaNString類型
從靜態(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). --MDNBoolean
Boolean值很簡(jiǎn)單,就false和true兩個(gè)值。但是很多人不能完全回答出,哪些值會(huì)被轉(zhuǎn)換成false。
除了下面幾個(gè)能夠被轉(zhuǎn)成false的值,其他都是true。
false "" NaN undefined 0, -0, +0 nullundefined 和 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ō)明 |
---|---|---|
configurable | true | 表示這個(gè)屬性能否用delete刪除 |
enumerable | true | 表示這個(gè)屬性能否通過(guò)for in 循環(huán)遍歷 |
writable | true | 表示這個(gè)屬性能否被修改 |
value | undefined | 表示這個(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 ? "男" : "女" } })最后
很多人抱怨說(shuō),工作不好找,其實(shí)大多數(shù)時(shí)候都是自己準(zhǔn)備不足。
隨便網(wǎng)上刷刷幾道題,看看幾集視頻教程,往往不太同意蒙混過(guò)關(guān)。
雖說(shuō)前端可能比較簡(jiǎn)單,但是也絕沒(méi)有想象的那么簡(jiǎn)單。
掃碼訂閱我的微信公眾號(hào):洞香春天。每天一篇技術(shù)短文,讓知識(shí)不再高冷。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/102863.html
摘要:前言大概是我的業(yè)務(wù)領(lǐng)域比較狹窄的原因我總是會(huì)聽(tīng)說(shuō)卻很少在實(shí)際的開(kāi)發(fā)中應(yīng)用或者實(shí)踐過(guò)它今天剛好看到高級(jí)程序設(shè)計(jì)第三版的數(shù)據(jù)存儲(chǔ)部分說(shuō)到了這里就對(duì)做一個(gè)深入訪談希望和我一樣對(duì)似曾相識(shí)的朋友可以真正的熟悉并學(xué)會(huì)利用來(lái)服務(wù)我們的業(yè)務(wù)定義是服務(wù)器為了 前言 大概是我的業(yè)務(wù)領(lǐng)域比較狹窄的原因,我總是會(huì)聽(tīng)說(shuō)cookie,卻很少在實(shí)際的開(kāi)發(fā)中應(yīng)用或者實(shí)踐過(guò)它,今天剛好看到的數(shù)據(jù)存儲(chǔ)部分,說(shuō)到了cook...
摘要:布爾值和兩個(gè)值,與其他語(yǔ)言中似乎沒(méi)有任何區(qū)別以及特異所在。注意點(diǎn)中有類假的概念,即便不是也會(huì)被當(dāng)做處理,請(qǐng)注意下面幾個(gè)值布爾值未定義空字符串面向?qū)ο蠛苓z憾地說(shuō),設(shè)計(jì)的時(shí)候肯定沒(méi)有考慮。 JavaScript 特性 1.弱類型語(yǔ)言2.解釋型語(yǔ)言3.客戶端語(yǔ)言對(duì)于有學(xué)習(xí)Java、C以及Python一類的人來(lái)說(shuō),最熟悉的莫過(guò)于這些都是強(qiáng)類型語(yǔ)言。它們嚴(yán)格的遵守自身的規(guī)定,永遠(yuǎn)也不會(huì)有下面的情...
摘要:就是神奇之一,它也是最熟悉的陌生人,因?yàn)槟阋徊恍⌒木蜁?huì)觸發(fā)它然而你并沒(méi)有意識(shí)到它正在神奇地發(fā)揮作用。最常見(jiàn)的有和,中還增加了和,這里就不深入研究了。其根本原理就是它們處于同一個(gè),符合屬于同一個(gè)的兩個(gè)相鄰元素的會(huì)發(fā)生重疊的規(guī)則。 BFC,你也許聽(tīng)過(guò)這個(gè)詞,但是你可能不是很有底氣地解釋清楚。寫樣式的時(shí)候,往往加了一個(gè)樣式或者改了一個(gè)屬性,就能達(dá)到你期望的效果,一切都是如此地神奇。BFC就是...
摘要:前端日?qǐng)?bào)精選的現(xiàn)狀網(wǎng)頁(yè)性能提升指南精讀現(xiàn)代概覽從入門到真實(shí)項(xiàng)目配置瀏覽器的渲染過(guò)程與原理動(dòng)畫動(dòng)畫中文第期跨瀏覽器頁(yè)的通信解決方案嘗試前端面試題及答案總結(jié)掘金周刊教程最熟悉的陌生人個(gè)人文章技術(shù)周刊期知乎專欄的缺口和中的樣式從外 2017-09-18 前端日?qǐng)?bào) 精選 Web 的現(xiàn)狀:網(wǎng)頁(yè)性能提升指南精讀《現(xiàn)代 JavaScript 概覽》webpack:從入門到真實(shí)項(xiàng)目配置瀏覽器的渲染:過(guò)...
摘要:節(jié)目單表是每一年春晚上表演的節(jié)目,包括節(jié)目類型節(jié)目名演員名這幾項(xiàng)數(shù)據(jù)。好消息是,今年的春晚她會(huì)繼續(xù)主持。對(duì)她的印象莫過(guò)于每年春晚尾聲的那曲難忘今宵。年的春晚,她一人連唱首歌,前無(wú)古人,也后無(wú)來(lái)者。 showImg(https://segmentfault.com/img/remote/1460000018120380); 看過(guò)那么多春晚,哪一年、哪些節(jié)目、哪些人你還留有深刻印象呢。 記...
閱讀 1639·2021-11-22 09:34
閱讀 1713·2019-08-29 16:36
閱讀 2698·2019-08-29 15:43
閱讀 3139·2019-08-29 13:57
閱讀 1321·2019-08-28 18:05
閱讀 1909·2019-08-26 18:26
閱讀 3274·2019-08-26 10:39
閱讀 3483·2019-08-23 18:40