js中每乙個值都屬於某一種資料型別, 根據最新的語言標準,一共有8種型別
下面我來說一下新增的bigint及symbol
首先來看張圖
控制台敲出90099999999999992 == 90099999999999993 竟然等於true 90099999999999992 === 90099999999999993也等於true , 剛開始感覺重新整理我的三觀
經過度娘調查才知道
此標準下,無法精確表示的非常大的整數將自動四捨五入。確切地說,js 中的number
型別只能安全地表示-9007199254740991 (-(2^53-1))
和9007199254740991(2^53-1)
之間的整數,任何超出此範圍的整數值都可能失去精度。
解決方法
js 提供number.max_safe_integer
常量來表示 最大安全整數,number.min_safe_integer
常量表示最小安全整數:
或者就是使用新的資料型別bigint 直接在數字後面加n即可
隱式型別轉換
因為隱式型別轉換可能丟失資訊,所以不允許在bigint
和number
之間進行混合操作。當混合使用大整數和浮點數時,結果值可能無法由bigint
或number
精確表示。比如:
10 + 10n; // → typeerror 10n > 5; // → true
math.max(2n, 4n, 6n); // → typeerror 10 + number(10n); // → 20
下面是symbol
symbol是es6出的一種型別 本質上是一種唯一識別符號,可用作物件的唯一屬性名,這樣其他人就不會改寫或覆蓋你設定的屬性值 如圖
再次宣告相同key的symbol是會報錯
symbol 資料型別的另一特點是隱藏性,for···in,object.keys() 不能訪問
let id = symbol("id");
let obj = ;
for(let option in obj)
但是也可以用object.getownpropertysymbol 方法會返回乙個陣列,成員是當前物件的所有用作屬性名的 symbol 值。
官方提供了全域性註冊並登記的方法:symbol.for() 通過symbol.keyfor()取值
ES6 資料型別Symbol
1 symbol 定義的屬性,一般方法獲取不到 2 let name symbol 3 let obj 4 name 123 5 name 456 6 獲取symbol元素object.getownpropertysymbols 7object.getownpropertysymbols obj 8...
bigInt資料型別
簡述 bigint資料型別提供了一種方法來表示大於2 53 1的整數。bigint可以表示任意大的整數 作用解決精度缺失的問題 bigint資料型別比number型別支援更大的整數值,number型別只能安全的支援 9007199254740991 2 53 1 和 9007199254740991...
ES6新資料型別 Symbol
我們都知道es5 為我們提供了六種資料型別。分別是 物件 object 數字型別 number 布林型別 boolean 字串型別 string 空型別 null 未定義型別 undefind e6又為我們增加了一種型別 symbol 型別,他表示獨一無二的值。這樣下來js 就有七種資料型別了。一 ...