分不清Boolean和boolean,我被同事diss了!
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
背景這幾天寫(xiě)代碼,遇到一個(gè)不確定的知識(shí)點(diǎn):我在vue的props中如何給一個(gè)屬性定義小寫(xiě)的bolean,代碼就會(huì)報(bào)錯(cuò) 但是大寫(xiě)的Bolean就沒(méi)問(wèn)題 由于我在其他地方我看大小寫(xiě)都可以,有點(diǎn)疑惑,于是想去請(qǐng)教一下同事。然而,沒(méi)想到同事上來(lái)就diss我:
我有點(diǎn)不開(kāi)心,想反駁一下: 這兩個(gè)不都是描述類型的東西嗎?我給你看其他地方的代碼,這兩個(gè)都是可以混用的! 同事有點(diǎn)不耐煩,說(shuō)道:大姐,boolean是TS中的類型聲明,Boolean是JavaScript 的構(gòu)造函數(shù),根本不是一個(gè)東西吧! 行吧,我也剛?cè)腴T(mén)不久,確實(shí)不了解這個(gè)東西,只能強(qiáng)忍委屈,對(duì)同事說(shuō)了聲謝謝,我知道了! 然后,我好好的學(xué)習(xí)了一下Boolean和boolean的知識(shí),終于搞明白他們的區(qū)別了。 Boolean和boolean本質(zhì)區(qū)別同事說(shuō)的很對(duì),他們兩個(gè)的本質(zhì)區(qū)別就是一個(gè)是JavaScript語(yǔ)法,一個(gè)是TypeScript語(yǔ)法,這意味著非TypeScript項(xiàng)目是不存在boolean這個(gè)東西的。
TS中作為類型的Boolean和boolean在TypeScript中,Boolean和boolean都可以用于表示布爾類型
但是,他們存在一些區(qū)別
|
特性 | boolean | Boolean |
---|---|---|
定義 | TypeScript 的基本類型 | JavaScript 的構(gòu)造函數(shù) |
值類型 | 只能是 true 或 false | 是一個(gè)布爾對(duì)象 |
推薦使用場(chǎng)景 | 用于定義基本布爾值類型 | 很少用,除非需要顯式構(gòu)造布爾對(duì)象 |
運(yùn)行時(shí)行為 | 不存在,只在編譯時(shí)有效 | 在運(yùn)行時(shí)是 JavaScript 的構(gòu)造函數(shù) |
性能 | 高效,直接操作布爾值 | 對(duì)象包裝,性能較差 |
Boolean
?類型行為不一致:Boolean
是對(duì)象類型,而不是基本值類型。這會(huì)在邏輯運(yùn)算中導(dǎo)致混淆:
jsconst flag: Boolean = new Boolean(false);
if (flag) {
console.log("This will run!"); // 因?yàn)閷?duì)象始終為 truthy
}
性能開(kāi)銷更大:Boolean
會(huì)創(chuàng)建對(duì)象,而 boolean
是直接操作基本類型。
boolean
Vue 的運(yùn)行時(shí)框架無(wú)法識(shí)別 boolean
類型,它依賴的是 JavaScript 的內(nèi)置構(gòu)造函數(shù)(如 Boolean
、String
、Number
等)來(lái)檢查和處理 props
類型。
因此,props的Type只能是Boolean
、String
或Number
。
但是如果vue中開(kāi)啟了ts語(yǔ)法,就可以使用boolean
表示類型了
js<script lang="ts" setup>
interface IProps {
photoImages?: string[],
isEdit?: boolean
}
const props = withDefaults(defineProps<IProps>(), {
photoImages: () => [],
isEdit: true
})
</script>