摘要:使用格式表示整數和浮點數,一般來說整數占用了位,而浮點數數占用位。要比較浮點數是否相等,可以采用是一個非常小的數值,如果兩個浮點數相減小于,則可以為認為是相等。
最近面試了三個開發,他們都沒有說清楚JS的基本類型有哪些。而且往往錯誤的說了一些C語言的數據類型,例如int, float, double之類的數據類型。
無論什么語言,熟練掌握數據類型都是這門語言最根本的知識點
JS數據類型分為兩類,一類是基本類型,他們有
Number
String
Boolean
Undefined
Null
Symbol
js的基本類型就這么幾個,除此之外,其他的類型都是對象。
Number類型在JS沒有整型,float,或者double類型的數值,所有數值統一叫做Number類型。
JS使用IEEE754格式表示整數和浮點數,一般來說整數占用了32位,而浮點數數占用64位。因為浮點數占用的內存空間是整數的兩倍,所以js會適當的把浮點數轉化為整數儲存。
4.0 === 4 // true
數值類型都是有大小范圍的
Number.MAX_VALUE // 1.7976931348623157e+308 Number.MIN_VALUE // 5e-324 Number.MAX_SAFE_INTEGER // 9007199254740991 Number.MIN_SAFE_INTEGER // -9007199254740991
浮點數一般都是計算結果不準確的,這不是JS的問題,所有語言中都有這個問題。
計算0.1 + 0.2 === 0.3這個結果永遠是false。
要比較浮點數是否相等,可以采用Number.EPSILON, Number.EPSILON是一個非常小的數值,如果兩個浮點數相減小于Number.EPSILON, 則可以為認為是相等。
Math.abs(0.1 + 0.2 - 0.3) < Number.EPSILON // true
Number類型中有三個比較特殊的兄弟
Infinity 當數值超過Number類型的最大值,他就會變成正無窮
-Infinity 當數值類型小于Number類型的最小值,就會變成負無窮
NaN NaN的意思是它不是一個數值,例如某個字符串除以0,一般語言都會報錯,但是js不會,而是該變量的值會變成NaN。
// Infinity與NaN的區別 "90"/4 // 22.5 "90n"/4 // NaN "90"/0 // Infinity "90n"/0 // NaN "90N"/"a" // NaN
數值類型一旦變成這三個兄弟,就無法參與后續的數值運算。
數值計算數值計算操作符有很多,常見的有加減乘除,自增,自減。
變量在參與數值計算時,變量值會被轉換成基本包裝類型Number參與表達式求值。如果某個變量值轉換的結果是NaN, 那么整個表達式的結果就為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類型
從靜態語言過來的同學,遇到字符串就會問個問題:請問你能裝多少個字符串呢?
字符串傻傻一笑,說:自從我誕生以來,從來就沒被裝滿過!
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值很簡單,就false和true兩個值。但是很多人不能完全回答出,哪些值會被轉換成false。
除了下面幾個能夠被轉成false的值,其他都是true。
false "" NaN undefined 0, -0, +0 nullundefined 和 null
undefined表示一個變量被定義了,但是沒有被賦值。null表示這個變量根本沒被定義??傊?,無論是undefined和null,他們基本上都是不能使用的值。
null類型有個特別的作用。比如有個對象,有很多屬性,這時候你想把這個變量給標記為可以被垃圾回收了,那么就可以把它的值設置為null。
最熟悉的陌生人: 對象我曾認為對象在js中是最簡單的,而實際上,是我太天真。
// 定義一個對象,so easy var boy = { name: "wangduanduan" }
var boy = {} Object.defineProperty(boy, "name", { writable: false, value: "wdd" }) boy.name = "ddw" // 設置不會生效,boy.name的值還是wdd對象的數據屬性
數據屬性 | 默認值 | 說明 |
---|---|---|
configurable | true | 表示這個屬性能否用delete刪除 |
enumerable | true | 表示這個屬性能否通過for in 循環遍歷 |
writable | true | 表示這個屬性能否被修改 |
value | undefined | 表示這個屬性的數據值 |
如果調用Object.defineProperty沒有指定configurable, enumerable, writable,那么他們的默認值都是false。
訪問器屬性訪問器屬性就是get, set讓你可以在讀取或者寫入值時,做一層攔截。
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會有什么問題?
// 這樣寫會有什么問題 var man = { sex: 1 } Object.defineProperty(man, "sex", { set: function (v) { this.sex = v === "男" ? 1 : 0 }, get: function () { return this.sex === 1 ? "男" : "女" } })最后
很多人抱怨說,工作不好找,其實大多數時候都是自己準備不足。
隨便網上刷刷幾道題,看看幾集視頻教程,往往不太同意蒙混過關。
雖說前端可能比較簡單,但是也絕沒有想象的那么簡單。
掃碼訂閱我的微信公眾號:洞香春天。每天一篇技術短文,讓知識不再高冷。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/102863.html
摘要:前言大概是我的業務領域比較狹窄的原因我總是會聽說卻很少在實際的開發中應用或者實踐過它今天剛好看到高級程序設計第三版的數據存儲部分說到了這里就對做一個深入訪談希望和我一樣對似曾相識的朋友可以真正的熟悉并學會利用來服務我們的業務定義是服務器為了 前言 大概是我的業務領域比較狹窄的原因,我總是會聽說cookie,卻很少在實際的開發中應用或者實踐過它,今天剛好看到的數據存儲部分,說到了cook...
摘要:布爾值和兩個值,與其他語言中似乎沒有任何區別以及特異所在。注意點中有類假的概念,即便不是也會被當做處理,請注意下面幾個值布爾值未定義空字符串面向對象很遺憾地說,設計的時候肯定沒有考慮。 JavaScript 特性 1.弱類型語言2.解釋型語言3.客戶端語言對于有學習Java、C以及Python一類的人來說,最熟悉的莫過于這些都是強類型語言。它們嚴格的遵守自身的規定,永遠也不會有下面的情...
摘要:就是神奇之一,它也是最熟悉的陌生人,因為你一不小心就會觸發它然而你并沒有意識到它正在神奇地發揮作用。最常見的有和,中還增加了和,這里就不深入研究了。其根本原理就是它們處于同一個,符合屬于同一個的兩個相鄰元素的會發生重疊的規則。 BFC,你也許聽過這個詞,但是你可能不是很有底氣地解釋清楚。寫樣式的時候,往往加了一個樣式或者改了一個屬性,就能達到你期望的效果,一切都是如此地神奇。BFC就是...
摘要:前端日報精選的現狀網頁性能提升指南精讀現代概覽從入門到真實項目配置瀏覽器的渲染過程與原理動畫動畫中文第期跨瀏覽器頁的通信解決方案嘗試前端面試題及答案總結掘金周刊教程最熟悉的陌生人個人文章技術周刊期知乎專欄的缺口和中的樣式從外 2017-09-18 前端日報 精選 Web 的現狀:網頁性能提升指南精讀《現代 JavaScript 概覽》webpack:從入門到真實項目配置瀏覽器的渲染:過...
摘要:節目單表是每一年春晚上表演的節目,包括節目類型節目名演員名這幾項數據。好消息是,今年的春晚她會繼續主持。對她的印象莫過于每年春晚尾聲的那曲難忘今宵。年的春晚,她一人連唱首歌,前無古人,也后無來者。 showImg(https://segmentfault.com/img/remote/1460000018120380); 看過那么多春晚,哪一年、哪些節目、哪些人你還留有深刻印象呢。 記...
閱讀 1599·2021-11-22 09:34
閱讀 1690·2019-08-29 16:36
閱讀 2668·2019-08-29 15:43
閱讀 3113·2019-08-29 13:57
閱讀 1297·2019-08-28 18:05
閱讀 1874·2019-08-26 18:26
閱讀 3242·2019-08-26 10:39
閱讀 3454·2019-08-23 18:40