分不清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>