韩国男女直接做视频网站,广告公司名字简单大气三个字,做静态网站软件,门户网站建设厂商名录包装对象类型
目录
包装对象类型 目录包装对象的概念包装对象类型和字面量类型Objectobject
包装对象的概念
JavaScript 的8种类型之中#xff0c;undefined和null其实是两个特殊值#xff0c;object属于复合类型#xff0c;剩下的五种属于原始类型#xff08;primiti…包装对象类型
目录
包装对象类型 目录包装对象的概念包装对象类型和字面量类型Objectobject
包装对象的概念
JavaScript 的8种类型之中undefined和null其实是两个特殊值object属于复合类型剩下的五种属于原始类型primitive value代表最基本的、不可再分的值。
booleanstringnumberbigintsymbol 上面这五种原始类型的值都有对应的包装对象wrapper object。所谓“包装对象”指的是这些值在需要时会自动产生的对象。 // 包装对象概念
hello.charAt(1) // e上面示例中字符串hello执行了charAt()方法。但是在 JavaScript 语言中只有对象才有方法原始类型的值本身没有方法。这行代码之所以可以运行就是因为在调用方法时字符串会自动转为包装对象charAt()方法其实是定义在包装对象上。
这样的设计大大方便了字符串处理省去了将原始类型的值手动转成对象实例的麻烦。
五种包装对象之中symbol 类型和 bigint 类型无法直接获取它们的包装对象即Symbol()和BigInt()不能作为构造函数使用但是剩下三种可以。
Boolean()String()Number()
以上三个构造函数执行后可以直接获取某个原始类型值的包装对象。
const Bakun new String(hello);
typeof Bakun; // object
Bakun.charAt(1); // e上面示例中Bakun 就是字符串hello的包装对象typeof运算符返回object不是string但是本质上它还是字符串可以使用所有的字符串方法。
注意String()只有当作构造函数使用时即带有new命令调用才会返回包装对象。如果当作普通函数使用不带有new命令返回就是一个普通字符串。其他两个构造函数Number()和Boolean()也是如此。
包装对象类型和字面量类型
由于包装对象的存在导致每一个原始类型的值都有包装对象和字面量两种情况。
hello // 字面量
new String(hello) // 包装对象为了区分这两种情况TypeScript 对五种原始类型分别提供了大写和小写两种类型。
Boolean 和 booleanString 和 stringNumber 和 numberBigInt 和 bigintSymbol 和 symbol
其中大写类型同时包含包装对象和字面量两种情况小写类型只包含字面量不包含包装对象。
//ts中
const Bakun02: String hello; // 正确
const Bakun03: String new String(hello); // 正确const Bakun04: string hello; // 正确
const Bakun05: string new String(hello); // 报错
建议只使用小写类型不使用大写类型。因为绝大部分使用原始类型的场合都是使用字面量不使用包装对象。而且TypeScript 把很多内置方法的参数定义成小写类型使用大写类型会报错。
const n1:number 1;
const n2:Number 1;Math.abs(n1) // 1
Math.abs(n2) // 报错Object
大写的Object类型代表 JavaScript 语言里面的广义对象。所有可以转成对象的值都是Object类型这囊括了几乎所有的值。
let obj:Object;obj true;
obj hi;
obj 1;
obj { foo: 123 };
obj [1, 2];
obj (a:number) a 1;上面示例中原始类型值、对象、数组、函数都是合法的Object类型。
事实上除了undefined和null这两个值不能转为对象其他任何值都可以赋值给Object类型。
let obj:Object;obj undefined; // 报错
obj null; // 报错上面示例中undefined和null赋值给Object类型就会报错。
另外空对象{}是Object类型的简写形式所以使用Object时常常用空对象代替。
let obj:{};obj true;
obj hi;
obj 1;
obj { foo: 123 };
obj [1, 2];
obj (a:number) a 1;上面示例中变量obj的类型是空对象{}就代表Object类型。
显然无所不包的Object类型既不符合直觉也不方便使用。
object
小写的object类型代表 JavaScript 里面的狭义对象即可以用字面量表示的对象只包含对象、数组和函数不包括原始类型的值。
let obj:object;obj { foo: 123 };
obj [1, 2];
obj (a:number) a 1;
obj true; // 报错
obj hi; // 报错
obj 1; // 报错上面示例中object类型不包含原始类型值只包含对象、数组和函数。
大多数时候我们使用对象类型只希望包含真正的对象不希望包含原始类型。所以建议总是使用小写类型object不使用大写类型Object。
注意无论是大写的Object类型还是小写的object类型都只包含 JavaScript 内置对象原生的属性和方法用户自定义的属性和方法都不存在于这两个类型之中。
const o1:Object { foo: 0 };
const o2:object { foo: 0 };o1.toString() // 正确
o1.foo // 报错o2.toString() // 正确
o2.foo // 报错上面示例中toString()是对象的原生方法可以正确访问。foo是自定义属性访问就会报错。
后续会和大家说怎么描述对象的自定义属性