【TS】object类型
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为直接定义基础字符串类型,str2为String方法转换值为字符串,本质还是一个基础类型字符串,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类型的更多相关文章
- 【长文详解】TypeScript、Babel、webpack以及IDE对TS的类型检查
只要接触过ts的前端同学都能回答出ts是js超集,它具备静态类型分析,能够根据类型在静态代码的解析过程中对ts代码进行类型检查,从而在保证类型的一致性.那,现在让你对你的webpack项目(其实任意类 ...
- 自学 TypeScript 第一天 环境开发配置 及 TS 基本类型声明
前言: 自学第一天,什么是TS ,为什么要用 TS TS 全程 Typed JavaScript at Any Scale 解释起来就是 添加了类型系统的 JavaScript, 是 JavaScr ...
- JS高程5.引用类型(1)Object类型
引用类型 在ECMASCript中,引用类型是一种数据结构,将数据和功能组织在一起,引用类型有时候也被称为对象定义,因为它们描述的是一类对象所具有的属性和方法.(注意:尽管ECMAScript从技术上 ...
- 5.1 JS中Object类型
1.Object类型是引用类型中的一种. 2.创建Object实例(对象)的方式: 方式1:使用new操作符,后面跟上Object构造函数.如: var obj = new Object();//创建 ...
- Object类型与Array类型
总结--JS中的引用类型: Object类型,Array类型,Boolean类型,Number类型,String类型,Date类型, Function类型,RegExp类型,单体内置对象(Global ...
- Object类型
Object类型 我们看到的大多数引用类型值都是Object类型的实例,虽然Object类型不具备多少功能,但是在储存和传输数据上的确是不错的选择. 2.对象字面量表示法 调用Object构造函数: ...
- JavaScript引用类型之Object类型
在JavaScript中大多数的引用类型都是Object的实例,Object类型也是使用最多的类型! 创建Object类型实例的方式有两种,下面分别来分析一下: (1)第一种是使用new操作符后跟Ob ...
- 引用类型之object类型
object类型有两种创建方法,第一种是直接创建法: var person=new Object(); person.name = "Nicholas"; person.age = ...
- 从头开始学JavaScript (十一)——Object类型
原文:从头开始学JavaScript (十一)--Object类型 一.object类型 一个object就是一系列属性的集合,一个属性包含一个名字(属性名)和一个值(属性值). object对于在应 ...
- 《JavaScript高级程序设计》读书笔记 ---Object 类型
引用类型的值(对象)是引用类型的一个实例.在ECMAScript 中,引用类型是一种数据结构,用于将数据和功能组织在一起.它也常被称为类,但这种称呼并不妥当.尽管ECMAScript从技术上讲是一门面 ...
随机推荐
- ubuntu 20.04 / 22.04 运行32位程序
sudo dpkg --add-architecture i386 sudo apt install libc6:i386 libstdc++6:i386 sudo apt-get update su ...
- Linux配置篇 - Vmware网络配置
网络配置 VM 网络详解 vmware提供了三种网络工作模式,Bridged(桥接模式).NAT(网络地址转换模式).Host-Only(仅主机模式): vmware网络配置步骤:编辑 -> 虚 ...
- 解决windows installation failed! Error: 无法访问 Windows Installer 服务
这种错误,是因为没有开启winodws Installer这个服务导致的,在开始菜单搜索"服务",找到windows Installer 这个服务,右键--属性--把启动类型 选成 ...
- 关于CSDN发布博客接口的研究
前言 其实我之前就有一个想法,实现用 python 代码来发布博客, 因为我个人做了一个发布到 github 博客软件(其实就是实现 git 命令集成,还有markdown的渲染的软件), 如果我弄明 ...
- SSH(六)hibernate持久层模板于事务管理
持久层只要完成数据对数据库增删改查的操作,我们常说的hibernate区别于mybatis是在于他的全自动,而hibernate的全自动则主要体现于 他的模板,一些简单的数据操作我们就不用再去手写sq ...
- 设计链表-LeetCode707 基础题
LeetCode链接:https://leetcode.cn/problems/design-linked-list/ 题目:设计链表的实现.您可以选择使用单链表或双链表.单链表中的节点应该具有两个属 ...
- NOIP 口胡
因为没准备啥东西 这两天口胡一下近年 NOIP 的题 大概会一道不落?没什么很寄的考点主要是 2021 T1 报数 打一个 \(O(\log n)\) 查询 \(n\) 中是否有 \(7\),打一个类 ...
- 【Shell案例】【for循环、seq生成】3、输出7的倍数
描述写一个 bash脚本以输出数字 0 到 500 中 7 的倍数(0 7 14 21...)的命令 方法1:in方式循环 [if的括号是中括号,中间的条件要有空格] [循环体用do和done配对] ...
- 【Java SE进阶】Day07 等待与唤醒案例、线程池、Lamdba表达式
一.等待唤醒机制 1.线程间通信 多个线程处理同一个资源,就存在线程通信问题(线程间存在竞争与协作机制) 为什么处理:为了 保证多个线程有规律地完成同一任务 如何处理:避免对共享变量争夺,需要等待唤醒 ...
- SpringBoot中搭配AOP实现自定义注解
1 springBoot的依赖 确定项目中包含可以注解的依赖 <dependency> <groupId>org.springframework.boot</groupI ...