文章均为个人原创, 搬运请附上原文地址感谢, 原文来自MasterYi博客
let number;
number = '9007199254740992';
console.log(`string: ` + number, `转化为 number: ` + Number(number)) // string: 9007199254740992 转化为 number: 9007199254740992
number = '9007199254740995';
console.log(`string: ` + number, `转化为 number: ` + Number(number)) // string: 9007199254740995 转化为 number: 9007199254740996
number = '6145390195186705543';
console.log(`string: ` + number, `转化为 number: ` + Number(number)) // string: 6145390195186705543 转化为 number: 6145390195186705000
let bigInt;
// 整数后面+n可以创建bigInt
bigInt = 9007199254740995n;
console.log(bigInt) // 9007199254740995n
// 支持整数或string 转换bigInt
bigInt = BigInt('6145390195186705543');
console.log(bigInt) // 6145390195186705408n
+bigInt; // 这种运算方式会报错
// 我们在创建一个symbol的值时, 中间的字符串并不是symbol的值, 只是代表对这个symbol的描述
let Symbol_a = Symbol('description');
let Symbol_b = Symbol('description');
console.log(Symbol_a === Symbol_b) // false
// 可以通过.description 取出描述值
console.log(Symbol_a.description) // description
// 可以转为 bool 或 string, 但是不能与其他类型的值进行运算
console.log(Symbol_a.toString()) // Symbol(description)
console.log(Boolean(Symbol_a)) // true
Symbol_a + 'a' // 这种运算符写法会报错
// 用途一:对象定义一些非私有的、但又希望只用于内部的方法
let obj = {
'a': '小张',
[Symbol_a]: '小红',
[Symbol_b]: '小明',
}
// 这个遍历只会打印 a 因为symbol不会被遍历 但可以正常访问
for (let i in obj){
console.log(i)
}
console.log(obj[Symbol_a]) // 小红
// 用途二:防止某一个键被不小心改写或覆盖 ( 当然这里只是简单的示例, 会显得有点奇葩, 但是这种一般用于框架层 和 消息订阅的通道名 就会使得更加的严谨和唯一 )
obj[Symbol_a] = '小黑' // 拿到唯一的symbol的实例才能改写相应值
obj['a'] = '小绿' // 原写法就没有唯一性, 可随意覆盖
// 用途三: 消除魔术字符串 ( 写过ts应该会觉得有点enum的味道, 但symbol更具有严谨性(唯一代表无法直接使用对应值做判断,强制性的采用枚举), 有一些写的enum不严谨的新手会直接采用枚举对应的值做判断 )
const language = {
chinese: Symbol(),
english: Symbol(),
}
function getLanguage(type) {
switch (type) {
case type.chinese:
return '中文'
case type.english:
return '英语'
}
}
getLanguage(language.chinese) //中文
console.log(typeof true); // boolean
console.log(typeof undefined); // undefined
console.log(typeof 'string') // string
console.log(typeof 1) // number
console.log(typeof 1n) // bigint
console.log(typeof Symbol('')) // symbol
console.log(typeof function (){}) // function
console.log(typeof new function (){}) // object
console.log(typeof null); // object
console.log(typeof {}) // object
console.log(typeof []) // object
console.log(typeof new Map()) // object
let test = function (){};
console.log(test instanceof Function); // true
console.log(new test() instanceof Function); // false 因为已经被实例化
console.log(new test() instanceof Object); // true
console.log(new test() instanceof test); // true
console.log(new Map() instanceof Map); // true
console.log(new Map() instanceof Object); // true
console.log(new Map() instanceof Function); // false 因为已经被实例化
console.log(Map instanceof Function); // true