javascript 自定义类型
前言
- 360极速浏览器: 12.0.1476.0 (正式版本) (32 位)
- 修订版本: 47c49e5a5935cfffa348dcfa6c581f4394327ac8
- 操作系统: Windows 10 OS Version 2004 (Build 19041.450)
- JavaScript :V8 7.8.279.23
注:使用命令chrome://version/
查看 JavaScript 版本 - javascript 查看变量类型
- 该怎么判断自定义的类型呢?
Object.prototype.toString
查看自定义类型的问题
class MyBook {}
console.log(Object.prototype.toString.call(new MyBook())); // "[object Object]"function MyVideo() {}
console.log(Object.prototype.toString.call(new MyVideo())); // "[object Object]"console.log(Object.prototype.toString.call({})); // "[object Object]"
通过上面的代码可以看出无法区分出 MyBook
和 MyVideo
。
期望能够获得 [object MyBook]
和 [object MyVideo]
。
Object.prototype.toString
方法的原理
简单理解 Object.prototype.toString
的返回值为:"[object " + @@toStringTag + “]” 。
@@toStringTag 是啥?我没明白是个啥,这里不介绍了。
正确设置自定义类型
class MyBook { get[Symbol.toStringTag](){return "MyBook";} }
console.log(Object.prototype.toString.call(new MyBook())); // "[object MyBook]"function MyVideo() {}
MyVideo.prototype[Symbol.toStringTag]="MyVideo";
console.log(Object.prototype.toString.call(new MyVideo())); // "[object MyVideo]"let myHome = { [Symbol.toStringTag]:"MyHome" };
console.log(Object.prototype.toString.call(myHome)); // "[object MyHome]"
还可以这样:
class MyBook { [Symbol.toStringTag]="MyBook"; }
console.log(Object.prototype.toString.call(new MyBook())); // "[object MyBook]"class MyBook {}
MyBook.prototype[Symbol.toStringTag]="MyBook";
console.log(Object.prototype.toString.call(new MyBook())); // "[object MyBook]"function MyVideo() { this[Symbol.toStringTag]="MyVideo"; }
console.log(Object.prototype.toString.call(new MyVideo())); // "[object MyVideo]"
一个值得思考的问题
不要这样做:
class MyBook {}
let myBook=new MyBook();
myBook[Symbol.toStringTag]="MyBook";
console.log(Object.prototype.toString.call(myBook)); // "[object MyBook]"class MyVideo {}
let myVideo=new MyVideo();
myVideo[Symbol.toStringTag]="MyVideo";
console.log(Object.prototype.toString.call(myVideo)); // "[object MyVideo]"let myHome = {};
myHome[Symbol.toStringTag]="MyHome";
console.log(Object.prototype.toString.call(myHome)); // "[object MyHome]"
提防这个情况:
Object.prototype.toString=function(){return "[object CaiBuDao]";}
console.log(Object.prototype.toString.call(1)); // "[object CaiBuDao]"
console.log(Object.prototype.toString.call("1")); // "[object CaiBuDao]"
参考
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag
https://www.softwhy.com/article-7583-1.html
https://www.cnblogs.com/ziyunfei/archive/2012/11/05/2754156.html
https://www.cnblogs.com/fundebug/p/why-does-javascript-need-symbol.html
javascript 自定义类型相关推荐
- JavaScript 自定义对象
原文:JavaScript 自定义对象 在Js中,除了Array.Date.Number等内置对象外,开发者可以通过Js代码创建自己的对象. 目录 1. 对象特性:描述对象的特性 2. 创建对象方式: ...
- 详解JavaScript变量类型判断及domReady原理 写得很好
原文:详解JavaScript变量类型判断及domReady原理 我们知道,在开发JavaScript时候,经常要判断JavaScript变量类型,此 JavaScript教程 详细介绍JS变量的判断 ...
- JavaScript对象类型Object
前言 系统学习JavaScript,由于有3年的java后端开发经验,并且有2年的JavaScript+Jquery开发经验,所以像编程语言的一些通用知识就直接跳过了,重点关注JavaScript的语 ...
- [JavaScript]自定义MessageBox
前言: 继上文([JavaScript]自定义Title的显示方式)之后,我的工作是进一步增强一些IE所不能提供的东东. 还记得Windows下的MessageBox嘛? IE呢?Alert?Conf ...
- JavaScript 自定义对象 及 new()原理与实现 如何完整地手写实现new
JavaScript 自定义对象 及 new() 原理与实现 作者: 李俊才 邮箱 :291148484@163.com CSDN 主页:https://blog.csdn.net/qq_285502 ...
- JavaScript自定义事件--高级技巧
观察者模式 事件是JavaScript和浏览器交互的主要途径.事件是一种叫做观察者的设计模式,这是一种创建松散耦合代码的技术. 观察者模式:由两类对象组成,主体和观察者,主体负责发布事件,观察者通过订 ...
- 聊一聊JavaScript的类型检测
JavaScript的类型检测 一共有四种原生办法检测js的类型 1. typeof 2. instanceof 3. constructor 4. Object.prototype.toString ...
- JavaScript自定义对象
JavaScript自定义对象 2.1.类和对象的概念 所谓对象就是真实世界中的实体,对象与实体是一一对应的,也就是说现实世界中每一个实体都是一个对象,它是一种具体的存在,可以发现身边很多对象,汽 ...
- Oracle type (自定义类型的使用)
oracle - type type定义: oracle中自定义数据类型 oracle中有基本的数据类型,如number,varchar2,date,numeric,float....但有时候我们需要 ...
最新文章
- 趋势型指标——MACD
- 【UIKit】表格 UITableView
- APACHE利用Limit模块限制IP连接数
- python零基础怎么学-零基础python入门分析,如何做到一个月学会(深思极恐)
- Deformable ConvNets--Part4: Deformable Convolutional Networks
- 腾讯基于 Flink 的实时流计算平台演进之路
- SetForceGroundWindow
- 用一个按钮做主窗口,可以吗?
- C#正则表达式编程(四)转致周公
- remove()方法
- Google Kickstart Round.B C. Diverse Subarray
- 世界第一个无人机快递网络下月在瑞士运营 物品 30 分钟内可达
- [绍棠] Xcode9无线调试教程
- Reeder的本地使用
- 瑞星杀毒软件网络版2012支持Web日志访问
- 搬家后计算机总重启,电脑无故重启是这一个月来的事了,我刚刚搬家电脑搬到新家那用了没几 爱问知识人...
- 心得三、做事先做人(转载)
- 双硬盘安装win10和linux双系统,双硬盘安装win10+ubuntu18心得
- 手工编程铣加工视频教程 铣代码讲解
- 服务端向客户端主动发送消息