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)
}
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 值登记的名字,是全局环境的,不管有没有在全局环境运行
其他方法详解
补充一个运算符:**
(指数运算符)
回到顶部 目录
为什么要引入?
-
JavaScript 所有数字都保存成 64 位浮点数,这给数值的表示带来了两大限制(数值太小会失去精准度)
-
大于或等于2的1024次方的数值,JavaScript无法表示,会返回Infinity(无限大)
-
为了适合进行科学和金融方面的精确计算
// 超过 53 个二进制位的数值,无法保持精度
Math.pow(2, 53) === Math.pow(2, 53) + 1 // true
// 超过 2 的 1024 次方的数值,无法表示
Math.pow(2, 1024) // Infinity
-
BigInt:类型的数据必须添加后缀n
-
BigInt:与普通整数是两种值,它们之间并不相等
-
typeof BigInt类型的数据 == bigint
-
BigInt:基本上Number差不多,就是一个升级版
BigInt 对象
BigInt(123) //==> 123n
-
BigInt()构造函数必须有参数,而且参数必须可以正常转为数值
-
参数如果是小数,也会报错
-
用new关键字也会报错
计算:
- BigInt 类型的除法会省略小数
最后
面试一面会问很多基础问题,而这些基础问题基本上在网上搜索,面试题都会很多很多。最好把准备一下常见的面试问题,毕竟面试也相当与一次考试,所以找工作面试的准备千万别偷懒。面试就跟考试一样的,时间长了不复习,现场表现肯定不会太好。表现的不好面试官不可能说,我猜他没发挥好,我录用他吧。
96道前端面试题:
常用算法面试题:
前端基础面试题:
内容主要包括HTML,CSS,JavaScript,浏览器,性能优化
一面会问很多基础问题,而这些基础问题基本上在网上搜索,面试题都会很多很多。最好把准备一下常见的面试问题,毕竟面试也相当与一次考试,所以找工作面试的准备千万别偷懒。面试就跟考试一样的,时间长了不复习,现场表现肯定不会太好。表现的不好面试官不可能说,我猜他没发挥好,我录用他吧。
96道前端面试题:
- [外链图片转存中…(img-tPZQ4sUT-1720088379566)]
常用算法面试题:
- [外链图片转存中…(img-aM0qwF0M-1720088379568)]
前端基础面试题:
内容主要包括HTML,CSS,JavaScript,浏览器,性能优化