分不清Boolean和boolean,我被同事diss了!
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
背景这几天写代码,遇到一个不确定的知识点:我在vue的props中如何给一个属性定义小写的bolean,代码就会报错 但是大写的Bolean就没问题 由于我在其他地方我看大小写都可以,有点疑惑,于是想去请教一下同事。然而,没想到同事上来就diss我:
我有点不开心,想反驳一下: 这两个不都是描述类型的东西吗?我给你看其他地方的代码,这两个都是可以混用的! 同事有点不耐烦,说道:大姐,boolean是TS中的类型声明,Boolean是JavaScript 的构造函数,根本不是一个东西吧! 行吧,我也刚入门不久,确实不了解这个东西,只能强忍委屈,对同事说了声谢谢,我知道了! 然后,我好好的学习了一下Boolean和boolean的知识,终于搞明白他们的区别了。 Boolean和boolean本质区别同事说的很对,他们两个的本质区别就是一个是JavaScript语法,一个是TypeScript语法,这意味着非TypeScript项目是不存在boolean这个东西的。
TS中作为类型的Boolean和boolean在TypeScript中,Boolean和boolean都可以用于表示布尔类型
但是,他们存在一些区别
|
特性 | boolean | Boolean |
---|---|---|
定义 | TypeScript 的基本类型 | JavaScript 的构造函数 |
值类型 | 只能是 true 或 false | 是一个布尔对象 |
推荐使用场景 | 用于定义基本布尔值类型 | 很少用,除非需要显式构造布尔对象 |
运行时行为 | 不存在,只在编译时有效 | 在运行时是 JavaScript 的构造函数 |
性能 | 高效,直接操作布尔值 | 对象包装,性能较差 |
Boolean
?类型行为不一致:Boolean
是对象类型,而不是基本值类型。这会在逻辑运算中导致混淆:
jsconst flag: Boolean = new Boolean(false);
if (flag) {
console.log("This will run!"); // 因为对象始终为 truthy
}
性能开销更大:Boolean
会创建对象,而 boolean
是直接操作基本类型。
boolean
Vue 的运行时框架无法识别 boolean
类型,它依赖的是 JavaScript 的内置构造函数(如 Boolean
、String
、Number
等)来检查和处理 props
类型。
因此,props的Type只能是Boolean
、String
或Number
。
但是如果vue中开启了ts语法,就可以使用boolean
表示类型了
js<script lang="ts" setup>
interface IProps {
photoImages?: string[],
isEdit?: boolean
}
const props = withDefaults(defineProps<IProps>(), {
photoImages: () => [],
isEdit: true
})
</script>