ES6 数据类型Symbol(符号)

const c = {};

Object.defineProperty(a, my, {value: ‘hello’});

  • Symbol 值作为对象属性名时,不能用点运算符

  • Symbol 值作为属性名时,该属性还是公开属性,不是私有属性

属性名的遍历

Symbol 作为属性名不会被查询的几种方法:

  • for…in、for…of循环中

  • Object.keys()

  • Object.getOwnPropertyNames()

  • JSON.stringify()

Symbol 作为属性名可以被获取的方法:

  • Object.getOwnPropertySymbols()方法

该方法返回一个数组,成员是当前对象的所有用作属性名的 Symbol 值

  • Reflect.ownKeys()方法可以返回所有类型的键名,包括常规键名和 Symbol 键名

回到顶部 目录

定义一个私有属性

let size = Symbol(‘size’);

class Count{

constructor(){

this[size] = 0;

}

add(item){

this[this[size]] = item;

this[size] ++;

}

static sizeOf(instance){

return instance[size];

}

}

let x = new Count();

console.log(Count.sizeOf(x));// 0

x.add(‘foo’);

console.log(Count.sizeOf(x));// 1

console.log(Object.keys(x)); // [“0”]

console.log(Object.getOwnPropertyNames(x));// [“0”]

console.log(Object.getOwnPropertySymbols(x));// [Symbol(size)]

// 对象x的size属性是一个 Symbol 值,所以Object.keys(x)、Object.getOwnPropertyNames(x)都无法获取它。这就造成了一种非私有的内部方法的效果

定义一个私有方法

const Hero = (() =>{

const getRandom = Symbol() //计算属性名

return class{

constructor(attack,hp,defence){

this.attack = attack;

this.hp = hp;

this.defence;

}

gongji(){

const dmg = this.attack * thisgetRandom;

console.log(dmg)

}

getRandom{

return Math.random() * (max - min) + min;

}

}

})();

const h = new Hero(3,100,3);

console.log(h)

Symbol.for(),Symbol.keyFor()

  • Symbol.for(): 重新使用同一个 Symbol 值

它接受一个字符串作为参数,然后搜索有没有以该参数作为名称的 Symbol 值。如果有,就返回这个 Symbol 值,否则就新建一个以该字符串为名称的 Symbol 值,并将其注册到全局

let s1 = Symbol.for(‘foo’);

let s2 = Symbol.for(‘foo’);

s1 === s2 // true

  • Symbol.keyFor()方法返回一个已登记的 Symbol 类型值的key

let s1 = Symbol.for(“foo”);

Symbol.keyFor(s1) // “foo”

let s2 = Symbol(“foo”);

Symbol.keyFor(s2) // undefined

注意,Symbol.for()为 Symbol 值登记的名字,是全局环境的,不管有没有在全局环境运行

其他方法详解

补充一个运算符:**(指数运算符)

回到顶部 目录

BigInt 数据类型


为什么要引入?

  1. JavaScript 所有数字都保存成 64 位浮点数,这给数值的表示带来了两大限制(数值太小会失去精准度)

  2. 大于或等于2的1024次方的数值,JavaScript无法表示,会返回Infinity(无限大)

  3. 为了适合进行科学和金融方面的精确计算

// 超过 53 个二进制位的数值,无法保持精度

Math.pow(2, 53) === Math.pow(2, 53) + 1 // true

// 超过 2 的 1024 次方的数值,无法表示

Math.pow(2, 1024) // Infinity

  1. BigInt:类型的数据必须添加后缀n

  2. BigInt:与普通整数是两种值,它们之间并不相等

  3. typeof BigInt类型的数据 == bigint

  4. BigInt:基本上Number差不多,就是一个升级版

BigInt 对象

BigInt(123) //==> 123n

  • BigInt()构造函数必须有参数,而且参数必须可以正常转为数值

  • 参数如果是小数,也会报错

  • 用new关键字也会报错

计算:

  • BigInt 类型的除法会省略小数

最后

面试一面会问很多基础问题,而这些基础问题基本上在网上搜索,面试题都会很多很多。最好把准备一下常见的面试问题,毕竟面试也相当与一次考试,所以找工作面试的准备千万别偷懒。面试就跟考试一样的,时间长了不复习,现场表现肯定不会太好。表现的不好面试官不可能说,我猜他没发挥好,我录用他吧。

96道前端面试题:

常用算法面试题:

前端基础面试题:
内容主要包括HTML,CSS,JavaScript,浏览器,性能优化

一面会问很多基础问题,而这些基础问题基本上在网上搜索,面试题都会很多很多。最好把准备一下常见的面试问题,毕竟面试也相当与一次考试,所以找工作面试的准备千万别偷懒。面试就跟考试一样的,时间长了不复习,现场表现肯定不会太好。表现的不好面试官不可能说,我猜他没发挥好,我录用他吧。

96道前端面试题:

  • [外链图片转存中…(img-tPZQ4sUT-1720088379566)]

常用算法面试题:

  • [外链图片转存中…(img-aM0qwF0M-1720088379568)]

前端基础面试题:
内容主要包括HTML,CSS,JavaScript,浏览器,性能优化

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值