object是一个对象,在ts中定义对象类型的语法为:let 变量名 :object = { }
在object类型中,对象内部定义的值是不受类型约束的,只要是一个object类型即可,例如:

let obj : object = {name : '艺术概论',  // 字符串price : 999   // 数字
}
console.log(obj);   // {name: '艺术概论', price: 999}

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为直接定义基础字符串类型,str2String方法转换值为字符串,本质还是一个基础类型字符串,str3则为对象,为了验证结果,对这几个变量进行类型检测

// 检测类型
console.log(typeof str);  // string
console.log(typeof str2);  // string
console.log(typeof str3);  // object


对象类型是可以直接 obj.xxx = xxx 来新增属性的

// str.name = '东方求败'   // 报错  字符串无法 .name
// str2.name = '东方求败'  // 报错  字符串无法 .name
str3.name = '东方求败'   // 成功

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类型相关推荐

  1. ts踩坑记|指定一个object类型

    声明一个object类型的变量需要把这个对象里面键值对都声明出来,比较偷懒的方法就是像下面一样 private userData : { [key: string]: any }

  2. TS学习笔记(ts基础类型 类型别名)

    中文文档网址  https://www.tslang.cn/docs/home.html https://ts.xcatliu.com 与js不同的是  ts的变量都可以类型注解 : 后面注明变量类型 ...

  3. TS学习笔记 TS基本类型

    基本类型 类型声明 类型声明是TS非常重要的一个特点 通过类型声明可以指定TS中变量(参数.形参)的类型 指定类型后,当为变量赋值时,TS编辑器会自动检查是否符合类型声明,符合则赋值,否则报错 指定类 ...

  4. vb 使用Array.ConvertAll将object类型数组转为string类型数组

    vb 使用Array.ConvertAll将object类型数组转为string类型数组有两种方法 1.    方法1 1 Dim int_array() As Object = {1, 2, 3} ...

  5. 时间戳类型的字符串 {Timestamp@15601} “2021-07-14 18:56:53.0“ 变成带T的Object类型 2021-07-14T10:56:53.000+0000 处理

    why 两个平台,一个平台直接查询数据库,另一个平台通过接口调用查询数据,导致时间戳 Timestamp 格式字符串传输后变 yyyy-MM-ddTHH:mm:ss.000+0000 日期格式,出现这 ...

  6. java 类似xamarin_xamarin android如何将Java.Lang.Object类型转成C#类型

    问题起源 其实这个标题也可以换一个更准确一点,因为我遇到的问题是: xamarin android中的Class继承了Java.Lang.Object ,将json序列化成c#类型时发现无法赋值,序列 ...

  7. JavaScript——Object类型

    一.Object类型用于创建自定义对象(实例),创建方法如下: 1. 用new操作符后面跟Object的构造函数 var cat= new Object();//推荐// var o=new Obje ...

  8. Java中Object转Map类型,Map转Object类型

    前言 在使用Java编程过程中,经常会遇到获取的数据为Object类型,但只是以这种方式传输,实质还是Map类型,此时就涉及到两种类型的相互转换. 强制转换 在类型转换工程中,常见的转换方式为强制转换 ...

  9. JavaScript面向对象之Object类型

    大家都知道对象都是属于Object类型的.下面是一些详细总结,希望可以帮助到有需要的小伙伴. JavaScript面向对象之Object类型 在JS中所有的对象都拥有同一个父级,就是Object. O ...

最新文章

  1. java奇怪的问题_一个奇怪的Java集合问题
  2. LinKedHashMap和TreeMap介绍
  3. 使用BAPI_CONTRACT_CREATE创建采购合同框架协议
  4. 压缩命令_Linux环境下文件压缩打包命令详解
  5. SIGIR 2019 开源论文 | 用户注意力指导的多模态对话系统
  6. MySQL中的UNIX_TIMESTAMP函数使用总结
  7. Linux 命令之 pstree -- 以树状图显示进程/查看进程信息
  8. 怎么在mysql查询自己建的表格_oracle数据库中怎么查询自己建的表
  9. 二、源代码=程序集及程序集概念介绍
  10. 【Elasticsearch】ES 7.8 写入 查询 Normalizer 忽略 大小写
  11. 花书+吴恩达深度学习(三)反向传播算法 Back Propagation
  12. 如何知道PostgreSQL数据库下每个数据库所对应的目录
  13. I2S原理分析(二十九)
  14. 使用jQuery+huandlebars遍历中if判断
  15. 计算机 考 二级结构工程师,下半年河北省结构工程师二级专业结构:计算机软件的组成及功能考试试题.doc...
  16. CI521支持读写A卡和B卡,PIN对PIN直接替换CV520和CI520,软硬件兼容
  17. Scratch编程(九)扩展模块:翻译模块
  18. IIR数字滤波器设计和实现
  19. 【图像处理基础】BMP格式图片的解析
  20. 【力扣周赛】第340场周赛

热门文章

  1. C语言值传递与地址传递
  2. stata里php代码,stata命令求解惑
  3. ET工业大脑开放平台,全球首个工业智能的孵化基地
  4. 云朵左右移动上下漂浮
  5. 怎么生成二维码彩色版
  6. Jenkin+GitLab自动构建Maven项目
  7. 推荐八款好用的项目管理工具
  8. 网络编程-JavaScript中发送网络请求汇总
  9. [经典文章翻译]A Crash Course on the Depths of Win32 Structured Exception Handling
  10. 论文推荐到计算机科学期刊,8篇最具影响力文章带你了解 Springer 计算机科学期刊...