【TS】object类型
object是一個(gè)對(duì)象,在ts中定義對(duì)象類型的語(yǔ)法為:let 變量名 :object = { }
在object類型中,對(duì)象內(nèi)部定義的值是不受類型約束的,只要是一個(gè)object類型即可,例如:
object 類型在函數(shù)中的使用
// 定義一個(gè)函數(shù),參數(shù)是object類型,返回值也是object類型 function getObj (obj:object) : object {console.log(obj);return {name : '東方不敗',age : 100} }定義object類型,傳入的值必須是object類型,否則會(huì)報(bào)錯(cuò)
console.log(getObj({name : '孫悟空',age : 1000})); // 正確 // console.log(getObj(123)); // 錯(cuò)誤的某些方法本質(zhì)是一個(gè)對(duì)象,所以也可以傳入,比如 new String
console.log(getObj(new String('藝術(shù)概論'))); // 正確打印 console.log(new String) 的話可以看到 string是一個(gè)對(duì)象
new String為什么是一個(gè)對(duì)象?
通常定義字符串的方法有這些
let str = '東方不敗' // 字符串 let str2 = String('東方不敗') // 字符串 let str3 = new String('東方不敗') // 對(duì)象 String{}前兩種方法是基礎(chǔ)類型的,str為直接定義基礎(chǔ)字符串類型,str2為String方法轉(zhuǎn)換值為字符串,本質(zhì)還是一個(gè)基礎(chǔ)類型字符串,str3則為對(duì)象,為了驗(yàn)證結(jié)果,對(duì)這幾個(gè)變量進(jìn)行類型檢測(cè)
// 檢測(cè)類型 console.log(typeof str); // string console.log(typeof str2); // string console.log(typeof str3); // object
對(duì)象類型是可以直接 obj.xxx = xxx 來(lái)新增屬性的
str3打印的結(jié)果
js中變量存儲(chǔ)有兩種方式
1、基礎(chǔ)類型存儲(chǔ) : String , Boolean , Number , Undefined , Null
2、引用類型存儲(chǔ) : Object(Array,Date,RegExp,Function)
- js的定義的變量都是保存在堆和棧中的
- 基礎(chǔ)類型保存在棧內(nèi)存中,值與值之間獨(dú)立存在,互補(bǔ)干擾,因此不存在修改了一個(gè)變量導(dǎo)致原始變量值發(fā)生改變的問(wèn)題。
- 對(duì)象類型保存在堆中,創(chuàng)建對(duì)象會(huì)在堆內(nèi)存中開辟一個(gè)新空間,變量保存的是對(duì)象的內(nèi)存地址,而不是保存的值,也就是棧(變量)中存的是堆的指針,如果兩個(gè)變量保存的是同一個(gè)地址,那么他們的指針指向的是同一個(gè),所以通過(guò)a變量修改屬性時(shí),b變量也會(huì)受到影響。
- 兩個(gè)基礎(chǔ)類型的數(shù)據(jù)比較時(shí),比較的是值。
- 兩個(gè)引用類型的數(shù)據(jù)比較時(shí),比較的是內(nèi)存地址,如果兩個(gè)變量一模一樣,但是內(nèi)存地址不同,也會(huì)返回false。
在此處str3中,new String() 實(shí)際上是創(chuàng)建了一個(gè)新的對(duì)象,將值存到了實(shí)例對(duì)象的堆中,所以我們可以給str3添加屬性。
案例源碼:https://gitee.com/wang_fan_w/ts-seminar
如果覺(jué)得這篇文章對(duì)你有幫助,歡迎點(diǎn)亮star
總結(jié)
以上是生活随笔為你收集整理的【TS】object类型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: WebStorm设置前端开发代码规范
- 下一篇: 机器学习基础--卡方检验