TypeScript 中 const 和 readonly 的区别?枚举和常量枚举的区别?
高级前端进阶
共 2933字,需浏览 6分钟
· 2021-08-29
回复交流,加入前端编程面试算法每日一题群
TypeScript 中 const 与 readonly 的区别?
TypeScript 中不可变量的实现方法有两种:
使用 ES6 的 const 关键字声明的值类型 被 readonly 修饰的属性
TypeScript 中 readonly
TypeScript 中的只读修饰符,可以声明更加严谨的可读属性
通常在 interface
、 Class
、 type
以及 array
和 tuple
类型中使用它,也可以用来定义一个函数的参数
// type
type Foo = {
readonly bar: number;
};
// const 确保 'config' 不能够被改变了
const foo: Foo = { bar: 123 };
// 不能被改变
foo.bar = 456; // Error: foo.bar 为仅读属性
// 函数
function foo(config: { readonly num: number }) {
// ..
}
const config = { num: 123 }
foo(config)
区别
const
用于变量,readonly
用于属性const
在运行时检查,readonly
在编译时检查const
声明的变量不得改变值,这意味着,const
一旦声明变量,就必须立即初始化,不能留到以后赋值;readonly
修饰的属性能确保自身不能修改属性,但是当你把这个属性交给其它并没有这种保证的使用者(允许出于类型兼容性的原因),他们能改变
const foo: {
readonly bar: number;
} = {
bar: 123
};
function iMutateFoo(foo: { bar: number }) {
foo.bar = 456;
}
iMutateFoo(foo);
console.log(foo.bar); // 456
此时,需要 iMutateFoo
明确的表示,他们的参数不可修改,那么编译器会发出错误警告:
function iTakeFoo(foo: Foo) {
foo.bar = 456; // Error: bar 属性只读
}
const
保证的不是变量的值不得改动,而是变量指向的那个内存地址不得改动,例如使用const
变量保存的数组,可以使用push
,pop
等方法。但是如果使用ReadonlyArray<number>
声明的数组不能使用push
,pop
等方法。
枚举和常量枚举的区别?
枚举和常量枚举(const枚举)
使用枚举可以清晰地表达意图或创建一组有区别的用例
// 枚举
enum Color {
Red,
Green,
Blue
}
// 常量枚举
const enum Color {
Red,
Green,
Blue
}
区别
枚举会被编译时会编译成一个对象,可以被当作对象使用 const
枚举会在 typescript 编译期间被删除,const
枚举成员在使用的地方会被内联进来,避免额外的性能开销
// 枚举
enum Color {
Red,
Green,
Blue
}
var sisterAn = Color.Red
// 会被编译成 JavaScript 中的 var sisterAn = Color.Red
// 即在运行执行时,它将会查找变量 Color 和 Color.Red
// 常量枚举
const enum Color {
Red,
Green,
Blue
}
var sisterAn = Color.Red
// 会被编译成 JavaScript 中的 var sisterAn = 0
// 在运行时已经没有 Color 变量
来源:https://github.com/Advanced-Frontend/Daily-Interview-Question
最后
号内回复:
120
套模版评论
:before和::before的区别
说明:今天遇到一个奇怪的css样式问题,使用vux的popup-picker组件h时.weui-cell样式中有一个before伪类,里面有一个border-top为1px的上边框,现在想去掉,:before来获取它会拿不到!!!修改不了,后来使用::be...
Front小思
0
crm和scrm的区别
SCRM全称:social crm,社会化客户关系管理; CRM之父”的Paul Greenberg写完他的CRM经典著作第三版之后,他自己也不得不食言重新写作第四版。原因很简单,范式的改变,让Social CRM(以下简称SCRM)走上了舞台。
传统CRM客户关系管理是一种通过系统和技术手段实现的服务和商业策略,目的是提高客户在与企业交互时的体验。那么,是什么催化了CRM的社会化趋势呢?随着社会化媒体的诞生、发展,越来越多的消费者聚集在社会化媒体中,企业品牌的客户管理也随之发生了改变。
CRM
传统CRM的重点是收集和管理静态的客户资料,如过去的购买信息,联系记录和客户属性信息。传统CRM是企业主导的,属于内向型的,企业注重
启服云知识产权管理系统
0
SCRM和CRM的区别
1.可以触达客户(随时互动,加深印象);
2.可以做到客户的全生命周期(LT)的管理;
3.企业微信是承接客户的最佳载体,和客户建立社交关系;
4.丰富的标签能力,精准的客户画像,是良好客户关系的前提,传统CRM信息缺失;
5.将客户在线化,形成数字化客户资产,可以智能统计户关系管理千人千面”
17.SCRM,也可以称为营销CRM;
18.更加以客户为中心;
19. SCRM的S,可以有四层含义:Social社交,Stack全栈,Smart智能,Simple简单。和分析客情;
6.数字化,可以精准洞察客户需求,销售可以精准捕捉商机;
7.丰富的功能模块,可以提升销售的工作效率,提升转化效率。
8.无需多平台切换,
非著名专家
0