JS資料型別的一些細節點

2021-10-10 04:56:09 字數 2708 閱讀 5994

bigint

引用資料型別

function

number數字

infinity:無限大 -infinity:無限小

把其它資料型別轉換為number型別

console.log(typeof nan); //->'number'

console.log(typeof infinity); //->'number'

console.log(nan === nan); //->false

console.log(object.is(nan, nan)); //->true

string字串

把其它值轉換為字串

let n = '10',

m = 10;

console.log(10 + n); // 「+」有一邊出現了字串「前提:有兩邊」會變為字串拼接 『1010』

console.log(+n); // 「+」只有一邊,把值轉換為數字 10

console.log(++n); // 「++」和上面一樣也是轉換為數字,但是還會自身累加一 11

擴充套件:加號一邊為物件變為字串拼接的底層機制

let obj = 

};console.log(10 + obj); //->' defalt' 20

console.log(number(obj)); //->'number' 10

console.log(string(obj)); //->'string' 10

以下 new number(10)這個實力物件沒有重寫symbol.toprimitive但是結果得出20 ,因為直接呼叫了此物件的valueof()

console.log(10 + new number(10)); //->20   new number(10).valueof()
補充知識點:symbol.toprimitive的含義和用法

symbol.toprimitive 是乙個內建的 symbol 值,它是作為物件的函式值屬性存在的,當乙個物件轉換為對應的原始值時,會呼叫此函式。

const object1 = 

return null;

}};//物件前只有乙個加號是要將其轉換為數字

console.log(+object1);//=>null

// 乙個沒有提供 symbol.toprimitive 屬性的物件,參與運算時的輸出結果

var obj1 = {};

console.log(+obj1); // nan

console.log(`$`); // "[object object]"

console.log(obj1 + ""); // "[object object]"

// 接下面宣告乙個物件,手動賦予了 symbol.toprimitive 屬性,再來檢視輸出結果

var obj2 =

if (hint == "string")

return true;

}};console.log(+obj2); // 10 -- hint 引數值是 "number"

console.log(`$`); // "hello" -- hint 引數值是 "string"

console.log(obj2 + ""); // "true" -- hint 引數值是 "default"

symbol():建立唯一值
new symbol(); //uncaught typeerror: symbol is not a constructor
symbol()建立的是唯一值

// console.log(symbol('aa') === symbol('aa')); //->false
給物件建立不可獲取的唯一值

let obj = ;

console.log(obj[symbol()]); //->undefined

給物件建立可獲取的唯一值

let x = symbol();

let obj = ;

console.log(obj[x]); //->100

很多js的內建原理都是基於這些symbol的屬性來處理的

symbol.toprimitive

symbol.hasinstance

symbol.tostringtag

symbol.iterator

bigint:大數

大型專案中,伺服器返回給客戶端的資料中可能出現大數「伺服器資料庫中可以基於longint儲存數值,這個值可能會超過最大安全數字」

number.max_safe_integer : 9007199254740991 最大安全數字

number.min_safe_integer :-9007199254740991最小安全數

超過安全數字進行運算,結果是不準確的

MySQL的一些資料型別

如果乙個float型資料轉成二進位制後的第32位之後都是0,那麼資料是準的 如果乙個float型資料轉成二進位制後的第32位之後不全為0,則資料就會存在誤差 float和double型別的區別和誤差 但是decimal型別是mysql官方唯一指定能精確儲存的型別,也是dba強烈推薦和金錢相關的型別都...

關於js資料型別的一些知識點(一)

學習js有接近3個月了,一直沒有系統梳理過一些知識點,再翻看以前的學習筆記的時候,希望可以整理總結一下。一 基本資料型別有 number,string,boolean,null,undefined,object。六種。array 陣列 function 函式 均為物件 引用 型別。二 資料型別之間轉...

js 一些你不可忽視的細節

一 變數宣告 如果在var語句中沒有初始化變數,變數自動取 jscript 值undefined。儘管並不安全,但宣告語句中忽略var關鍵字是合法的 jscript 語法。這時,jscript 直譯器給予變數全域性範圍的可見度。當在過程級中宣告乙個變數時,它不能用於全域性範圍 這種情況下,變數宣告必...