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