JavaScript原始类型

ECMAScript 有 5 种原始类型(primitive type),即 Undefined、Null、Boolean、Number 和 String。

typeof 运算符

typeof 运算符有一个参数,即要检查的变量或值。例如:

var sTemp = "test string";
alert (typeof sTemp); //输出 "string"
alert (typeof 86); //输出 "number"

对变量或值调用 typeof 运算符将返回下列值之一:

  • undefined - 如果变量是 Undefined 类型的

  • boolean - 如果变量是 Boolean 类型的

  • number - 如果变量是 Number 类型的

  • string - 如果变量是 String 类型的

  • object - 如果变量是一种引用类型或 Null 类型的

注释:您也许会问,为什么 typeof 运算符对于 null 值会返回 "Object"。这实际上是 JavaScript 最初实现中的一个错误,然后被 ECMAScript 沿用了。现在,null 被认为是对象的占位符,从而解释了这一矛盾,但从技术上来说,它仍然是原始值。

JavaScript引用类型

对于引用类型,众说纷纭。

从网络上总结的暂时有Object、Boolean、Number、String、Date、Array、Function。

==核心原理

知乎大佬manxisuo对于原理进行的全面解析,核心就是类型转换

先说转换结果:

  • undefined == null,结果是true。且它俩与所有其他值比较的结果都是false

  • String == Boolean,需要两个操作数同时转为Number。

  • String/Boolean == Number,需要String/Boolean转为Number。

  • Object == Primitive,需要Object转为Primitive(具体通过valueOftoString方法)。

核心关注引用类型Object转换原始类型(primitive type)

引用类型中的valueOf与toString方法,可以进行重写,类似如下

var obj = {valueOf: function(){ return {} }, toString: function(){ return {}}}

console.log(obj);
console.log(obj.toString());
console.log(obj.valueOf());
console.log(typeof obj); {valueOf: ƒ, toString: ƒ}
{}
{}
object

对于上方obj通过valueOf与toString方法后,最后获得结果为{},而{}这个结果是无法转换为原始类型的。

总结

知乎大佬Belleve、知乎大佬manxisuo进行了如下总结。

转换总结

双等比较

全等比较

完整比较

  • 红色:===
  • 橙色:==
  • 黄色:<= 和 >= 同时成立,== 不成立
  • 蓝色:只有 >=
  • 绿色:只有 <=

巨人的肩膀

一张图彻底搞懂JavaScript的==运算 - 知乎 (zhihu.com)

(79 条消息) Javascript 中 == 和 === 区别是什么? - 知乎 (zhihu.com)

JavaScript引用类型之Array数组的toString()和valueof()方法的区别 - 郑小超 - 博客园 (cnblogs.com)

ECMAScript 原始类型 (w3school.com.cn)

ECMAScript 引用类型 (w3school.com.cn)

“一天不学习,我浑身难受” -X大力

最新文章

  1. ABP(现代ASP.NET样板开发框架)系列之6、ABP依赖注入
  2. git版本控制?
  3. Centos 6.0将光盘作为yum源的设置方法
  4. 转connect() to unix:/var/run/php-fpm.sock failed (11: Resource temporarily unavailable)
  5. copy sqlserver中DATE类型的数据转化 CONVERT
  6. IOS多线程(GCD)
  7. 自定义View(一)-ViewGroup实现优酷菜单
  8. asp 回发的时候样式变化
  9. PL/SQL:使用pragma restrict_references限制包权限
  10. Windows7 无法打开ASA SSL VPN和ASDM首页
  11. cdoj 847 方老师与栈 火车进出战问题
  12. 键盘游戏之canvas--用OO方式写
  13. [C++基金会]位计算 游戏开发中的应用
  14. 推荐系列:最小与最大[DP+余式定理]
  15. java类集: collection, list , set, map
  16. 快速学习Bash
  17. Java基础系列-Stream
  18. O/R关系的深入理解(转载)
  19. 十二省联考题解 - JLOI2019 题解
  20. cmder 常用配置(包括默认管理员运行和解决中文乱码)

热门文章

  1. 随机数Random 和枚举enum
  2. x86-3-段式管理(segmentation)
  3. HTML+CSS+Javascript实现轮播图效果
  4. C# 余一问题 奇偶数求和问题
  5. unity3d之sokect通信
  6. 从数组中找出第K大的数
  7. 《手把手教你》系列技巧篇(六十)-java+ selenium自动化测试 - 截图三剑客 -中篇(详细教程)
  8. DQL语句总结
  9. 科技爱好者周刊(第 175 期):知识广度 vs 知识深度
  10. 由浅入深,66条JavaScript面试知识点