adodo0829/blog

基础数据类型的扩展

Opened this issue · 0 comments

基础数据类型的扩展

总结(摘抄)一下关于基础数据类型的扩展, 即属性和方法...

String 扩展

Unicode表示法: 大括号包含表示Unicode字符(\u{0xXX}或\u{0XXX})
字符串遍历: 可通过for-of遍历字符串
字符串模板: 可单行可多行可插入变量的增强版字符串 ``
标签模板: 函数参数的特殊调用 console.log`123`
String.raw(): 返回把字符串所有变量替换且对斜杠进行转义的结果
String.fromCodePoint(): 返回码点对应字符
codePointAt(): 返回字符对应码点(String.fromCodePoint()的逆操作)
normalize(): 把字符的不同表示方法统一为同样形式,返回新字符串(Unicode正规化)
repeat(): 把字符串重复n次,返回新字符串
matchAll(): 返回正则表达式在字符串的所有匹配
includes(): 是否存在指定字符串
startsWith(): 是否存在字符串头部指定字符串
endsWith(): 是否存在字符串尾部指定字符串
padStart():把指定字符串填充到字符串头部,返回新字符串
padEnd():把指定字符串填充到字符串尾部,返回新字符串

Number 扩展

平时用的也不多...

二进制表示法:0b或0B开头表示二进制(0bXX或0BXX)
八进制表示法:0o或0O开头表示二进制(0oXX或0OXX)
Number.EPSILON:数值最小精度
Number.MIN_SAFE_INTEGER:最小安全数值(-2^53)
Number.MAX_SAFE_INTEGER:最大安全数值(2^53)
Number.parseInt():返回转换值的整数部分
Number.parseFloat():返回转换值的浮点数部分
Number.isFinite():是否为有限数值
Number.isNaN():是否为NaN
Number.isInteger():是否为整数
Number.isSafeInteger():是否在数值安全范围内
Math.trunc():返回数值整数部分
Math.sign():返回数值类型(正数1、负数-1、零0)
Math.cbrt():返回数值立方根
Math.clz32():返回数值的32位无符号整数形式
Math.imul():返回两个数值相乘
Math.fround():返回数值的32位单精度浮点数形式
Math.hypot():返回所有数值平方和的平方根
Math.expm1():返回e^n - 1
Math.log1p():返回1 + n的自然对数(Math.log(1 + n))
Math.log10():返回以10为底的n的对数
Math.log2():返回以2为底的n的对数
Math.sinh():返回n的双曲正弦
Math.cosh():返回n的双曲余弦
Math.tanh():返回n的双曲正切
Math.asinh():返回n的反双曲正弦
Math.acosh():返回n的反双曲余弦
Math.atanh():返回n的反双曲正切

Symbol类型

Symbol 值通过Symbol函数生成。凡是属性名属于 Symbol 类型,就都是独一无二的,可以保证不会与其他属性名产生冲突。

Symbol函数前不能使用new命令,否则会报错;
由于 Symbol 值不是对象,所以不能添加属性。本质上,它是一种类似于字符串的数据类型;
Symbol函数可以接受一个字符串作为参数,表示对 Symbol 实例的描述,方便区分
Symbol函数的参数只是表示对当前 Symbol 值的描述,因此相同参数的Symbol函数的返回值是不相等的
Symbol 值不能与其他类型的值进行运算,会报错
Symbol 值作为对象属性名时,不能用点运算符, 使用[]
在对象的内部,使用 Symbol 值定义属性时,Symbol 值必须放在方括号之中
Symbol 值作为属性名时,该属性还是公开属性,不是私有属性
Symbol 作为属性名时属性不会出现在for...in、for...of循环中,
也不会被Object.keys()、Object.getOwnPropertyNames()、JSON.stringify()返回。
但是,它也不是私有属性,使用Object.getOwnPropertySymbols方法可以获取指定对象的所有 Symbol 属性名。
  • Symbol.for()
let a1 = Symbol.for('123');
let a2 = Symbol.for('123');

a1 === a2 // true

// Symbol.for()与Symbol()这两种写法,都会生成新的Symbol。
// 它们的区别是,前者会被登记在全局环境中供搜索,后者不会
Symbol.keyFor(a1) // "123"
let c2 = Symbol("f");
Symbol.keyFor(c2) // undefined